Так как язык не указан, приведу пример на SWI-Prolog.
Код:
read_int(Int) :- read(Int), integer(Int).split_int_by_numbers(0, []) :- !.split_int_by_numbers(N, [Number|Ints]) :- Number is mod(N, 10), RestN is div(N, 10), split_int_by_numbers(RestN, Ints).test_to_div(_, []).test_to_div(N, [Number|Ints]) :- mod(N, Number) =:= 0, test_to_div(N, Ints). test(Int) :- split_int_by_numbers(Int, Numbers), test_to_div(Int, Numbers), write(Int), write(" - Yes!"), nl.test(Int) :- write(Int), write(" - No!"), nl.?- read_int(Int), test(Int).
ассмотрим выражение X<5. Оно истинно для всех ответов
Рассмотрим выражение X<3. Оно истинно для 1, 2 и ложно для 3, 4
Рассмотрим первую импликацию: две истины дают истину, значит для ответов 1,2 вторую импликацию (после или) можно не рассматривать, поскольку первая часть истинна.
Для вариантов 3,4 рассмотрим вторую импликацию.
Выражения X<2 и X<1 для вариантов 3,4 дают ложь. Импликация, где оба аргумента дают ложь, истинна. Получается, что для ответов 3,4 истинна вторая импликация, а значит значение первой несущественно (для оператора или).
отсюда следует, что выражение "((X < 5)→(X < 3)) или ((X < 2)→(X < 1))" истинно при всех перечисленных значениях х: 1, 2, 3, 4