annotate read.me @ 10:f2aa38ce0787

add state display.
author kono
date Fri, 19 Jan 2001 23:14:00 +0900
parents 1c57a78f1d98
children 4360c2030303
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
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
85 In case of a large formula, you may want to make output tarse.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
86
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
87 ?-verbose(off).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
88 generates one character per state transition condition.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
89 e empty
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
90 t true
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
91 f false
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
92 123. newly genrated state number
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
93 . transition to a registerd state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
94 ?-verbose(on).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
95
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
96 ?-ex. runs all examples in diag.pl. But it takes several hours.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
97 Some of the examples are quite large.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
98 ?-exex. runs all examples and save state machine in file ``ex''.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
99
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
100 0.1. X-Window Interace
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
101
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
102 If you want to run X-window version, you have to install InterViews
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
103 interface for SICSTUS. It requires ispgm binary and library/gmlib.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
104 ?-[demoim]. % This loads and runs X-window interface.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
105 Type-in a formula.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
106 ex(1) or demo(1) for the example number in ex.pl.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
107 Push verify buttom and execute buttom in order.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
108 Execute and Counter Example buttons show an example in a graphical way.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
109 Map button shows bitmap of the characteristic function.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
110
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
111 0.1.1 Tcl/Tk Interface
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
112
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
113
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
114 0.2. KISS format interface
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
115
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
116 To generate KISS2 format for SIS, try run
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
117
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
118 ?-kiss.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
119
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
120 right after verification. To specify input variables and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
121 output variables assert this predicate:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
122 st_variables(In,Out).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
123 State machine description is also supported
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
124 in this system. You can read a KISS2 format state machine.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
125 Only one state machine is accepted because of variable
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
126 declaration.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
127
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
128 ?- read_kiss(File,In,Out,Empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
129
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
130 reads KISS2 format. In and Out are list of variables in the order
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
131 of the KISS2 file. If Out is [], output variales are omitted.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
132 If In or Out are uninstantiated variables, name 'i0' or 'o2'
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
133 are used. Empty is usually set to empty and it generates
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
134 empty condition for each state, for example:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
135 st(st0,empty,empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
136 To modify or to generate KISS format again, you have to
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
137 verify it.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
138 ?- ex(st(st0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
139 `st0' is the start state of automaton. The state machine can
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
140 be used in arbitrary temporal logic expression. But if you
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
141 generate very non-deterministic modification, the output
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
142 can be very large. For examle:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
143 ?- ex(exists(i0,st(st0))).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
144
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
145 ?- read_kiss(File).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
146 => read_kiss(File,_,_,empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
147 ?- read_kiss(File,Empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
148 => read_kiss(File,_,_,Empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
149
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
150 0.3
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
151 dvcomp.pl contains lazy state transition clause generation and binary
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
152 tree representation of ITL term. Reconsult it after [init]. It
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
153 reduces memory usage drastically. To control lazy generation, use:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
154 ?-lazy(on).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
155 ?-lazy(off).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
156 kiss format generation is not supported for lazy generation.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
157
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
158 1. Syntax of ITL Formula
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
159
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
160 Comma for conjunction, and semi-coron for disjunction as in Prolog.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
161 & for chop operator. @ for strong next. next(P) for weak next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
162 Postfix * means weak closure, that is, it allows 0 times execution.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
163 To use existential quantifier, a form exists(R,f(R)) is used,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
164 here R have to be Prolog variable.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
165
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
166 Other definitions are found in chop.pl. If you want to see the expanding
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
167 results ( chop normal form, cannot be readable...) use ?-expand(X,Y).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
168
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
169 ~(P) = not(P)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
170 P->Q = (not(P);Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
171 P<->Q = ((not(P);Q),(P; not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
172 P=Q = ((not(P);Q),(P; not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
173 (P && Q) = ((not(empty),P) & Q) strong chop
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
174 <>(Q) = (true & Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
175 #(Q) = not(true & not(Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
176 [](Q) = not(true & not(Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
177 '[a]'(Q) = not(true & not(Q) & true)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
178 fin(Q) = (true & (empty,Q))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
179 halt(Q) = [](empty=Q)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
180 keep(Q) = not(true & not((empty ; Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
181 more = not(empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
182 skip = @(empty)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
183 length(I) expanded into series of strong next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
184 less(I) expanded into series of weak next.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
185 next(P) = (empty; @(P))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
186 gets(A,B) = keep(@A<->B)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
187 stable(A) = keep(@A<->A)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
188
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
189 P proj Q = Q is true using P as a clock period
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
190 *P = P&P&..&P.. chop infinite closure
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
191
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
192 Q=>P = exists(R,(Q = R,stable(R),fin(P = R)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
193 P<=Q = Q=>P
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
194 +A = (A & (empty;A) *) strong closure
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
195 while(Cond,Do) = ((Cond->Do) , (~Cond->empty)) *
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
196 exists(P,Q) = Exsistential Quantifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
197 all(P,Q) = not(exists(P,not(Q)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
198
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
199 even(P) = exists(Q,(Q, keep( @Q = ~Q),[](Q->P)))
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
200 evenp(P) = ((P,skip) & skip;empty,P)* & (empty;skip)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
201 phil(L,R) = ([]((~L = ~R)) & @ (L, ~R,@ (L,R, @ (R,[]( ~L)))) )
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
202
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
203 For user define predicate use define/2. Ex.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
204 define(yeilds(A,B), not(not(A) & B)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
205
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
206
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
207 1.1 Finte State Automaton support
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
208
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
209 1.1.1 Output.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
210
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
211 This version supports Finite State Automaton I/O. The output of
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
212 our verifier is finite automaton.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
213
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
214 ?-tgen.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
215
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
216 generates automaton as Tokio Temporal Logic Programming Language.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
217 KISS2 format output is also supported, see 0.2.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
218
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
219 1.1.2 Input
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
220
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
221 It is possible to use automaton as a part of ITL formula.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
222 Finite automaton is stored in Prolog clauses.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
223
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
224 st(s0) starts Finite State Automaton (FSA) from s0 states.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
225 This is a temporal logic term, so you can use this anywhere
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
226 in ITL formula, for example: st(s0) & not(st(s0)), <>(st(s0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
227 FSA is defined as Prolog clauses in this way:
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
228
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
229 st_variables([q],[s]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
230 % st_varaibles(Input_variables,Output_variables)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
231 % This is important only for KISS format generation
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
232
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
233 st(s0,((not(a);not(b)),q),s0).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
234 % st(Current_State, Condition, Next_State)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
235 st(s1,(not(c),q),s1).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
236 st(s1, empty,empty).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
237
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
238 Conditions can be non-deterministic. Actually it allows
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
239 arbitrary ITL formula, but if you use temporal condtions,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
240 it is not a state machine any more. The automaton is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
241 determinized during verfication, since generated state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
242 machine is determinisc. Be careful, the output can be very large.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
243
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
244 If a state machine contains no empty conditions, it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
245 not satisfiable in ITL, because our ITL only have finite
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
246 interval. But it may contains infinite clock periods.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
247
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
248 2. Basic Algorithm of the Verifier
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
249
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
250 This program uses classic tableau method. So hold your breath, it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
251 exponential to the number of the variables in the formula and also
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
252 combinatorial to the nesting of temporal logic operator. I think it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
253 possible to reduce complexity for the nesting, but not for the
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
254 variables.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
255
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
256 Major contribution (I think) is in the classification of ITL formula,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
257 which is found in bdtstd.pl. I use binary decision tree (not diagram)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
258 standard form among subterms in original formula. Since this program
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
259 always keep state machine deterministic, determinization of state
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
260 machine is done by outer-most loop.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
261
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
262 The algorithm is quite simple. There are three stages. In the first
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
263 stage, an ITL formula is decomposed into three parts: empty, now and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
264 next. In the second stage, next parts is classifyed using subterm bdt
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
265 and stored into database. In the third stage, decomposition is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
266 repeatedly applied until no more new next parts are generated.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
267
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
268 Since ITL assumes any interval is finite, no eventuality checking is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
269 necessary. Diagnosis algorithm is linear to the number of the state.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
270
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
271 3. Wish lists
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
272
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
273 It is possible to reduce complexity in somehow.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
274
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
275 4. Brief description of this program.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
276
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
277 File exdev.pl contains main driver of tableau based interval temporal
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
278 logic verifier. A developer deve(X) does tableau development.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
279
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
280 deve(ITL) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
281 init,!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
282 expand(ITL,ITL0),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
283 itlstd(ITL0,StdNext),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
284 check_state(StdNext,ITL0,_,S),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
285 deve0((S,ITL0)).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
286
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
287 In init, formula databases are initialized.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
288 Usually ITL formula contains several macro definitions, expand(X,Y)
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
289 expands these macros form X to Y.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
290 The formula is translated into standard form in itlstd(X,Y), where X is original
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
291 formula and Y is binary decision tree standard form (not diagram).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
292 The formula databases are maintained in check_state(Stdoriginal,NewFlag,No).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
293 Std is the standard form. We need original formula here for display.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
294 Whether Std is already in database or not is shown in NewFlag and when
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
295 database sequence number (i.e. state number) is returned in No.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
296
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
297 deve0((S,ITL)) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
298 show_state(S,ITL),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
299 setof(Next,itldecomp(ITL,Next,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
300 Nexts),!,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
301 deve1(Nexts).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
302 deve0(_).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
303
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
304 We are now in deve0(X) predicates. After displaying current states, it
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
305 gathers possible tableau expansion using setof predicates. Since not so
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
306 many formula is generated from one state, setof is not a bottle neck of
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
307 this program. The real bottle neck is total number of state/condition pair and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
308 it's database looking up. Setof predicates returns only new candidates and
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
309 theses are stored in a list, in LIFO way.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
310
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
311 deve1([]).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
312 deve1([H|T]) :- deve0(H),deve1(T).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
313
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
314 Here is a repetition part.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
315
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
316 itldecomp(ITL,(NextS,Next),From) :-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
317 itl(ITL,Next,Cond),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
318 %% showing
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
319 itlshow(Next,NextS,Cond,From).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
320
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
321 Actual tableau expansion is done by itl(ITL,Next,Cond). It generate
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
322 Sumof( Cond -> @(Next) ), where Cond is exclusive, that is, it generates
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
323 deterministic automaton. You can test itl predicates by hands, for example,
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
324 ?-itl(p & q,Next,Cond).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
325
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
326 itlshow(Next,S,Cond,From):-
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
327 itlstd(Next,StdNext),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
328 check_state(StdNext,Next,New,S),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
329 assertz(state(From,Cond,S)),
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
330 !,itlshow1(S,Cond,Next,New).
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
331
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
332 In itlshow, standard form conversion and database checking is performed.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
333 Rest of parts are related to state database and displaying.
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
334
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
335 That's all. There are more stories about itlstd and itl predicates, but it is
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
336 better to look source code rather than vague English...
1c57a78f1d98 Initial revision
kono
parents:
diff changeset
337