10496
|
1 |
(* Title: HOL/BCV/DFA_Framework.thy
|
|
2 |
ID: $Id$
|
|
3 |
Author: Tobias Nipkow
|
|
4 |
Copyright 2000 TUM
|
|
5 |
*)
|
|
6 |
|
|
7 |
header "Dataflow Analysis Framework"
|
|
8 |
|
|
9 |
theory DFA_Framework = Listn:
|
|
10 |
|
11085
|
11 |
text {*
|
|
12 |
The relationship between dataflow analysis and a welltyped-insruction predicate.
|
|
13 |
*}
|
|
14 |
|
10496
|
15 |
constdefs
|
10592
|
16 |
bounded :: "(nat => nat list) => nat => bool"
|
|
17 |
"bounded succs n == !p<n. !q:set(succs p). q<n"
|
10496
|
18 |
|
|
19 |
stable :: "'s ord =>
|
|
20 |
(nat => 's => 's)
|
|
21 |
=> (nat => nat list) => 's list => nat => bool"
|
|
22 |
"stable r step succs ss p == !q:set(succs p). step p (ss!p) <=_r ss!q"
|
|
23 |
|
|
24 |
stables :: "'s ord => (nat => 's => 's)
|
|
25 |
=> (nat => nat list) => 's list => bool"
|
|
26 |
"stables r step succs ss == !p<size ss. stable r step succs ss p"
|
|
27 |
|
|
28 |
is_dfa :: "'s ord
|
|
29 |
=> ('s list => 's list)
|
|
30 |
=> (nat => 's => 's)
|
|
31 |
=> (nat => nat list)
|
|
32 |
=> nat => 's set => bool"
|
|
33 |
"is_dfa r dfa step succs n A == !ss : list n A.
|
|
34 |
dfa ss : list n A & stables r step succs (dfa ss) & ss <=[r] dfa ss &
|
|
35 |
(!ts: list n A. ss <=[r] ts & stables r step succs ts
|
|
36 |
--> dfa ss <=[r] ts)"
|
|
37 |
|
|
38 |
is_bcv :: "'s ord => 's => (nat => 's => 's) => (nat => nat list)
|
|
39 |
=> nat => 's set => ('s list => 's list) => bool"
|
|
40 |
"is_bcv r T step succs n A bcv == !ss : list n A.
|
|
41 |
(!p<n. (bcv ss)!p ~= T) =
|
|
42 |
(? ts: list n A. ss <=[r] ts & welltyping r T step succs ts)"
|
|
43 |
|
|
44 |
welltyping ::
|
|
45 |
"'s ord => 's => (nat => 's => 's) => (nat => nat list) => 's list => bool"
|
|
46 |
"welltyping r T step succs ts ==
|
|
47 |
!p<size(ts). ts!p ~= T & stable r step succs ts p"
|
|
48 |
|
|
49 |
|
|
50 |
lemma is_dfaD:
|
|
51 |
"[| is_dfa r dfa step succs n A; ss : list n A |] ==>
|
|
52 |
dfa ss:list n A & stables r step succs (dfa ss) & ss <=[r] dfa ss &
|
|
53 |
(!ts: list n A. stables r step succs ts & ss <=[r] ts
|
|
54 |
--> dfa ss <=[r] ts)"
|
|
55 |
by (simp add: is_dfa_def)
|
|
56 |
|
|
57 |
|
|
58 |
lemma is_bcv_dfa:
|
|
59 |
"[| order r; top r T; is_dfa r dfa step succs n A |]
|
|
60 |
==> is_bcv r T step succs n A dfa"
|
|
61 |
apply (unfold is_bcv_def welltyping_def stables_def)
|
|
62 |
apply clarify
|
|
63 |
apply (drule is_dfaD)
|
|
64 |
apply assumption
|
|
65 |
apply clarify
|
|
66 |
apply (rule iffI)
|
|
67 |
apply (rule bexI)
|
|
68 |
apply (rule conjI)
|
|
69 |
apply assumption
|
|
70 |
apply (simp add: stables_def)
|
|
71 |
apply assumption
|
|
72 |
apply clarify
|
|
73 |
apply (simp add: imp_conjR all_conj_distrib stables_def
|
|
74 |
cong: conj_cong)
|
|
75 |
apply (drule_tac x = ts in bspec)
|
|
76 |
apply assumption
|
|
77 |
apply (force dest: le_listD)
|
|
78 |
done
|
|
79 |
|
|
80 |
end
|