Процес).  
 перевірка (Персонаж, Номер, Процес): - Персонаж = персонаж (_, брехун), not (сказав (Персонаж, Номер, Процес)). 
  перевірка (Персонаж, _, _): - Персонаж = персонаж (_, шпигун). 
  ісключіть_подозреваемого (_, [], []). 
  ісключіть_подозреваемого (Ім'я, [InH | InT], [InH | OutT]): - not (InH = персонаж (Ім'я, _)), ісключіть_подозреваемого 
  (Ім'я, InT, OutT). 
  гіпотеза (Процес): - 
  персонажами = персонаж (а, типу), 
  одін_із (типу, [лицар, брехун, шпигун]), 
  ПерсонажБ = персонаж (б, ТІПБ), 
  одін_із (ТІПБ, [лицар, брехун, шпигун]), not (ТІПБ = типу), 
  ПерсонажВ = персонаж (у, ТіпВ), 
  одін_із (ТіпВ, [лицар, брехун, шпигун]), not (ТіпВ = типу), not (ТіпВ = ТІПБ), 
  Персонажі = [персонажі, ПерсонажБ, ПерсонажВ], 
  Процес = процес (Персонажі, відповідь1, відповідь2, ДалОтвет3, Ответ3). 
  суд1 (Процес): - 
  гіпотеза (Процес), Процес = процес (Персонажі, _, _, _, _), 
 % з процесу вибираються персонажі 
  персонажами = персонаж (а, _), одін_із (персонажі, Персонажі), 
 % вибока персонажа 
				
				
				
				
			  перевірка (персонажами, 1, Процес), 
 % перевірка що сказав перонаж А 
  ПерсонажБ = персонаж (б, _), одін_із (ПерсонажБ, Персонажі), 
 % вибірка персонажа 
  перевірка (ПерсонажБ, 1, Процес). 
 % перевірка що сказав перонаж Б 
  суд2 (Процесс2): - 
  findall (Процесс1, суд1 (Процесс1), Результати), 
 % отримуємо в результаті список всіх гіпотез задовольняють першим двом висловлювань 
  одін_із_участніков (Предполагаем_Не_Шпіон), 
  Процесс2 = процес (Персонажі2, відповідь1, відповідь2, ДалОтвет3, Ответ3), 
  Підозрюваний = 
 перевірка (Підозрюваний, 2, Процесс2). 
  конец_суда (вердикт (Шпигун, Ітоговий_Результат)): - 
  findall (Процес, суд2 (Процес), Результати), 
  одін_із_участніков (Предполагаем_Шпіон), 
  Ітоговий_Результат = процес (Персонажі, _, _, _, _), 
  Шпигун = персонаж (_, шпигун), одін_із (Шпигун, Персонажі). 
  подсказка1 (Вердикт, Ответ4): - 
  Ответ4 = "так", Вердикт = вердикт (_, процес (_, відповідь1, відповідь2, _, Ответ3)), 
  к...