background image

Systemy 

automatyczne

go 

wnioskowania

Projekt

Grupa: 2
Sekcja: 2

Łukasz Heince
Paweł Wyrwas

background image

Historia

Kradzież ciasta”

Podczas  ostatniego  policyjnego  dochodzenia,  Główny  Inspektor 
Stone  przesłuchiwał  pięciu  lokalnych  przestępców  w  celu 
zidentyfikowania,  kto  ukradł  ciasto  Pani  Kowalskiej  z  jarmarku 
świętojańskiego. Poniżej znajduje się podsumowanie ich zeznań:

  1) Arek: to nie był Edek, to był Bolek. 

2)Bolek: to nie był Czarek, to nie był Edek .
3)Czarek: to był Edek, to nie był Arek. 
4)Darek: to był Czarek, to był Bolek. 
5)Edek: to był Darek, to nie był Arek.

 

Było  wiadome,  że  każdy  z  podejrzanych  powiedział  dokładnie 
jedno  kłamstwo.  Napisz  program,  który  wskaże  kto  ukradł 
ciasto.

background image

Analiza wypowiedzi

• Arek:
Kłamstwo: „to był Bolek”
Prawda: „to nie był Edek”
• Bolek:
Kłamstwo: „to nie był Czarek”
Prawda: „to nie był Edek”

background image

Analiza wypowiedzi 

cd.

• Czarek:
Kłamstwo: „to był Edek” 
Prawda: „to nie był Arek”
• Darek:
Kłamstwo: „to był Bolek”
Prawda: „to był Czarek”
• Edek:
Kłamstwo: „to był Darek”
Prawda: „to nie był Arek”

background image

Analiza w prologu

tw1(Imie,0):-Imie="Edek",Imie="Bolek".
tw1(Imie,1):-Imie<>"Edek",Imie<>"Bolek".
tw2(Imie,0):-Imie="Czarek",Imie<>"Edek".
tw2(Imie,1):-Imie<>"Czarek",Imie="Edek".
tw3(Imie,0):-Imie<>"Edek",Imie<>"Arek".
tw3(Imie,1):-Imie="Edek",Imie="Arek".
tw4(Imie,0):-Imie<>"Czarek",Imie="Bolek".
tw4(Imie,1):-Imie="Czarek",Imie<>"Bolek".
tw5(Imie,0):-Imie<>"Darek",Imie<>"Arek".
tw5(Imie,1):-Imie="Darek",Imie="Arek".

background image

Kod programu

domains

Lista=Integer*

predicates

nondeterm varia_rep(Integer, Lista, Lista);
nondeterm delete(Integer,Lista,Lista)

tw1(String,Integer)
tw2(String,Integer)
tw3(String,Integer)
tw4(String,Integer)
tw5(String,Integer)

nondeterm element(Lista, Integer, Integer)
nondeterm main(String)
nondeterm sprawdz(String,Lista)
nondeterm osoba(String)

print(Lista)

goal

main(Imie).

background image

Kod programu cd.

clauses

main(Imie):-write("Zestawienie prawd i klamstw. 1 - pierwsza czesc wypowiedzi jest 

prawdziwa, 0 - druga czesc wypowiedzi jest prawdziwa"),nl, osoba(Imie),

varia_rep(5,  [0, 1], List),
sprawdz(Imie, List), print(List),nl,write("Zlodziejem jest: "),nl.

% lista osob

osoba("Arek"). osoba("Bolek"). osoba("Czarek"). osoba("Darek"). osoba("Edek").

% Wariacja z potwótrzeniami 

varia_rep(0,_,[]).
varia_rep(N,L,[H|RVaria]) :- N>0, N1 = N-1, delete(H,L,_), varia_rep(N1,L,RVaria).

delete(X, [X|Xs], Xs).
delete(X, [Y|Ys], [Y|Rs]) :- delete(X, Ys, Rs).

element([H|_], 0, H).
element([_|T], N, Wynik) :- NN = N - 1, element(T, NN, Wynik).

background image

Kod programu cd.2

sprawdz(Imie,Perm):-
element(Perm,0,Wartosc1),tw1(Imie,Wartosc1),
element(Perm,1,Wartosc2),tw2(Imie,Wartosc2),
element(Perm,2,Wartosc3),tw3(Imie,Wartosc3),
element(Perm,3,Wartosc4),tw4(Imie,Wartosc4),
element(Perm,4,Wartosc5),tw5(Imie,Wartosc5).
-

%warunki : 0 gdy druga cześć jest prawdziwa ,1 gdy pierwsza cześć jest prawdziwa

tw1(Imie,0):-Imie="Edek",Imie="Bolek".
tw1(Imie,1):-Imie<>"Edek",Imie<>"Bolek".
tw2(Imie,0):-Imie="Czarek",Imie<>"Edek".
tw2(Imie,1):-Imie<>"Czarek",Imie="Edek".
tw3(Imie,0):-Imie<>"Edek",Imie<>"Arek".
tw3(Imie,1):-Imie="Edek",Imie="Arek".
tw4(Imie,0):-Imie<>"Czarek",Imie="Bolek".
tw4(Imie,1):-Imie="Czarek",Imie<>"Bolek".
tw5(Imie,0):-Imie<>"Darek",Imie<>"Arek".
tw5(Imie,1):-Imie="Darek",Imie="Arek".

print([]).
print([H|T]) :- write(H, " "), print(T).

background image

Dziękujemy !


Document Outline