Module last

Require syntax.
Require Lattice.
Require func.
Require StackLattice.
Require AbVal.
Require FiniteSet.
Require analysis.
Require correct.
Require construct_analyzer.
Require rel_correct.
Require semantic.

Theorem analyzer_verifyAllFlow : (P:Program)
 (verifyAllFlow P (analyzer P)).
Intros.
Apply fix_apply_list_func1.
Elim (lfp_is_lifp ? (LatAbState P) (Flow_func P) (Flow_func_monotone P));
Intros.
Unfold analyzer; Auto.
Qed.

Theorem analyzer_least_verifyAllFlow : (P:Program)
 (AbS:(AbState P))
 (verifyAllFlow P AbS) ->
 (order (LatAbState P) (analyzer P) AbS).
Intros.
Elim (lfp_is_lifp ? (LatAbState P) (Flow_func P) (Flow_func_monotone P));
Intros.
Unfold analyzer.
Apply H1.
Apply fix_apply_list_func2; Auto.
Qed.

Theorem analyzer_list_verifyAllFlow : (P:Program)
 (verifyAllFlow P (analyzer_list P)).
Intros.
Apply fix_apply_list_collect1.
Intros.
Elim (lfp_list_is_lifp ? (LatAbState P)
              (collect_func P)
              (collect_func_monotone P));
Intros.
Unfold analyzer_list; Auto.
Qed.

Theorem analyzer_list_least_verifyAllFlow : (P:Program)
 (AbS:(AbState P))
 (verifyAllFlow P AbS) ->
 (order (LatAbState P) (analyzer_list P) AbS).
Intros.
Elim (lfp_list_is_lifp ? (LatAbState P)
              (collect_func P)
              (collect_func_monotone P));
Intros.
Unfold analyzer_list.
Apply H1.
Apply fix_apply_list_collect2; Auto.
Qed.

Theorem analyzer_correct :
(P : Program ; st : State)
 (reachable_State P st) ->
 (R_State P st (analyzer P)).
Intros.
Apply SubjectReduction.
Apply analyzer_verifyAllFlow.
Assumption.
Qed.

Theorem analyze :
 (P:Program){AbS:(AbState P) |
                  (st:State) (reachable_State P st) -> (R_State P st AbS)}.
Intros P.
Exists (analyzer P).
Apply analyzer_correct.
Qed.

Extraction Inline iter_until_fix_f fix Fix_F.

Extraction"Caml/analyse.ml" analyzer analyzer_list.


Index
This page has been generated by coqdoc