Professional Documents
Culture Documents
net/publication/224920616
CITATIONS READS
27 181
3 authors, including:
Some of the authors of this publication are also working on these related projects:
IMPEX IMPlicit and EXplicit semantics integration in proof based developments of discrete systems View project
All content following this page was uploaded by Dominique Mery on 27 May 2014.
1 Introduction
The Minimum Spanning Tree Problem, MST problem for short, is the prob-
lem of finding a minimum spanning tree with respect to a connected graph.
The literature contains several algorithmic solutions like Prim’s algorithm [20]
or Kruskal’s algorithm [16]. Both algorithms implement the greedy method.
Typically, we assume that a cost function is related to every edge and the
2
problem is to infer a globally minimum spanning tree, which covers the ini-
tial graph. The cost function returns integer values. The MST problem is
strongly related to practical problems like the optimisation of circuitry and
the greedy strategy advocates making the choice that is the best one at the
moment; It does not always guarantee the optimality but certain greedy
strategies yield a MST.
Prim’s algorithm is easy to explain but it underlies mathematical proper-
ties related to the graph theory and especially the general theory of trees.
We consider two kinds of solutions; a first one is called generic algorithm
because it does not use a cost function. This first generic solution allows us
to develop a second solution: the MST one.
Let us summarize how Prim’s algorithm works. The state of the algorithm
while executing contains two sets of nodes of the current graphs. A first set
of nodes, equipped with a restriction of the relation over the global set of
nodes, defines the current spanning tree starting from a special node called
the root of the spanning tree. A second set of nodes is the complement of
the first set. The acyclicity of the spanning tree must be preserved, while
adding a new edge in the current spanning tree and the basic computation
step consists of taking an edge between a node in the current spanning tree
and a node which is in the other set. The choice leads to maintaining the
acyclicity of the current spanning tree with the new node, since both sets of
nodes are disjoint. The process is repeated as long as the set of remaining
and unchosen nodes is empty. The final computed tree is a spanning tree
computed by the generic algorithm. Now, if one adds the cost function, one
gets Prim’s algorithm by modifying the choice of the new node and edge to
add to the current spanning tree. In fact, the minimum edge is chosen and
the final spanning tree is then the minimum spanning tree. However, the
addition of the cost function is a refinement of the generic solution.
The generic MST algorithm without cost function is sketched as follows:
The termination of the algorithm is ensured by decreasing the set _ .
The genericity of the solution leads us to the refinement by introducing the
cost function in the computation step. We have a clear simple abstract view
of the problem and of the solution. We can, in fact, state the problem in the
3
B event-based framework. It remains to prove the optimality of the result-
ing spanning tree and that will be derived using tools and models. Before
starting the modeling, we recall the B-event-based modeling technique.
3 Proof-based development
4
so-called, before-after predicate GIHI3J!F,K $ associated with each event shape,
describes the event as a logical predicate expressing the relationship linking
the values of the state variables just before ( ) and just after ( K ) the event
“execution”.
WXZY9\ [ any Y where efO Y R3PUV then Pk]mlNOQP c RhP*R Y V end n Yo OZefO Y R3PUVCiplNObP*R)PUTqR Y VmV
Proof obligations are produced from events in order to state that the invari-
ant condition +r3,$ is preserved. We next give the general rule to be proved.
It follows immediately from the very definition of the before-after predicate,
GIHI3J!FrK $ of each event:
Notice that it follows from the two guarded forms of the events that this
obligation is trivially discharged when the guard of the event is false. When
it is the case, the event is said to be “disabled”.
5
+, 2$syf "!#%$tsuGvH 2!FDK}$w @DrK:B3GvHHv J!FrK $tsyf3rKh!#K}$#$
This says that under the abstract invariant +, 2$ and the concrete one yd3J!F$ ,
a concrete step GvH 3,!FK}$ can be simulated ( @D,K ) by an abstract one GIHHI "!#,K $
in such a way that the gluing invariant yf 2K!#KQ$ is preserved. A new event
with before-after predicate GvHI 2!F%Kb$ must refine zD{}| (,Ka& ). This leads to
the following statement to prove:
Moreover, we must prove that a variant 63$ is decreased by each new event
(this is to guarantee that an abstract step may occur). We have thus to prove
the following for each new event with before-after predicate GvHI 2!F:Kq$ :
Finally, we must prove that the concrete model does not introduce more
deadlocks than the abstract one. This is formalized by means of the follow-
ing proof obligation:
+r3,$tsyf3J!#%$ts:}>)H~($w :}>h~($
where %qSm)H~($ stands for the disjunction of the guards of the events of the
abstract model, and %qS>)~($ stands for the disjunction of the guards of
the events of the concrete one. The MST problem can now be stated in the
B-event based framework.
First we define elements of the current graph namely over the set of nodes
namely . The graph is assumed to be undirected, which is modeled by
the symmetry of the relation of the graph. Node is the root of the resulting
tree and we obtain the following B definitions:
< t s
&, s
vt
6
is defined by a root , a node: 4 , and a parent function (each node
has an unique parent node, but the root): 9 U, . A tree is
an acyclic graph. A cycle in a finite graph built on a set , is a subset
of whose elements
¡ are members of the inverse image of under , for-
mally Z¢ . To fulfill the requirement of acyclicity, the only set that
enjoys this property is necessarily the empty set. We formalize it by the left
predicate that follows, which can be proved to be equivalent to the one on
the right, which can be used as an induction rule:
£2§
£ BS
kB §
s
¤s §
a¡ ¦ ¨ d¡ s
Z¢ § §
¢
J
w
w
&0¥f$ §
u& $
`©ª««S¬«U
°± E!®%$& ¯ µ¶
>(, s a¡ §
£²§ § § § §
B 4 s³¨ s ³ ¢J w u& $ts
´
Now we can define the set ·Eb¸>¸¹q%$ of all spanning trees (with root ) of the
graph , formally:
The graph and the node are two global constants of our problem and
must satisfy properties stated above. Moreover, we assert that there is at
least one solution to our problem. The optimality of the solution will be
analyzed later, while introducing the cost function. Now, we build the first
model which computes the solution in one shot. The event span corresponds
to producing a spanning tree among the non-empty set of possible spanning
trees for . The variable > contains the resulting spanning tree.
7
span & ¯
begin
>A-Q;·E}¸m¸ $
end
The invariant is very simple and only a type invariant.
mA ¾Ã
The current model is in fact the specification of the simple spanning tree
problem; we have not yet mentioned the cost function. The next step is to
refine the current model into a simple spanning tree algorithm.
_ÆÇ s
UÄ;Å{²{2 _ÆÇ s
_ÈUÄ;Å{²{2 _É&Ê s
_Ëp>ÄtÅ{²{h2 _É&0¥
A new event, progress, simulates the computation step of the current solu-
tion by choosing a pair maintaining the updated invariant.
progress & ¯
select
UÄtÅ{h²{2 _60 Ì& ¥
then
any J!# where
"!#<;Ís³J!#ÎÎ _IÎUÄ;Å{²{2 _
then
¨-.&ÉÈ'>¨ÏÐJvºQº
_-8&9 _¹È'>,IºQº
UÄ;Å{²{2 _-8&9UÄtÅ{²{2 _>,
end
end
8
The event span is simply refined by modifying the guard of the previous
instance of the event in the abstract model. The event is triggered when the
set of remaining nodes is empty: the variable m contains a spanning tree for
the graph .
span & ¯
select
UÄtÅ{h²{2 _&0¥
then
mA-8&9
end
The invariant of the new model states the properties of the two new vari-
ables and relates them to previous ones.
_ ÆÇ s
UÄtÅ{²{2 _ÆÇ s
_ ÈuUÄtÅ{h²{2 _É&Ñ s
_ ËpUÄ;Å{²{2 _É&0¥ s
ÒÓ _>r _ d¡ s
£²§ § § § § §
B _Ðs³¨ sÔ ¢J w _& $
¨-8&0¥ ºbº
_ Õ-.&Ö>vºQº
UÄtÅ{²{2 _-8&0 >
UÄtÅ{h²{2 _&É¥Æ×
"!#<;Ís
UÄtÅ{h²{2 _6É Ì& ¥sØ@²3J!#%$`B2Ù
"!#<t _;>ÄtÅ{²{h2 _2Ú
We have obtained a simple iterative solution for the simple MST problem;
the solution follows the sketch of the algorithm given in the section describ-
ing the so called generic algorithm in the book of Cormen et al. [11]. We can
derive the following algorithm from the current model:
9
ÀaÛ
algorithm >U{ _~
¨-.&Í¥%Ü
_&(>Ü
while UÄ;Å{²{2 _ Ý Ì& ¥ do
let "!# where
"!#<;Ís³J!#ÎÎ _ IÎUÄ;Å{²{2 _
then
¨-.&ÉÈ'>¨ÏÐJÜ
_-8&9 _¹È'>,Ü
UÄ;Å{²{2 _-8&9UÄtÅ{²{2 _>,
end
end_while
>k-8&É
The next step refines the current model into a model where the cost function
is effectively used.
The previous model computes a spanning tree, when the graph is connected.
This algorithm looks like a proof of existence of a spanning tree; the follow-
ing lemma allows us to prove that the set of spanning trees is not empty
and hence a minimum spanning tree exists:
However, the previous lemma requires to construct a tree from the hypoth-
esis related to the connectivity of the graph. Hence, we must prove a first
inductive theorem on finite sets, which will include the existence of a tree.
We suppose that the set is finite and there exists a function from
to ßSàbà , where is the cardinality of .
£
5ÝBS
5áâA3 <$Îs
¥¨t5Çs
£
H4B*HÖt5ãsuHÒ0
Ì& Áw @%ÅÕBSÅ1t CHäsuHÈkÅrÕ;5Õ$F$
w
Ót5Õ$
10
°ç µmé
ç æ;HI>, H s é
ç é
ç æèÍ s é
± °± À À ¡ À À µ¶ ¶
Hvº HÖ åsØ@%æ<B ¤s¨ sØæ ¢J
£²À
B w
À
H(
`*>k-12äêës
£
"!#%$NBS3J!#;Îw `*>`3;ÏÐ%$f&Ém*m`3 ÏÐ2$#$ts
*mA-*âAq%$¹2äêës
*m`®S$f&9 °± ì4s µ¶
Õ;âAq%$<suJ!#Î<2
£
)!FJ!#%$NB w
*>`)AÈ>ÎÏÐ,$f&É*>`)$Fím*m`3tÏÐ%$
We have proved that ·E}¸m¸q%$ is not empty, since the graph is connected;
the Ä> _UU`q%$ containing every minimum spanning tree of the graph is
defined as follows:
The set Äm _ >U` $ is clearly not empty. The first «one shot» model is refined
into the new model which contains only one event span. We strengthen the
definition of the choice of the resulting tree by strengthening the condition
over the set and by choosing a candidate in the set of possible MST trees.
span & ¯
begin
>A-QtÄ> _ U>` $
end
The second model gradually computes the spanning tree by adding a new
edge to the current «under construction» tree spanning a part of . The
tree is defined over the set of already treated nodes, called _ . The
event progress is modified to handle the minimality criterion: the guard is
modified to integrate the choice of the minimum edge among the remaining
possible ones.
11
progress & ¯
select
>ÄtÅ{²{h2 _6&0
Ì ¥
then
any J!F where
"!#Î<Ís³J!#Ît _ÕÎUÄ;Å{²{2 _Þs
£
3Å,!ïm$JB3Å<; _ s
ïÎUÄ;Å{²{2 _s
Å,!ïÎ
w
`*>` 6ÏÐ,$^î4`*>`)ïÏäÅ$F$
then
¨-8&4È> Ïävºbº
_ -8&É _¹È'>,IºQº
UÄtÅ{²{2 _-8&ÉUÄtÅ{h²{2 _>,
end
end
span & ¯
select
UÄtÅ{h²{2 _&0¥
then
mA-8&9
end
The invariant includes the invariant of the refined model of the generic re-
finement and we add that the current spanning tree is a part of a mini-
mum spanning tree of the graph :
Û Û Û
@ B tÄt> _UU`q%$;s $
The invariant implies that after completion, when the event span occurs,
the current spanning tree is finally a minimal one. Since ·E}¸m¸q%$ is not
empty, then Ä> _ UU`q%$ is not empty and a tree can be chosen in this non-
empty set to prove that a MST exists (this MST contains ¥ ). So the invariant
holds for the initialization, using the lemma 1. The difficult task is to prove
that the event progress maintains the invariant. We can take the minimum
spanning tree given by the invariant, if 6ÏÐ is in this tree. Or else we must
provide another minimum tree which includes the current one and the new
edge Ïä .
In fact, textbooks provide algorithms implementing the greedy strategy and
we refer our explanations to the book of Cormen et al. [11]. The authors
12
prove a theorem page 501 numbered 24.1 to assert that the choice of the two
edges is done following a given requirement, namely a safe edge (a safe edge
is a edge allowing the progress of the algorithm). We recall the theorem:
We have to prove the property above that has been in fact adapted into the
B proof engine. However, it is not a simple exercise of translation but a com-
plete formulation of graph-theoretical aspects; moreover, the proof has been
completely mechanized, as we will show in the next section. Let us com-
pare the theorem and our formulation. The pair _!F _$
is a cut in the left part of the implication; the restriction of the tree æ to
the set of nodes _ is a tree rooted by ; 3J!#%$ crosses the cut. Those
13
assumptions imply that there exists a spanning tree #| rooted by that is
minimum on _ and such that there exists a light cut )År!Zï`$ preserving
the minimality property.
ªU·E}¸m¸3E!#!F$É& ¯
°± µ¶
9ë s
UáÓ>Z(, s a
¡§
£2§ § § § §
B èäs³^ s³U ¢" w & $
£ Û
!# _S!FJ!F$NB
_4 ¤s
<t s
Û
ªU·E}¸m¸3!F ! $
¨Î _s
t _s
xÎð _ $;s
Û4ó
ªU·E}¸m¸3!# _!> _ ¡ >ò _$F$;s
£²À À À Û À À À
B åsô< s ¢ w ËN _áÍ Ì& ¥$
w
Û
@²)År!Zï! KQ$aBS
Û
År!ZïC sØÅp; ð _ sØïÎ _s
Û
ªU·Eb¸>¸ ! ! K $ts
Û Û Û
K2Æ È ï^ÏäÅ,!FŨϴïU$,ÈU¨ä Ï Js
Û Û
*m` K}$f&0*>` $EC`*>`)ïÏäÅ$í`*>` ¨ÏÃ,$ts
Û
ÏÐ Ks
Û4ó Û
_SUCò _$A KQ$F$
The property is the key result for ensuring the optimality of the greedy
strategy in this process. In the next section, we detail the proof of our theo-
rem.
14
and the development of recursive functions [8] require proofs related to the
closure of relations; we apply the same technique for the closure of a func-
tion defining
Û
a tree. Û
Let !F$ be a tree defined by Û a tree function and a root ; they satisfy the
following axioms Û ªU·E}¸m ¸ !F! $ .
The closure `õ of Û is the smallest relation containing ¬ ,3<$ and stable
by application of , that is:
`õN ³¾ s
¬ r) <$è Ç
`
õ s
Û
3`õ#Ü $èÇ`õ s
£
B
¨; ö¾ s
¬ ,3 <$ è´s
Û
DÜ $èÃ4s
w
`õpÃ
$
Useful properties on the closure can be derived from those definitions; for
instance, the closure is a fix-point; the root is connected to every node of
the connected component; the closure is transitive, etc. We summarize those
properties using our notations:
Û
`õ&÷¬ :) <$fÈ3`õ#Ü $EÜ
; ë4`õ®Ü
Û
Ü`õ)$k4`õ®Ü
3`õ#ÜF`õh$A`õ#Ü
Û
Ë`õ&Ý ¥Ü
`õËp`õ 4¬ ,3 <$`Ü
Figure 1 contains a tree with the edge ïpÏøÅ and without the edge ÝÏ
. The construction of a new tree which contains the edge 4ϳ but not
the edge ï6ÏåÅ is done according to the following points (see the result in
Figure 3):
15
a
b
x
y
a
b
x
y
a
b
x
y
16
Lemma 3 (Concatenation of two separate trees) Û
ªU·E}¸m¸3 !F ! $
þ þ Û²þ
Û Û2þ þ þ
ªU·E}¸m¸3 þ F! !
Let #! !F ! !# !F !F be such that: ÿ Ëa &Ý¥
Èa þ &0
Û Û þ þ
Then ªU·Eb¸>¸ !F ! È ÈkU ÏÐJ$ .
Proof Sketch: The proof is made up of several steps. A þ first step proves that
the concatenation is a total function over the set Èa . A second one leads
to a more technical task and we should prove the À À
inductive property
À þ
over
trees using a splitting of the inductive variable ( Ë and Ë ). ñ
À ¡ À
Proof ¡ Sketch:
Û ¡ À We should
À
prove that,
¡ if À C`õ ïUm¢ , ïÆ and
3`õ ïUm¢ $ ¢; , then C¡ `
õ
ï m
6
¢ . A hint is to use the inductive
Û À
property on with the set Èp`õ ïUm¢ . ñ
Now, we must characterize the subtree, where we have reversed the edge
Û Û
between ¡ to the root ï . Let ²ïZ !ïm$ be the subtree of with ï as root
Û
(it’s `õ ïUm¢ïUkò ). This following function seems to be a good choice:
¡ Û ¡ Û
)`õ >,m¢ ²ïZUD !ï`$F$aÈ)`õ >,m¢%ò2ïED !ï`$F$
¡ Û *¡
3`õ >,>¢ò; ²ïZD !Zï`$#$ is exactly all reverse edges. `õ Ur>¢ is the set of
all parents of .
17
Lemma 7 (Existence of a spanning
Û
tree)
ï!FÅ< ¡
Let Å,!Zï!#"!# such that <t`õ ïm¢ ¡
ÿ -S `õ ïU>¢
C
Û
Then there
Û exists Û aÛ tree K such that:
KÎ È UÅvÏÃï!ï^ä Ï År$dÈ> Ïä
Û
ªU·E}¸m¸3!Û F ! Kb$
Û
ÿ *>` K}$f&Ý*m` $ECm*m`hïAÏÃÅD$í`*>` 6Ð Ï ,$
Û
¨ÏС
K
Û Û
`õ ïUm ¢ K
Û
Proof Sketch: K is obtained by concatenation of . the two trees identified
in the two previous lemmas. Both trees are linked by the edge ¨Ïä . ñ
Finally, we have to prove the existence of an edge ïÏäÅ which is safe in the
sense of the greedy strategy.
The property of the existence of a minimum spanning tree can now be de-
rived using lemmas and the proof of the property is then completely mech-
anized.
7 Related works
The refinement is a concept introduced by Back in his seminal paper [6] and
it is developed from the wp semantics defined by E. Dijkstra [12]. Those
seminal works inspire notations or methods for developing programs and
systems (Morgan[19], Abrial [1, 5], Gribomont [14] . . . ). Temporal aspects
are integrated into notations for extending the expressivity of the model-
ing language (UNITY [9], TLA/TLA [17, 18]). Clearly, our contribution is
based on the B event-based method, which is a proposal for an integrated
mechanization of the refinement process and a methodology for develop-
ing (reactive, distributed, sequential) systems; the B event-based approach
proposes a complete environment supporting the methodological approach.
However, as it was pointed out by previous readers, our works require com-
parisons with development of MST-like systems using a formal framework.
18
First at all, Cormen et al. [11] present a collection of algorithms which are
justified in a pseudo-mathematical language, leaving details of formaliza-
tion to the reader; we obtain a complete verified version of the algorithm.
The paper of Stroetman [21] addresses a similar kind of case study, the
constrained minimal spanning tree problem, using the ASM [15] notation.
Proofs are clearly done in a very classical way using the ASM mathematical
framework and no reference to the use of a proof tool is given. Moreover, our
case study is related to Prim’s algorithm and we used an incremental pro-
cess, namely the refinement. Although Stroetman mentions a refinement,
it is not systematically used for constructing the final solutions. Fraer [13]
has developed the Kruskal algorithm using the «classical» B method. In fact,
the main difference is our use of the B event-based approach for develop-
ing events systems. Even if Fraer has proved a part of proof obligations,
it is clear that some proof obligations might be found false in the remain-
ing unproved proof obligations. We recall that the goal of the refinement is
to produce systems which are completely proved with respect to the target
properties. Finally, we can reuse a part of our development for obtaining the
Kruskal algorithm.
Our paper illustrates a systematic approach for developing event systems
combining the refinement and the proof process supported by a tool; formal-
izations of concepts like graphs and trees are designed using the proof tool
and are checked by the proof tool; they can be reused in other case studies.
8 Conclusion
The development of Prim’s algorithm leads us to state and to prove proper-
ties over trees. The inductive definition of trees helps in deriving intermedi-
ate lemmas asserting that the growing tree converges to the MST, according
to the greedy strategy. The resulting algorithm is completely proved and we
can partially reuse current developed models to obtain Dijkstra’s algorithm
or Kruskal’s one. The greedy strategy is not always efficient and the opti-
mality of the resulting algorithm is proved by the theorem 24.1. The gain
is clear, since we have a mechanized and verified proof of Prim’s algorithm.
The mechanized proof looks like the proof given in the book of Cormen et
al.; we think that it is a proof readable by specialists of graph theory. More-
over, sketches of proofs are directly derived from the mechanized proofs; in
fact, the tool provides a way to discover these sketches. We can plan the re-
writing of a book like Cormen et al including algorithms, complete develop-
ments of each algorithm, proofs of developed algorithms and the possibility
to replay the developments to explain how each algorithm is really working.
Future work will study other techniques related to algorithmics for graph
theory, since only one chapter in the book of Cormen et al. is treated!
19
References
1. J.-R. Abrial. A formal approach to large software constructions. In J. L. A
van de Snepscheut, editor, Mathematics for Program Construction, pages 1–20.
Springer-Verlag, june 1989. LNCS 375.
2. J.-R. Abrial. Extending B without changing it (for developing distributed sys-
tems). In H. Habrias, editor, 1 Conference on the B method, pages 169–190,
November 1996.
3. J.-R. Abrial, D. Cansell, and D. Méry. A mechanically proved and incremental
development of the IEEE 1394 Tree Identify Protocol . Formal Aspects of Com-
puting, ??(??), 2002. accepted for publication.
4. J.-R. Abrial and L. Mussat. Introducing dynamic constraints in B. In D. Bert,
editor, B’98 :Recent Advances in the Development and Use of the B Method, vol-
ume 1393 of Lecture Notes in Computer Science. Springer-Verlag, 1998.
5. J.R. Abrial. The B Book - Assigning Programs to Meanings. Cambridge Univer-
sity Press, 1996. ISBN 0-521-49619-5.
6. R. J. R. Back. On correct refinement of programs. Journal of Computer and
System Sciences, 23(1):49–68, 1979.
7. Dominique Cansell, Ganesh Gopalakrishnan, Mike Jones, Dominique Méry, and
Airy Weinzoepflen. Incremental proof of the producer/consumer property for the
pci protocol. In D. Bert, editor, ZB 2002, Lecture Notes in Computer Science.
Springer-Verlag, January 2002.
8. Dominique Cansell and Dominique Méry. Développement de fonctions définies
récursivement en b. Technical report, LORIA, 2002.
9. K. M. Chandy and J. Misra. Parallel Program Design A Foundation. Addison-
Wesley Publishing Company, 1988. ISBN 0-201-05866-9.
10. ClearSy, Aix-en-Provence (F). Atelier B, 2002. Version 3.6.
11. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliff Stein. In-
troduction to Algorithms. MIT Press and McGraw-Hill, 2001.
12. E. W. Dijkstra. A Discipline of Programming. Prentice-Hall, 1976.
13. R. Fraer. Formal Development in B of a Minimum Spanning Tree Algorithm. In
H. Habrias, editor, 1 Conference on the B method, pages 169–190, November
1996.
14. E. Pascal Gribomont. Concurrency without toil : a systematic method for paral-
lel program design. Science of Computer Programming, 21:1–56, 1993.
15. Y. Gurevitch. Specification and Validation Methods, chapter "Evolving Algebras
1993: Lipari Guide", pages 9–36. Oxford University Press, 1995. Ed. E. Börger.
16. J. B. Kruskal. On the shortest spanning subtree and the traveling salesman
problem. Proc. Am. Math. Soc., 7:48–50, 1956.
17. L. Lamport. A temporal logic of actions. Transactions On Programming Lan-
guages and Systems, 16(3):872–923, May 1994.
18. Leslie Lamport. Specifying Systems: The TLA+ Language and Tools for Hard-
ware and Software Engineers. Addison-Wesley, 2002.
19. C. Morgan. Programming from Specifications. Prentice Hall International Se-
ries in Computer Science. Prentice Hall, 1990.
20. R. C. Prim. Shortest connection and some generalizations. Bell Syst. Tech. J.,
36, 1957.
21. K. Stroetmann. The constrained shortest path problem: A case study in using
ASMs. J. of Universal Computer Science, 3(4):304–319, 1997.
20