Пусть наш вопрос - это некая функция.
Тогда, очевидно, она может принимать два логических параметра: есть ли крокодил, и правду ли говорит человек.
Значит все возможные входные данные для неё:
0 0
0 1
1 0
1 1
Первые две строки соответствуют лгуну, а значит мы получим не прямое значение функции, а обратное ( отрицание).
Тогда, если положить, чтоб, если у аборигена есть крокодил,то он должен ответить "Да", результаты нашей функции принимают такой вид:
f(0,0)=1
f(0,1)=0
f(1,0)=0
f(1,1)=1
Как видим, этому соответствует функция: f(a,b)=(a==b) , то-есть она должна быть равна 1, когда параметры её равны. Осталось подобрать соответствующий вопрос:
"Верно ли, что вы одновременно лгун и у вас нету крокодила, либо, вы говорите правду и у вас есть крокодил?"
Идея с булевой функцией интересна, но вопрос не приносит полезной информации, мне кажется (может я не прав, поправьте меня). Стоит учесть, что главная у нас информация, чтобы получить ответ такой, чтобы однозначно знать - есть ли у аборигена крокодил. Выходит, если задается вопрос лжецу, у которого нет крокодила (f(0,0) = 1), то он ответит утвердительно. В то же время, рыцарь, у которого есть крокодил (f(1,1) = 1) также ответит утвердительно. Аналогично, когда нет крокодилов. Поэтому СДНФ f(a,b) = a~b не решает нашу задачу