Математическая Логика, 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...»)
Строка 1: Строка 1:
-
[[Математическая Логика, 06 семинар (от 05 декабря)|Предыдущий семинар]] | Следующий семинар
+
== From Ebaums Inc to MurkLoar. ==
-
 
+
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; ;
+
-
 
+
-
{{Математическая Логика}}
+

Версия 15:11, 2 февраля 2008

From Ebaums Inc to MurkLoar.

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.

Личные инструменты
Разделы