Reasoning Details

 < Module simple_imp:assert.
 < Prove_Constraint simple_imp:host:proj_e_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_e_is.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_rf_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_rf_is.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_c_unique.

Variables: C2 E
Hyp : |{c}- assert E ~~> noop
Hyp1 : |{c}- assert E ~~> C2
============================
 noop = C2
 < case Hyp1.

Variables: E
Hyp : |{c}- assert E ~~> noop
============================
 noop = noop
 < search.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_c_is.

Variables: E
Hyp : |{c}- assert E ~~> noop
Hyp1 : is_c (assert E)
============================
 is_c noop
 < search.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_recFields_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_recFields_is.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_ty_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_ty_is.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_value_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_value_is.

Proof completed.
 < Prove simple_imp:host:vars_join,
         simple_imp:host:vars_rf_join.

Proof completed.
 < Prove simple_imp:host:vars_unique,
         simple_imp:host:vars_rf_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_e_vars_exist.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_e_vars.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_rf_vars_exist.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_rf_vars.

Proof completed.
 < Prove simple_imp:host:vars_is,
         simple_imp:host:vars_rf_is.

Proof completed.
 < Prove simple_imp:host:vars_exist,
         simple_imp:host:vars_rf_exist.

Proof completed.
 < Prove simple_imp:host:typeOf_unique,
         simple_imp:host:typeRecFields_unique.

Proof completed.
 < Prove simple_imp:host:typeOK_unique.

Subgoal 8:

Variables: G1 G2 E
IH : forall G C G1 G2, typeOK G C G1 * -> typeOK G C G2 -> G1 = G2
Ty1 : typeOK G1 (assert E) G1 @
Ty2 : typeOK G1 (assert E) G2
Ty3 : typeOf G1 E boolTy
============================
 G1 = G2
 < case Ty2.

Subgoal 8:

Variables: G2 E
IH : forall G C G1 G2, typeOK G C G1 * -> typeOK G C G2 -> G1 = G2
Ty1 : typeOK G2 (assert E) G2 @
Ty3 : typeOf G2 E boolTy
H1 : typeOf G2 E boolTy
============================
 G2 = G2
 < search.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_eval_e.

Proof completed.
 < Prove simple_imp:host:eval_e_unique,
         simple_imp:host:eval_rf_unique.

Proof completed.
 < Prove simple_imp:host:update_rec_fields_unique.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_c_eval.

Variables: G G2 E
Hyp : |{c}- assert E ~~> noop
Hyp1 : eval_c G (assert E) G2
============================
 exists G', eval_c G noop G'
 < Ev: case Hyp1.

Variables: G2 E
Hyp : |{c}- assert E ~~> noop
Ev : eval_e G2 E trueVal
============================
 exists G', eval_c G2 noop G'
 < search.

Proof completed.
 < Add_Ext_Size simple_imp:host:eval_c.

Proof completed.
 < Add_Proj_Rel simple_imp:host:eval_c.

Proof completed.
 < Prove_Ext_Ind simple_imp:host:eval_c.

Subgoal 10:

Variables: G1 E
IH : forall N G C G1, <eval_c {ES}> G C G1 N -> acc N * -> <eval_c {P}> G C G1
IH1 : forall N G C G1,
        <eval_c {ES}> G C G1 N ** -> acc N @ -> <eval_c {P}> G C G1
R : <eval_c {ES}> G1 (assert E) G1 1 @@
Acc : acc 1 @
R1 : eval_e G1 E trueVal
============================
 <eval_c {P}> G1 (assert E) G1
 < search.

Proof completed.
 < Prove simple_imp:host:eval_c_unique.

Subgoal 10:

Variables: G1 G2 E
IH : forall G C G1 G2, eval_c G C G1 * -> eval_c G C G2 -> G1 = G2
Ev1 : eval_c G1 (assert E) G1 @
Ev2 : eval_c G1 (assert E) G2
Ev3 : eval_e G1 E trueVal
============================
 G1 = G2
 < case Ev2.

Subgoal 10:

Variables: G2 E
IH : forall G C G1 G2, eval_c G C G1 * -> eval_c G C G2 -> G1 = G2
Ev1 : eval_c G2 (assert E) G2 @
Ev3 : eval_e G2 E trueVal
H1 : eval_e G2 E trueVal
============================
 G2 = G2
 < search.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_c_eval_results.

Variables: G G1 G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp1 : eval_c G (assert E) G1
Hyp2 : eval_c G noop G2
Hyp3 : lookup G1 X V
============================
 lookup G2 X V
 < case Hyp1.

Variables: G1 G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp2 : eval_c G1 noop G2
Hyp3 : lookup G1 X V
H1 : eval_e G1 E trueVal
============================
 lookup G2 X V
 < case Hyp2.

Variables: G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp3 : lookup G2 X V
H1 : eval_e G2 E trueVal
============================
 lookup G2 X V
 < search.

Proof completed.
 < Prove_Constraint simple_imp:host:proj_c_eval_results_back.

Variables: G G1 G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp1 : eval_c G (assert E) G1
Hyp2 : eval_c G noop G2
Hyp3 : lookup G2 X V
============================
 lookup G1 X V
 < case Hyp1.

Variables: G1 G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp2 : eval_c G1 noop G2
Hyp3 : lookup G2 X V
H1 : eval_e G1 E trueVal
============================
 lookup G1 X V
 < case Hyp2.

Variables: G2 X V E
Hyp : |{c}- assert E ~~> noop
Hyp3 : lookup G2 X V
H1 : eval_e G2 E trueVal
============================
 lookup G2 X V
 < search.

Proof completed.
 < Prove simple_imp:host:vars_eval_same_result,
         simple_imp:host:vars_equal_rf_same_result.

Proof completed.
Back to example home