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 |