flg(A):-write(A),write(' => ').
wrt(A):-write(A),nl.
/*Organisation der Bildschirmausgabe*/
fakt('Dreieck','gleichseitig','alle Winkel 60').
/*Aufbau: Objekte, Bedingung, Folgerung*/
fakt('Dreieck','alle Winkel 60','gleichseitig').
fakt('Dreieck','rechtwinklig','a²+b²=c²').
fakt('Dreieck','a²+b²=c²','rechtwinklig').
fakt('Dreieck','rechtwinklig','c*p=a²').
fakt('Dreieck','rechtwinklig','c*q=b²').
fakt('Dreieck','rechtwinklig','p*q=h²').
fakt('Dreieck','p*q=h²','Höhensatz').
fakt('Dreiecke','gleiche Seiten','kongruent').
fakt('Dreiecke','kongruent','gleiche Seite').
fakt('Dreiecke','kongruent','2 gleiche Winkel').
fakt('Dreiecke','kongruent','gleiche Winkel').
fakt('Dreiecke','2 gleiche Winkel','ähnlich').
fakt('Dreiecke','ähnlich','Seitenverhältnisse gleich').
fakt('Dreiecke','ähnlich','3 gleiche Winkel').
zimp(A,B,Z,_):-fakt(A,B,Z),flg(B),wrt(Z).
/*direkter Zugriff auf fakt()*/
zimp(A,B,Z,N):-N<10,fakt(A,D,Z),zimp(A,B,D,N+1),flg(B),flg(D),wrt(Z).
/*rekursiver Aufruf, N<10 verhindert Endlosschleifen*/
imp(A,B,Z):-zimp(A,B,Z,0).
/*Start von zimp mit einer Bedingung*/
fakt('Dreiecke','gleiche Seite','2 gleiche Winkel','kongruent').
/*Aufbau: Objekte, 1.Bedingung, 2.Bedingung, Folgerung*/
zimp(A,B,C,Z,_):-fakt(A,B,C,Z),flg(B+C),wrt(Z).
/*direkter Zugriff auf fakt()*/
zimp(A,_,C,Z,N):-zimp(A,C,Z,N).
zimp(A,B,_,Z,N):-zimp(A,B,Z,N).
/*Fortlassen einer unnötigen Bedingung*/
zimp(A,B,C,Z,N):-N<10,fakt(A,D,E,Z),zimp(A,B,C,D,N+1),zimp(A,B,C,E,N+2),flg(B+C),wrt(D),flg(B+C),wrt(E),flg(D+E),wrt(Z).
/*rekursiver Aufruf, N<10 verhindert Endlosschleifen*/
imp(A,B,C,Z):-zimp(A,B,C,Z,0).
/*Start von zimp mit zwei Bedingungen*/



