Ключевым моментом в данной формулировке было использование самого отношения предок в его определении. Такое определение может озадачить - допустимо ли при определении какого-либо понятия использовать его же, ведь оно определено еще не полностью. Такие определения называются 
Возвращаясь к нашей программе, можно теперь задать системе вопрос: 'Кто потомки Пам?' То есть: 'Кто тот человек, чьим предком является Пам?'
?-  предок( пам, X).
X  =  боб;
X  =  энн;
X  =  пат;
X  =  джим
Ответы системы, конечно, правильны, и они логически вытекают из наших определений отношений предок и родитель. Возникает, однако, довольно важный вопрос: '
Неформальное объяснение того, как система это делает, приведено в следующем разделе. Но сначала давайте объединим все фрагменты нашей программы о родственных отношениях, которая постепенно расширялась по мере того, как мы вводили в нее новые факты и правила. Окончательный вид программы показан на рис. 1.8.
При рассмотрении рис. 1.8 следует учесть два новых момента: первый касается понятия 'процедура', второй — комментариев в программах. Программа, приведенная на рис. 1.8, определяет несколько отношений — родитель, мужчина, женщина, предок и т.д. Отношение предок, например, определено с помощью двух предложений. Будем говорить, что эти два предложения входят в состав отношения предок. Иногда бывает удобно рассматривать в целом все множество предложений, входящих в состав одного отношения. Такое множество называется 
родитель( пам, боб). % Пам - родитель Боба
родитель( том, боб).
родитель( том, лиз).
родитель( бoб, энн).
родитель( боб, пат).
родитель( пат, джим).
женщина( пам).       % Пам - женщина
мужчина( том).       % Том - мужчина
мужчина( боб).
женщина( лиз).
женщина( энн).
женщина( пат).
мужчина( джим).
отпрыск( Y, X) :-    % Y - отпрыск X, если
 родитель( X, Y).    % X - родитель Y
мать( X, Y) :-       % X - мать Y, если
 родитель( X, Y),    % X - родитель Y и
 женщина( X).        % X - женщина
родительродителя( X, Z) :-
 % X - родитель родителя Z, если
 родитель( X, Y),    % X - родитель Y и
 родитель( Y, Z).    % Y - родитель Z
сестра( X, Y) :-     % X - сестра Y
 родитель( Z, X),
 родитель( Z, Y)     % X и Y имеют общего родителя
 женщина( X, Y),     % X - женщина и
 различны( X, Y).    % X отличается от Y
предок( X, Z) :-     % Правило пр1:  X - предок Z
 родитель( X, Z).
предок( X, Z) :-     % Правило пр2:  X - предок Z
 родитель( X, Y),
 предок( Y, Z).
Рис. 1.8. Программа о родственных отношениях.
На рис. 1.8 два предложения, входящие в состав отношения предок, выделены именами 'пр1' и 'пр2', добавленными в программу в виде /*' и '*/'. Таким образом, прологовский комментарий выглядит так
/* Это комментарий */
Другой способ, более практичный для коротких комментариев, использует символ процента %. Все, что находится между % и концом строки, расценивается как комментарии:
% Это тоже комментарий
1.6. Рассмотрим другой вариант отношения предок:
предок( X, Z) :-
 родитель( X, Z).
предок( X, Z) :-
 родитель( Y, Z),
 предок( X, Y).
Верно ли и такое определение? Сможете ли Вы изменить диаграмму на рис. 1.7 таким образом, чтобы она соответствовала новому определению?
1.4. Как пролог-система отвечает на вопросы
В данном разделе приводится неформальное объяснение того, 

 
                