1
2 start(fluss([bauer,kohl,wolf,ziege],[])).
3 ?trans(move(X),A,B) :- kante(A,X,B).
4 prop(X,X).
5 prop(X,unsafe) :- ziel(X).
6 prop(X,h(L)) :- heuristic_function_result(X,L).
7 eats(ziege,kohl).
8 eats(wolf,ziege).
9
10 ko(List) :-
11 ? member(X,List), member(Y,List), eats(X,Y).
12
13
14
15 ?kante(fluss(L,R),X,fluss(NL,NR)) :- move(L,R,X,NL,NR).
16 ?kante(fluss(L,R),X,fluss(NL,NR)) :- move(R,L,X,NR,NL).
17
18 :- use_module(library(lists)).
19
20 ?move(L,R,bauer,SNewL,NewR) :- select(bauer,L,NewL), sort(NewL,SNewL),
21 ? \+ ko(NewL), NewR=[bauer|R].
22 ?move(L,R,bauer(X),SNewL,NewR) :- select(bauer,L,LL),
23 ? select(X,LL,NewL), \+ ko(NewL), sort(NewL,SNewL),
24 sort([bauer,X|R],NewR).
25
26 ziel(fluss([],[bauer,kohl,wolf,ziege] )).
27
28
29
30 animation_function_result(fluss(Left,Right),[((1,1),Left),((1,2),'~~'),((1,3),Right)]).
31
32 heuristic_function_active.
33 heuristic_function_result(fluss(L,_),Len) :- length(L,Len).
34
35
36 prob_pragma_string('ASSERT_LTL','G not(deadlock)').
37 prob_pragma_string('ASSERT_LTL','G not(e(move))'). % is FALSE
38 prob_pragma_string('ASSERT_LTL','G not({unsafe})'). % is FALSE