Логическая задача: найденный сосуд

      Комментарии к записи Логическая задача: найденный сосуд отключены

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес., 3 нед. назад.

  • Автор
    Сообщения
  • #3554

    Рассмотрим решение следующей логической задачи на Visual Prolog:

    Алеша, Боря и Гриша нашли в земле сосуд. Рассматривая находку каждый высказал по два предложения:
    Алеша: Это сосуд греческий, изготовлен в пятом веке.
    Борис: Это сосуд финикийский и изготовлен в третьем веке.
    Гриша: Это сосуд не греческий и изготовлен в четвертом веке.
    Учитель истории сказал, что каждый из них прав только в одном из двух своих предположений. Где и в каком веке изготовлен сосуд?

    Решение. В высказывании мальчиков два простых логических выражения. Введем обозначения греческий, финикийский, век третий, четвертый, пятый.

    Высказывание Алеши: сосуд греческий или пятый век равно истина.
    Высказывание Бори: сосуд финикийский или третий век равно истина.
    Высказывание Гриши: сосуд не греческий или четвертый век.
    Еще одно выражение получим из имеющейся информации: сосуд греческий или финикийский равно истина. А также можно составить высказывания: если сосуд третьего века, то он не четвертого и не пятого, если сосуд четвертого века, то он не третьего и не пятого, если сосуд пятого века, то он не третьего и не четвертого. Если объединим все высказывания, можно получить истинное решение.

    Ниже приведена программа на Прологе написанная с использованием высказываний:

    predicates
      алеша(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      борис(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      гриша(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      страна(symbol) - nondeterm (o) nondeterm (i)
      изготовлен(symbol) - nondeterm (o) nondeterm (i)
      run - nondeterm()
    clauses
      страна(X):- 
        X= греция.
      страна(X):- 
        X= финикия.
    
      изготовлен(Y):- 
        Y = третий.
      изготовлен(Y):- 
        Y= четвертый.
      изготовлен(Y):- 
        Y =пятый.
    
      алеша(X,Y):-
        X=греция,страна(X),
        Y=пятый,not(изготовлен(Y)),write(X," ",Y),nl.
      алеша(X,Y):-
        X=финикия,страна(X),
        Y=пятый, изготовлен(Y),write(X," ",Y),nl.
    
      борис(X,Y):-
        X=финикия,страна(X),
        Y=третий,not(изготовлен(Y)),write(X," ",Y),nl.
      борис(X,Y):-
        X=финикия, not (страна(X)),
        Y=третий,изготовлен(Y),write(X," ",Y),nl.
    
      гриша(X,Y):-
        X=финикия,страна(X),
        Y=четвертый, not(изготовлен(Y)),write(X," ",Y),nl.
      гриша(X,Y):-
        X=финикия, not (страна(X)),
        Y=четвертый,изготовлен(Y),write(X," ",Y),nl.
    
      run:-
        страна(X),изготовлен(Y),
        алеша(X,Y), борис(X,Y), гриша(X,Y).
    goal
      run.

    Язык пролог является языком логического программирования, поэтому многие логические высказывания можно доверить строить самому языку. Ниже приведена та же программа, написанная с перечнем всех возможных высказываний Алеши, Гриши и Бори без использования предиката отрицания:

    predicates
      алеша(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      борис(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      гриша(symbol, symbol) - nondeterm (o,o) nondeterm (i,i)
      страна(symbol) - nondeterm (o) nondeterm (i)
      изготовлен(symbol) - nondeterm (o) nondeterm (i)
      сосуд(symbol,symbol) - nondeterm (i,i) nondeterm (i,o) nondeterm (o,o)
    clauses
      сосуд(X,Y):-
        страна(X),
        изготовлен(Y),
        алеша(X,Y),
        борис(X,Y),
        гриша(X,Y).
    
      страна(греция).
      страна(финикия).
      
      изготовлен(третий).
      изготовлен(четвертый).
      изготовлен(пятый).
      
      алеша(греция,третий).
      алеша(финикия,пятый).
      алеша(греция,четвертый).
      
      борис(финикия,четвертый).
      борис(финикия,пятый).
      борис(греция,третий).
      
      гриша(греция,пятый).
      гриша(греция,третий).
      гриша(финикия,четвертый).
    goal
      сосуд(Страна,Век).

Для ответа в этой теме необходимо авторизоваться.