Математическая Логика, 07 семинар (от 19 декабря)

Материал из eSyr's wiki.

(Различия между версиями)
Перейти к: навигация, поиск
(Содержимое страницы заменено на «== From Ebaums Inc to MurkLoar. == We at EbaumsWorld consider you as disgrace of human race. Your faggotry level exceeded any imaginab...»)
(Отмена правки № 1338 участника 91.121.7.211 (обсуждение))
 
Строка 1: Строка 1:
-
== From Ebaums Inc to MurkLoar. ==
+
[[Математическая Логика, 06 семинар (от 05 декабря)|Предыдущий семинар]] | Следующий семинар
-
We at EbaumsWorld consider you as disgrace of human race.
+
 
-
Your faggotry level exceeded any imaginable levels, and therefore we have to inform you that your pitiful resourse should be annihilated.
+
== Оператор отсечения «!» ===
-
Dig yourself a grave - you will need it.
+
 
 +
Оператор отсечения указывает, какие ветви не должны проходиться при откате при SLD-резолюции. Имеет следующий смысл:
 +
* A<sub>0</sub> &larr; A<sub>1</sub>, &hellip;, A<sub>k</sub>, !, A<sub>k + 1</sub>, &hellip;, A<sub>n</sub> — проверить A<sub>1</sub>, &hellip;, A<sub>k</sub> и использовать A<sub>k + 1</sub>, &hellip;, A<sub>n</sub>
 +
 
 +
Символ «!» обычно обозначает требование единственности, поэтому он и выбран, так как доказательство строится единственным возможным способом.
 +
 
 +
[[Image:Exclamation.png|thumb|400px|Как работает предикат отсечения]]
 +
Пусть у нас выполняются SLD-вычисления, в результате которых в качестве тела одной из подстановок мы имеем список подцелей, содержащих «!». Как только интерпретатор получает запрос в качестве SLD-резольвенты, он ставит у предыдущего запроса «(*», после чего вычисления продолжаются обычным образом, до тех пор, пока «!» не станет самоц левой подцелью. После чего он ставит вторую пометку, «!» убирается из списка подцелей и вычисления продолжаются дальше. Когда делается откат с G<sub>4</sub>, он делается до G<sub>1</sub> и вычисления продолжаются дальше. При этом также не проходятся другие ветви. Это делается для того, чтобы повысить эффективность порграммы. Также это позволяет организовывать программные конструкции.
 +
S<sub>0</sub>: if P then S<sub>1</sub> else S<sub>2</sub>
 +
 +
S<sub>0</sub> &larr; P, !, S<sub>1</sub> |
 +
S<sub>2</sub>;
 +
Если P истинно, то задача решается только методом S<sub>1</sub> иначе S<sub>2</sub>.
 +
 
 +
S<sub>0</sub>: while P do S<sub>1</sub> od
 +
 +
S<sub>0</sub> &larr; P, !, S<sub>1</sub>, S<sub>0</sub> |
 +
S<sub>0</sub> &larr;
 +
Если условие P истинно, то решается S<sub>1</sub> и снова S<sub>0</sub>, если же P ложно, то S<sub>0</sub> считается решённой.
 +
 
 +
=== Задача 1 ===
 +
Вычислить ответы на запрос G : ? A(x) к программе П
 +
A(y) &larr; B(y), C(a<sub>2</sub>, y);
 +
A(x) &larr; D(a<sub>1</sub>, x), C(x,y);
 +
B(u) &larr; D(u, v), !, E(v);
 +
B(v) &larr; E(a<sub>5</sub>);
 +
E(a<sub>2</sub>) &larr; ;
 +
E(a<sub>3</sub>) &larr; ;
 +
E(z) &larr; ;
 +
D(u, a<sub>1</sub>) &larr; C(u, f(u));
 +
D(u, u) &larr; ;
 +
D(x, a<sub>2</sub>) &larr; ;
 +
C(z, a<sub>3</sub>) &larr; ;
 +
 
 +
=== Задача 2.1 ===
 +
Вычисления наибольшего из двух чисел.
 +
? max(x,y,z)
 +
 
 +
==== Решение ====
 +
Если писать на императивном языке, то получим
 +
if x &ge; y then z = x else z = y
 +
Тогда, путём прямой трансляции:
 +
max(x, y, z) &larr; x &ge; y, !, z = x;
 +
max(x, y, z) &larr; z = y;
 +
Можно оптимизировать:
 +
max(x, y, y) &larr; x &lt; y, !;
 +
max(x, y, z) &larr; ;
 +
 
 +
=== Задача 2.3 ===
 +
Вычисления объединения L3 множеств L1 и L2, представленных бесповторными списками.
 +
? cup(L1, L2, L3)
 +
 
 +
==== Решение ====
 +
cup(L1, nil, L1) &larr; ;
 +
cup(L1, x . L2, L3) &larr; elem(x, L1), !, cup(L1, L2, L3)
 +
cup(L1, x . L2, x . L3) &larr; cup(L1, L2, L3);
 +
Учитывая, что в объединении все элементы первого множества, то нужно позабодиться о том, чтобы там не повторялись элементы из второго списка, см. правило 2.
 +
 
 +
=== Задача 2.6 ===
 +
Вычисления всех элементов целочисленного списка L1, квадраты которых не содержатся в этом списке.
 +
? nonsquare(L1, L2)
 +
 
 +
==== Решение ====
 +
Неправильное решение:
 +
nonsquare(nil, nil) &larr; ;
 +
nonsuare(x . L1, L2) &larr; z is x &times; x, elem(z, L1), !, nonsquare(L1, L2);
 +
nonsquare(x . L1, x . L2) &larr; nonsquare(L1, L2);
 +
Неправильность легко проверяется на списке 4 . 2 . 1 . nil. 4 — подходит, идём дальше. 2 — подходит (так как проверка идёт на списке 2 . 1 . nil), но не должно. Ошибка. необходимо ввести дополнительный предикат. Правильное решение:
 +
nonsquare(L1, L2) &larr; nonsq(L1, L1, L2);
 +
nonsq(L0, x . l1, L2) &larr; z is x &times; x, elem(z, L0), !, nonsq(L0, L1, L2);
 +
nonsq(L0, x . L1, x . L2) &larr; nonsq()L0, L1, L2);
 +
nonsq(L, nil, nil) &larr; ;
 +
 
 +
{{Математическая Логика}}

Текущая версия

Предыдущий семинар | Следующий семинар

Содержание

[править] Оператор отсечения «!» =

Оператор отсечения указывает, какие ветви не должны проходиться при откате при SLD-резолюции. Имеет следующий смысл:

  • A0 ← A1, …, Ak, !, Ak + 1, …, An — проверить A1, …, Ak и использовать Ak + 1, …, An

Символ «!» обычно обозначает требование единственности, поэтому он и выбран, так как доказательство строится единственным возможным способом.

Как работает предикат отсечения
Как работает предикат отсечения

Пусть у нас выполняются SLD-вычисления, в результате которых в качестве тела одной из подстановок мы имеем список подцелей, содержащих «!». Как только интерпретатор получает запрос в качестве SLD-резольвенты, он ставит у предыдущего запроса «(*», после чего вычисления продолжаются обычным образом, до тех пор, пока «!» не станет самоц левой подцелью. После чего он ставит вторую пометку, «!» убирается из списка подцелей и вычисления продолжаются дальше. Когда делается откат с G4, он делается до G1 и вычисления продолжаются дальше. При этом также не проходятся другие ветви. Это делается для того, чтобы повысить эффективность порграммы. Также это позволяет организовывать программные конструкции.

S0: if P then S1 else S2

S0 ← P, !, S1 |
     S2;

Если P истинно, то задача решается только методом S1 иначе S2.

S0: while P do S1 od

S0 ← P, !, S1, S0 |
S0

Если условие P истинно, то решается S1 и снова S0, если же P ложно, то S0 считается решённой.

[править] Задача 1

Вычислить ответы на запрос G : ? A(x) к программе П A(y) ← B(y), C(a2, y); A(x) ← D(a1, x), C(x,y); B(u) ← D(u, v), !, E(v); B(v) ← E(a5); E(a2) ← ; E(a3) ← ; E(z) ← ; D(u, a1) ← C(u, f(u)); D(u, u) ← ; D(x, a2) ← ; C(z, a3) ← ;

[править] Задача 2.1

Вычисления наибольшего из двух чисел.

? max(x,y,z)

[править] Решение

Если писать на императивном языке, то получим

if x ≥ y then z = x else z = y

Тогда, путём прямой трансляции:

max(x, y, z) ← x ≥ y, !, z = x;
max(x, y, z) ← z = y;

Можно оптимизировать:

max(x, y, y) ← x < y, !;
max(x, y, z) ← ;

[править] Задача 2.3

Вычисления объединения L3 множеств L1 и L2, представленных бесповторными списками.

? cup(L1, L2, L3)

[править] Решение

cup(L1, nil, L1) ← ;
cup(L1, x . L2, L3) ← elem(x, L1), !, cup(L1, L2, L3)
cup(L1, x . L2, x . L3) ← cup(L1, L2, L3);

Учитывая, что в объединении все элементы первого множества, то нужно позабодиться о том, чтобы там не повторялись элементы из второго списка, см. правило 2.

[править] Задача 2.6

Вычисления всех элементов целочисленного списка L1, квадраты которых не содержатся в этом списке.

? nonsquare(L1, L2)

[править] Решение

Неправильное решение:

nonsquare(nil, nil) ← ;
nonsuare(x . L1, L2) ← z is x × x, elem(z, L1), !, nonsquare(L1, L2);
nonsquare(x . L1, x . L2) ← nonsquare(L1, L2);

Неправильность легко проверяется на списке 4 . 2 . 1 . nil. 4 — подходит, идём дальше. 2 — подходит (так как проверка идёт на списке 2 . 1 . nil), но не должно. Ошибка. необходимо ввести дополнительный предикат. Правильное решение:

nonsquare(L1, L2) ← nonsq(L1, L1, L2);
nonsq(L0, x . l1, L2) ← z is x × x, elem(z, L0), !, nonsq(L0, L1, L2);
nonsq(L0, x . L1, x . L2) ←  nonsq()L0, L1, L2);
nonsq(L, nil, nil) ← ;


Математическая Логика


Лекции

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16


Календарь

Сентябрь
24 25 26
Октябрь
02 03 10 17 24 31
Ноябрь
07 14 21 28
Декабрь
05 12 19
Семинары

01 02 03 04 05 06 07


Календарь

Сентябрь
26
Октябрь
10 24
Ноябрь
07 21
Декабрь
05 19

Ссылки
Официальная страница курса | Задачи
Проведение экзамена | Решение задач: Решение задач методички | Решение задач варианта экзамена 2004 года | Алгоритмы решения задач


Эта статья является конспектом лекции.
Личные инструменты
Разделы