annotate read.me @ 17:a9c1a72bc6a1

*** empty log message ***
author kono
date Sun, 21 Jan 2001 10:21:24 +0900
parents 4360c2030303
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
1 LITE: A little LITL Verifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
3 Copyright (C) 1994,1991,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
4 Shinji Kono (kono@csl.sony.co.jp)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
5 Sony Computer Science Laboratory, Inc.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
6 The University, Newcastle upton Tyne
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
7
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
8 Everyone is permitted to copy and distribute verbatim copies
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
9 of this license, but changing it is not allowed. You can also
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
10 use this wording to make the terms for other programs.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
11
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
12 send your comments to kono@csl.sony.co.jp
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
13
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
14 Files
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
15 Makefile Makefile for *.ql/*.pl, "make" is called from Prolog
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
16 bdtstd.pl Binary Tree Database of Temporal Logic Formula
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
17 chop.pl Chop normal form expander
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
18 demoi Install Script for X-Window Interface
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
19 demoim " with module
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
20 diag.pl Diagnosis and Execution
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
21 display.pl X-Window Interface (GM and InterViews)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
22 dvcomp.pl Lazy expansion version of ITL tableau
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
23 ex.pl Built-in Examples
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
24 exdev.pl Expansion Loop
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
25 init Install Script
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
26 initm Install Script with module
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
27 kiss.pl KISS2 format for UCB SIS
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
28 lite.pl Install Script
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
29 ndcomp.pl ITL tableau expansion
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
30 read.me This file
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
31
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
32 0. Installation
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
33
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
34 Edit Makefile and change
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
35 PROLOG your prolog path name, such as sicstus
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
36 PROLOG_TYPE SICSTUS, XSB, SBPROLOG, CPROLOG, CPROLOG15
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
37 see cp.pl.c for portbaliity information.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
38
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
39 Run your Prolog. I use SICStus Prolog but Quintus Prolog or C-Prolog
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
40 will work. In case of SBPROLOG, you also need SB_START_FILE.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
41
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
42 Then consult a file init.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
43
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
44 ?-[init].
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
45
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
46 It runs unix make and compile and load necessary Prolog programs.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
47 If you need a moduled version use ?-[initm].
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
48
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
49 In case of SB-Prolog, type
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
50 make
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
51 by hand. This create file named "lite". Then start SB-Prolog like this.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
52 sbprolog lite
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
53 or you can use load(lite). Then you need to initialize by
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
54 ?- lite_start.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
55
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
56 0.1 How to run
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
57
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
58 Try numbered examples in ex.pl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
59
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
60 ?-ex(2).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
61
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
62 It generates state machine. It also accepts an ITL formula.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
63
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
64 ?-ex( [](p) -> <> p ).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
65
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
66 Please be careful about funny Prolog operator grammar.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
67 Someday I will make a parser for Ben's notation. But not now...
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
68 After the state machine expansion, there are two diagnosis predicates.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
69
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
70 ?-diag.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
71
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
72 This shows ``valid'' if it is a theorem, otherwise it shows you a counter
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
73 example.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
74
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
75 ?-exe.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
76
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
77 This shows an execution of ITL formula, if it is possible. It is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
78 a counter example of negation of the original formula. ?-diag(N) or
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
79 ?-exe(N) shows at least N length examples.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
80 1: +p-q means "at clock 1, p is true and q is false".
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
81 Please note exe(N)/diag(N) generate all possible state transition,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
82 but it only shows one possible state transition conditon for a
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
83 state transition.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
84
16
4360c2030303 strange...
kono
parents: 2
diff changeset
85 ?-infinite.
4360c2030303 strange...
kono
parents: 2
diff changeset
86 Check satisfiability on infinite interval. Like exe, it shows
4360c2030303 strange...
kono
parents: 2
diff changeset
87 possible accept states with a loop marked by *. To check infinite
4360c2030303 strange...
kono
parents: 2
diff changeset
88 validity, use negation.
4360c2030303 strange...
kono
parents: 2
diff changeset
89
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
90 In case of a large formula, you may want to make output tarse.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
91
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
92 ?-verbose(off).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
93 generates one character per state transition condition.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
94 e empty
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
95 t true
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
96 f false
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
97 123. newly genrated state number
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
98 . transition to a registerd state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
99 ?-verbose(on).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
100
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
101 ?-ex. runs all examples in diag.pl. But it takes several hours.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
102 Some of the examples are quite large.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
103 ?-exex. runs all examples and save state machine in file ``ex''.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
104
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
105 0.1. X-Window Interace
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
106
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
107 If you want to run X-window version, you have to install InterViews
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
108 interface for SICSTUS. It requires ispgm binary and library/gmlib.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
109 ?-[demoim]. % This loads and runs X-window interface.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
110 Type-in a formula.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
111 ex(1) or demo(1) for the example number in ex.pl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
112 Push verify buttom and execute buttom in order.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
113 Execute and Counter Example buttons show an example in a graphical way.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
114 Map button shows bitmap of the characteristic function.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
115
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
116 0.1.1 Tcl/Tk Interface
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
117
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
118
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
119 0.2. KISS format interface
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
120
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
121 To generate KISS2 format for SIS, try run
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
122
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
123 ?-kiss.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
124
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
125 right after verification. To specify input variables and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
126 output variables assert this predicate:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
127 st_variables(In,Out).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
128 State machine description is also supported
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
129 in this system. You can read a KISS2 format state machine.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
130 Only one state machine is accepted because of variable
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
131 declaration.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
132
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
133 ?- read_kiss(File,In,Out,Empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
134
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
135 reads KISS2 format. In and Out are list of variables in the order
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
136 of the KISS2 file. If Out is [], output variales are omitted.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
137 If In or Out are uninstantiated variables, name 'i0' or 'o2'
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
138 are used. Empty is usually set to empty and it generates
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
139 empty condition for each state, for example:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
140 st(st0,empty,empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
141 To modify or to generate KISS format again, you have to
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
142 verify it.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
143 ?- ex(st(st0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
144 `st0' is the start state of automaton. The state machine can
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
145 be used in arbitrary temporal logic expression. But if you
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
146 generate very non-deterministic modification, the output
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
147 can be very large. For examle:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
148 ?- ex(exists(i0,st(st0))).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
149
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
150 ?- read_kiss(File).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
151 => read_kiss(File,_,_,empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
152 ?- read_kiss(File,Empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
153 => read_kiss(File,_,_,Empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
154
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
155 0.3
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
156 dvcomp.pl contains lazy state transition clause generation and binary
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
157 tree representation of ITL term. Reconsult it after [init]. It
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
158 reduces memory usage drastically. To control lazy generation, use:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
159 ?-lazy(on).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
160 ?-lazy(off).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
161 kiss format generation is not supported for lazy generation.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
162
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
163 1. Syntax of ITL Formula
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
164
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
165 Comma for conjunction, and semi-coron for disjunction as in Prolog.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
166 & for chop operator. @ for strong next. next(P) for weak next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
167 Postfix * means weak closure, that is, it allows 0 times execution.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
168 To use existential quantifier, a form exists(R,f(R)) is used,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
169 here R have to be Prolog variable.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
170
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
171 Other definitions are found in chop.pl. If you want to see the expanding
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
172 results ( chop normal form, cannot be readable...) use ?-expand(X,Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
173
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
174 ~(P) = not(P)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
175 P->Q = (not(P);Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
176 P<->Q = ((not(P);Q),(P; not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
177 P=Q = ((not(P);Q),(P; not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
178 (P && Q) = ((not(empty),P) & Q) strong chop
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
179 <>(Q) = (true & Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
180 #(Q) = not(true & not(Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
181 [](Q) = not(true & not(Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
182 '[a]'(Q) = not(true & not(Q) & true)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
183 fin(Q) = (true & (empty,Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
184 halt(Q) = [](empty=Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
185 keep(Q) = not(true & not((empty ; Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
186 more = not(empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
187 skip = @(empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
188 length(I) expanded into series of strong next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
189 less(I) expanded into series of weak next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
190 next(P) = (empty; @(P))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
191 gets(A,B) = keep(@A<->B)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
192 stable(A) = keep(@A<->A)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
193
16
4360c2030303 strange...
kono
parents: 2
diff changeset
194 infinite = (true&false)
4360c2030303 strange...
kono
parents: 2
diff changeset
195 finite = ~infinite
4360c2030303 strange...
kono
parents: 2
diff changeset
196
2
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
197 P proj Q = Q is true using P as a clock period
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
198 *P = P&P&..&P.. chop infinite closure
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
199
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
200 Q=>P = exists(R,(Q = R,stable(R),fin(P = R)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
201 P<=Q = Q=>P
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
202 +A = (A & (empty;A) *) strong closure
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
203 while(Cond,Do) = ((Cond->Do) , (~Cond->empty)) *
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
204 exists(P,Q) = Exsistential Quantifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
205 all(P,Q) = not(exists(P,not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
206
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
207 even(P) = exists(Q,(Q, keep( @Q = ~Q),[](Q->P)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
208 evenp(P) = ((P,skip) & skip;empty,P)* & (empty;skip)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
209 phil(L,R) = ([]((~L = ~R)) & @ (L, ~R,@ (L,R, @ (R,[]( ~L)))) )
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
210
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
211 For user define predicate use define/2. Ex.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
212 define(yeilds(A,B), not(not(A) & B)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
213
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
214
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
215 1.1 Finte State Automaton support
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
216
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
217 1.1.1 Output.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
218
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
219 This version supports Finite State Automaton I/O. The output of
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
220 our verifier is finite automaton.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
221
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
222 ?-tgen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
223
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
224 generates automaton as Tokio Temporal Logic Programming Language.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
225 KISS2 format output is also supported, see 0.2.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
226
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
227 1.1.2 Input
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
228
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
229 It is possible to use automaton as a part of ITL formula.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
230 Finite automaton is stored in Prolog clauses.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
231
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
232 st(s0) starts Finite State Automaton (FSA) from s0 states.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
233 This is a temporal logic term, so you can use this anywhere
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
234 in ITL formula, for example: st(s0) & not(st(s0)), <>(st(s0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
235 FSA is defined as Prolog clauses in this way:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
236
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
237 st_variables([q],[s]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
238 % st_varaibles(Input_variables,Output_variables)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
239 % This is important only for KISS format generation
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
240
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
241 st(s0,((not(a);not(b)),q),s0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
242 % st(Current_State, Condition, Next_State)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
243 st(s1,(not(c),q),s1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
244 st(s1, empty,empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
245
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
246 Conditions can be non-deterministic. Actually it allows
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
247 arbitrary ITL formula, but if you use temporal condtions,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
248 it is not a state machine any more. The automaton is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
249 determinized during verfication, since generated state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
250 machine is determinisc. Be careful, the output can be very large.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
251
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
252 If a state machine contains no empty conditions, it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
253 not satisfiable in ITL, because our ITL only have finite
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
254 interval. But it may contains infinite clock periods.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
255
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
256 2. Basic Algorithm of the Verifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
257
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
258 This program uses classic tableau method. So hold your breath, it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
259 exponential to the number of the variables in the formula and also
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
260 combinatorial to the nesting of temporal logic operator. I think it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
261 possible to reduce complexity for the nesting, but not for the
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
262 variables.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
263
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
264 Major contribution (I think) is in the classification of ITL formula,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
265 which is found in bdtstd.pl. I use binary decision tree (not diagram)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
266 standard form among subterms in original formula. Since this program
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
267 always keep state machine deterministic, determinization of state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
268 machine is done by outer-most loop.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
269
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
270 The algorithm is quite simple. There are three stages. In the first
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
271 stage, an ITL formula is decomposed into three parts: empty, now and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
272 next. In the second stage, next parts is classifyed using subterm bdt
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
273 and stored into database. In the third stage, decomposition is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
274 repeatedly applied until no more new next parts are generated.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
275
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
276 Since ITL assumes any interval is finite, no eventuality checking is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
277 necessary. Diagnosis algorithm is linear to the number of the state.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
278
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
279 3. Wish lists
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
280
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
281 It is possible to reduce complexity in somehow.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
282
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
283 4. Brief description of this program.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
284
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
285 File exdev.pl contains main driver of tableau based interval temporal
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
286 logic verifier. A developer deve(X) does tableau development.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
287
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
288 deve(ITL) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
289 init,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
290 expand(ITL,ITL0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
291 itlstd(ITL0,StdNext),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
292 check_state(StdNext,ITL0,_,S),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
293 deve0((S,ITL0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
294
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
295 In init, formula databases are initialized.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
296 Usually ITL formula contains several macro definitions, expand(X,Y)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
297 expands these macros form X to Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
298 The formula is translated into standard form in itlstd(X,Y), where X is original
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
299 formula and Y is binary decision tree standard form (not diagram).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
300 The formula databases are maintained in check_state(Stdoriginal,NewFlag,No).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
301 Std is the standard form. We need original formula here for display.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
302 Whether Std is already in database or not is shown in NewFlag and when
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
303 database sequence number (i.e. state number) is returned in No.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
304
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
305 deve0((S,ITL)) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
306 show_state(S,ITL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
307 setof(Next,itldecomp(ITL,Next,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
308 Nexts),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
309 deve1(Nexts).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
310 deve0(_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
311
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
312 We are now in deve0(X) predicates. After displaying current states, it
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
313 gathers possible tableau expansion using setof predicates. Since not so
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
314 many formula is generated from one state, setof is not a bottle neck of
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
315 this program. The real bottle neck is total number of state/condition pair and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
316 it's database looking up. Setof predicates returns only new candidates and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
317 theses are stored in a list, in LIFO way.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
318
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
319 deve1([]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
320 deve1([H|T]) :- deve0(H),deve1(T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
321
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
322 Here is a repetition part.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
323
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
324 itldecomp(ITL,(NextS,Next),From) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
325 itl(ITL,Next,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
326 %% showing
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
327 itlshow(Next,NextS,Cond,From).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
328
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
329 Actual tableau expansion is done by itl(ITL,Next,Cond). It generate
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
330 Sumof( Cond -> @(Next) ), where Cond is exclusive, that is, it generates
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
331 deterministic automaton. You can test itl predicates by hands, for example,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
332 ?-itl(p & q,Next,Cond).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
333
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
334 itlshow(Next,S,Cond,From):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
335 itlstd(Next,StdNext),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
336 check_state(StdNext,Next,New,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
337 assertz(state(From,Cond,S)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
338 !,itlshow1(S,Cond,Next,New).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
339
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
340 In itlshow, standard form conversion and database checking is performed.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
341 Rest of parts are related to state database and displaying.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
342
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
343 That's all. There are more stories about itlstd and itl predicates, but it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
344 better to look source code rather than vague English...
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
345