7626
|
1 |
(* Title: HOL/BCV/DFAimpl.thy
|
|
2 |
ID: $Id$
|
|
3 |
Author: Tobias Nipkow
|
|
4 |
Copyright 1999 TUM
|
|
5 |
|
|
6 |
Implementations of data-flow analysis.
|
|
7 |
*)
|
|
8 |
|
|
9 |
DFAimpl = DFAandWTI + Fixpoint +
|
|
10 |
|
|
11 |
consts merges :: "('s::plus) => nat list => 's os => 's os"
|
|
12 |
primrec
|
|
13 |
"merges a [] s = s"
|
|
14 |
"merges a (p#ps) s = merges a ps (s[p := Some(a) + s!p])"
|
|
15 |
|
|
16 |
constdefs
|
|
17 |
succs_bounded :: "(nat => nat list) => nat => bool"
|
|
18 |
"succs_bounded succs n == !p<n. !q:set(succs p). q<n"
|
|
19 |
|
|
20 |
is_next :: "((nat => 's => ('s::plus)option) => (nat => nat list)
|
|
21 |
=> 's os => 's os option)
|
|
22 |
=> bool"
|
|
23 |
"is_next next == !step succs sos sos'.
|
|
24 |
succs_bounded succs (size sos) -->
|
|
25 |
(next step succs sos = None -->
|
|
26 |
(? p<size sos. ? s. sos!p = Some s & step p s = None)) &
|
|
27 |
(next step succs sos = Some sos -->
|
|
28 |
(!p<size sos. !s. sos!p = Some s --> (? t.
|
|
29 |
step p s = Some(t) & merges t (succs p) sos = sos))) &
|
|
30 |
(next step succs sos = Some sos' & sos' ~= sos -->
|
|
31 |
(? p<size sos. ? s. sos!p = Some s & (? t.
|
|
32 |
step p s = Some(t) & merges t (succs p) sos = sos')))"
|
|
33 |
|
|
34 |
step_pres_type :: "(nat => 's => 's option) => nat => 's set => bool"
|
|
35 |
"step_pres_type step n L == !s:L. !p<n. !t. step p s = Some(t) --> t:L"
|
|
36 |
|
|
37 |
step_mono_None :: "(nat => 's => 's option) => nat => 's set => bool"
|
|
38 |
"step_mono_None step n L == !s p t.
|
|
39 |
s : L & p < n & s <= t & step p s = None --> step p t = None"
|
|
40 |
|
|
41 |
step_mono :: "(nat => 's => 's option) => nat => 's set => bool"
|
|
42 |
"step_mono step n L == !s p t u.
|
|
43 |
s : L & p < n & s <= t & step p s = Some(u)
|
|
44 |
--> (!v. step p t = Some(v) --> u <= v)"
|
|
45 |
|
|
46 |
consts
|
|
47 |
itnext :: nat => (nat => 's => 's option) => (nat => nat list)
|
|
48 |
=> 's os => ('s::plus) os option
|
|
49 |
primrec
|
|
50 |
"itnext 0 step succs sos = Some sos"
|
|
51 |
"itnext (Suc p) step succs sos =
|
|
52 |
(case sos!p of
|
|
53 |
None => itnext p step succs sos
|
|
54 |
| Some s => (case step p s of None => None
|
|
55 |
| Some t => let sos' = merges t (succs p) sos
|
|
56 |
in if sos' = sos
|
|
57 |
then itnext p step succs sos
|
|
58 |
else Some sos'))"
|
|
59 |
|
|
60 |
end
|