\documentclass[a4paper,fontsize=14bp]{article}

\author{Девятков Владимир Валентинович (Лычков Игорь Игоревич)}
\title{Представление знаний в информационных системах}
\date{2022-02-08}

\input{../common-preamble}
\input{../fancy-listings-preamble}
\input{../bmstu-preamble}
\numerationTop

\begin{document}
\maketitle
\newpage
\section{Искусственный интеллект и знания}
\textit{Повтор тем из бакалавриата.}

Чем отличается искусственный интеллект от не искусственного? Возможность генерации новых знаний

Что такое слабый ИИ и что такое сильный ИИ? Осознание себя.

Человек именует себя homo sapiens, что означает мудрое существо или существо, обладающее умом (интеллектом), тем самым, подчеркивая важность для своего существования именно умственных или интеллектуальных способностей.  Область знаний искусственного интеллекта (ИИ) пытается понять и использовать сущность этих способностей.

\paragraph{John McCarthy}
Ввёл термин более 50 лет назад (1956). Предложение: «Область исследования ИИ отталкивается от гипотезы, состоящей в том, что  каждый аспект поведения человека, имеющий признаки интеллектуальности может быть, в принципе, настолько точно описан, что по этому описанию может быть создана машина способная моделировать это поведение».

\paragraph{А́лан Мэ́тисон Тью́ринг}
Английский математик, логик, криптограф, оказавший существенное влияние на развитие информатики.  \textit{Фильм: Игра в имитацию}.
А. Тьюринг предложил «игрушечный» тест, называемый в настоящее время «тестом Тьюринга», который мог бы служить средством выявления интеллектуальности. Суть этого теста состоит в следующем. В одном помещении находится человек, а в другом машина, созданная кем-то, например, тем же человеком. Они беседуют друг с другом на интересующие человека темы. Если в процессе этой  беседы человек не может отличить, кто же там за стеной, человек или машина, то в этом случае машину следует признать интеллектуальной. Этот тест основан на предположении, что любая беседа двух людей является интеллектуальной.

\paragraph{Психология}
Психологи считают, что интеллект - это «свойство личности, выражающееся в способности глубоко и точно отражать в сознании предметы и явления объективной действительности в их существенных связях и закономерностях, а также в творческом преобразовании опыта. ... система ориентировки на существенные отношения решаемой задачи... ядро ... собственно интеллекта составляет способность выделить в ситуации ее существенные для действия свойства в их связях и отношениях и привести свое поведение в соответствие с ними»

\paragraph{Информатика}
«Восхищающие новые усилия заставить компьютеры думать... машины с разумом в полном и языковом смысле» (J.Haugeland, 1955).

«Автоматизация деятельности, которую мы ассоциируем с человеческим мышлением, такой как принятие решений, решение задач, усвоение знаний» (R. E. Bellman, 1978).

«Исследование умственных способностей с помощью ипользования вычислительных моделей» (E. Charniak and D. McDermot, 1985).

«Область исследования, которая пытается понять и моделировать разумное поведение в терминах вычислительных процессов» (R. J. Schalkoff, 1990).

«Исследование того, как заставить компьютеры делать вещи не хуже людей» (E. Rich and K. Knigpt, 1991).

\textit{«Изучение исчислений, которые позволяют понимать, рассуждать и действовать»} (P. H. Winston, 1992).

«Отрасль науки о компьютерах, которая интересуется автоматизацией разумного поведения» (J. I. Luger and W. A. Stubblefield, 1993).

\subsection{Сильный и слабый искусственный интеллект}
\textbf{Сильный} искусственный интеллекта предполагает, что компьютеры могут приобрести способность мыслить и осознавать себя, хотя и не обязательно их мыслительный процесс будет подобен человеческому.
\textbf{Слабый} искусственный интеллект отвергает такую возможность.

На английском соответствующие термины это — «Artificial Intelligence», «strong AI», «full AI» для сильного ИИ и «applied AI», «narrow AI» или «weak AI» — для слабого ИИ. Термин «сильный ИИ» был введён Джоном Сёрлем, который охарактеризовал его следующим образом: «Сильный ИИ - это не просто модель разума, а собственно разум в том же смысле, в котором человеческий разум — это разум».

\paragraph{Свойства сильного ИИ}
\begin{itemize}
\item Представление знаний, включая общее представление о реальности;
\item Планирование;
\item Обучение;
\item Общение на естественном языке;
\item Сознание: Быть восприимчивым к окружению;
\item Самосознание: Осознавать себя как отдельную личность, в частности, понимать собственные мысли;
\item Сопереживание: Способность «чувствовать», соучаствовать;
\item Мудрость.
\end{itemize}

\paragraph{Системы ИИ}
Под системами искусственного интеллекта или интеллектуальными системами принято понимать системы, которые с участием человека или без позволяют решать различные сложные интеллектуальные задачи Пример: мультиагентные интеллектуальные системы.

\paragraph{ИИ и сложные задачи}
Одна из главных причин прикладного интереса к искусственному интеллекту - это стремление создавать на его основе интеллектуальные искусственные системы способные решать сложные задачи. Это не означает, что сложные задачи не могут решаться без искусственного интеллекта. Но поскольку человек способен решать сложные задачи благодаря своему интеллекту, то, следовательно, копируя и развивая системы искусственного интеллекта, можем надеяться, что они будет способны делать то же самое.
Оценка сложности задачи
\begin{itemize}
\item Время, затрачиваемое на решение задачи, как функция размера задачи, называется временной сложностью ее решения.
\item Поведение этой сложности в пределе при увеличении размера задачи называется асимптотической временной сложностью.
\item Аналогично можно определить емкостную сложность и асимптотическую емкостную сложность.
\item Асимптотическая сложность решения определяет размер задач, которые возможно решить, используя соответствующие средства.
\end{itemize}
Зададим функции $f(n), q(n)$, где $n = 0, 1,...$ – размерность задачи.
Введем обозначение $f(n) = O[q(n)]$, означающее $f(n) = q(n)$ для больших n, если $\lim f(n)/q(n) = 1$.

 Пример: $f(n) = kn + kn - 1 + ... k0, q(n) =kn$,

 \[ \lim (f(n)/q(n)) = \lim (1 + 1 / k + ... + 1 / kn - 1) = 1. \]
Здесь $k$ – достаточно большая константа.


Решение задачи имеет асимптотическую сложность $O[q(n)]$, если $f(n)=O[q(n)]$. Функцию $f(n)$ называют функцией сложности.

Задачи, для которых $f(n) = O(nc)$,  где $с$ – неотрицательная константа, называют полиномиальными. В частности, при $с=0$ сложность $О(1)$ означает, что время работы задачи не зависит от n.

Если $f(n) = O(n)$, то задача линейна по сложности.

Задачи полиномиальной сложности принято считать эффективными. Для них $f(n)$ имеет вид: и т.п. $O(1)$, $O(n)$, $O(n \log n)$, $O(n2)$, $O(n3)$.

Существуют неполиномиальные задачи, функции сложности которых растут быстрее любого полинома. Это высокозатратные задачи с точки зрения требуемых вычислительных ресурсов.
Пусть $f(n)$ и $f^{*}(n)$ – функции сложности задач $A$ и $A^{*}$ соответственно.

Задача $A^{*}$ считается асимптотически менее сложной, чем задача $A$, если $f^{*}(n) = O[f(n)]$.

При выборе функции сложности $f(n)$ возможна ориентация на один из следующих случаев:
\begin{itemize}
\item $f(n)$ характеризует максимально возможное время работы задачи;
\item $f(n)$ характеризует минимальное время выполнения задачи при некоторых «хороших» входных данных;
\item $f(n)$ учитывает вероятности появления тех или иных («хороших» или «плохих») входных данных.
\end{itemize}
С практической точки зрения важны случаи 1 и 2, поскольку они позволяют оценивать потенциальные возможности решать задачи большой размерности за приемлемое время

\paragraph{Трудноразрешимые задачи}
Задачи, которые не удается решать за полиноминальное время, трудноразрешимыми. К классу трудноразрешимых задач относится большое число задач алгебры, математической логики, теории графов, теории автоматов и других разделов дискретной математики. В большинстве своем это так называемые переборные задачи. Переборная задача характеризуется экспоненциальным множеством вариантов, среди которых нужно найти решение, и может быть всегда решена полным перебором.

Полный перебор имеет экспоненциальную сложность и может хорошо работать только для небольших размеров задачи. С ростом размера задачи число вариантов быстро растет, и задача становится практически неразрешимой. Возникает вопрос: если известно, что некоторая задача разрешима, то неудача в разработке для нее полиномиального решения является следствием неумения конкретного разработчика или следствием каких-то свойств самой задачи?

\paragraph{Распознавательные задачи}
Ответ на этот вопрос дает классическая теория алгоритмов, которая классифицирует задачи по сложности. При этом классифицируются лишь распознавательные задачи – задачи, имеющие распознавательную форму. В распознавательной форме суть задачи сводится к распознаванию некоторого свойства, а ее решение – один из двух ответов: «да» или «нет». С точки зрения математической логики задаче распознавания свойства соответствует задача выяснения при каких значениях переменных  х предикат $Р(х)$ истинен, а при каких ложен.

Существуют задачи, которые изначально имеют распознавательную форму. Например, являются ли два графа изоморфными? Другой пример – задача о выполнимости булевой функции, которая является исторически первой распознавательной задачей, глубоко исследованной в теории алгоритмов. Многие задачи, которые в исходной постановке представлены в иной форме (к ним относятся задачи дискретной оптимизации), довольно просто приводятся к распознавательной форме.

Между тем, имеются задачи, которые нельзя привести к распознавательной форме. Это, в первую очередь, конструктивные задачи, например, задачи на построение объектов дискретной математики, обладающих заданными свойствами: генерация всех подмножеств конечного множества; Такие задачи могут быть как трудноразрешимыми, так и полиноминально разрешимыми. Они  пока не попадают под существующую в теории алгоритмов классификацию.

\textit{Распознавательные задачи удобно решать методами искусственного интеллекта.}

\subsection{Знания}
Знания – основа интеллектуальности систем. Обычно выделяют 2 типа знаний:
\begin{itemize}
\item Декларативные
\item Процедурные
\end{itemize}
Знания в системах искусственного интеллекта обычно хранятся в базах знаний. Знания содержат информацию как о конкретных (константных) фактах о той или иной предметной области (среде, мире), так и о более общих законах и свойствах, позволяющих получать (выводить) новые знания. Понятие «знание» имеет два аспекта: декларативный и процедурный.

\paragraph{ИИ и знания}
\begin{itemize}
\item ИИ функционирует на основе знаний
\item ИИ занимается созданием специализированных моделей и языков для представления знаний в ЭВМ,
\item ИИ занимается созданием специальных средств, позволяющих пополнять и обобщать знания.
\item ИИ занимается созданием программных и аппаратных средств для работы со знаниями;
\item ИИ занимается созданием методов формирования планов достижения целей и решения сложных задач, не поддающихся решению другими методами, кроме как на основе использования знаний;
\item ИИ занимается созданием средств восприятия мультимодальной информации (зрительной, слуховой, тактильной и др),
\item ИИ занимается развитием методов мультимодальной обработки и формирования ответных реакций на воздействия внешней среды,
\item ИИ занимается развитием методов адаптации искусственных систем к среде путем обучения.
\end{itemize}

\subsection{Формальная теория, формальный язык}
\label{subsec:formal-theory}
Формальная теория (формальная система, в значительной части - исчисления) - это тройка $\Re = \{L, S, C\}$, где
\begin{itemize}
\item [] $L$ – язык формальной модели с присущими ему синтаксисом, т.е. $L = \{T, G\}$,
\item [] $S$ – совокупность начальных знаний, сформулированных на языке $L$;
\item [] $C$ – абстрактная машина или машина вывода, которая, используя правила вывода $P$ и определенную стратегию вывода, осуществляет формирование в  языке $L$ новых знаний, начиная с начальных.
\end{itemize}

Таким образом машина вывода является двойкой $C = \{P, \Omega\}$, где $\Omega$ - стратегия вывода, согласно которой абстрактная машина $C$, используя правила вывода $P$ осуществляет вывод. Правила вывода не обязательно являются правилами логического вывода, поскольку формальные модели могут быть не только логическими. Формальную теорию называют также формальной моделью, формальной системой или исчислением.

\textbf{Дедуктивное рассуждение} развивается от общего к частному (от посылки к следствию). Пример дудуктивного рассуждения: «Все люди смертны, Сократ – человек, следовательно, Сократ смертен».

\textbf{Абдуктивное рассуждение} – это «обратная» дедукция, так сказать, дедукция, поставленная с ног на голову. Абдуктивное рассуждение развивается по сравнению с дедуктивным в противоположном направлении, то есть от следствия к посылке. Пример абдуктивного рассуждения: «Все люди смертны, Сократ смертен, следовательно, Сократ человек». Может показаться, что здесь все нормально, но если вдуматься, то становится ясно, что вывод неправильный. Из того, что Сократ смертен, совсем не следует, что Сократ человек, ведь смертны и кошки, и собаки, и бабочки, и, может быть, деревья.

\textbf{Индуктивное рассуждение} развивается от частного к общему (от следствия к посылке).

\paragraph{Формальный язык}
Формальный язык $L$ в соответствии с современными представлениями требует рассмотрения двух его неотъемлемых частей: синтаксиса и семантики.

\textbf{Синтаксис} языка описывает допустимые в языке предложения, состоящие из цепочек терминальных символов, принадлежащих определенному терминальному алфавиту. Синтаксис языка позволяет отличать предложения, принадлежащие языку, от предложений, ему не принадлежащих.

\textbf{Семантика} языка определяет смысл предложений языка. Без семантики предложения языка являются ничего незначащими цепочками символов.

\textbf{Формализацией задачи} будем называть создание для ее решения формальной модели. Формальным решением задачи будем называть осуществление решения задачи с помощью формальной модели.

\paragraph{Декларативные и процедурные знания}
\textbf{Декларативные знания} не содержат в явном виде описание процедур, которые необходимо выполнить в процессе вывода. Вывод на основе декларативных знаний осуществляется по определенной стратегии вывода специальной машиной вывода (решателем). Например, вывод (поиск решения) может быть организован как поиск в пространстве состояний,  и сводится к нахождению последовательности состояний ведущих из начального состояния (начальных) в  целевое состояние.

\textbf{Процедурные знания} - это знания, представляемые в виде процедур, с помощью которых осуществляется вывод. Вывод на основе процедурных  знаний также может осуществляться машиной вывода, организующей вызов процедур в соответствии  с определенной стратегией.

Сочетание преимуществ декларативного и процедурного подхода к представлению знаний по-разному воплощается в различных языках и моделях представления знаний.

Какое представление знаний нам необходимо?
\begin{itemize}
\item Насколько представление знаний должно быть понятным и ясным?
\item Насколько представление знаний должен быть лаконичным?
\item Насколько оно должно быть вычислительно эффективным (способным порождать новые знания)?
\item Насколько оно должно быть модульным?
\item Насколько оно должно быть доступным из разных мест?
\item Какова должна быть охватываемая область представления?
\item Какова должна быть неделимая часть?
\item Каков должен быть уровень детализации?
\item Должен ли быть базовый словарь?
\item Насколько легко можно знания модифицировать?
\item Могут ли быть изменены отдельные элементы без влияния на другие?
\item Как представлять отдельные модули?
\item \textbf{Каков должен быть механизм извлечения знаний?}
\item Каковы должны быть отношения между старыми и новыми знаниями?
\item Какова должна быть форма обобщения и специализации знаний?
\item Какова должна быть процедура поиска необходимых знаний?
\item Как знания должны быть организованы: иерархически, на базе отношений, ассоциативно?
\item Какие отношения возможны между группами знаний?
\item Нужны ли оба механизма работы со знаниями: синтаксический и семантический?
\item Какой нужен механизм вывода?
\item Нужно ли поддерживать дедуктивный, индуктивный и абдуктивный выводы?
\item Нужно ли продолжать вывод, если информация стала неопределенной?
\item Нужно ли продолжать вывод, если информация отсутствует?
\item Должны ли все знания быть явно представленными или решатель может дополнять их?
\item Какие знания должны быть представлены обязательно явно?
\item Может ли структура представления знаний расширяться и модифицироваться?
\item Может ли решатель модифицироваться?
\end{itemize}

\paragraph{Трудности обмена знаниями}
Представление знаний даже об одних и тех же вещах и на одном и том же языке может быть различным. Это приводит к трудностям обмена знаниями между людьми, организациями и программами, и, в частности, к трудностям формирования однозначно понимаемых требований и спецификаций для сложных систем. Несмотря на достаточно продвинутый уровень развития сложных систем, возможности повторного использования и распространения знаний ограничены. Это приводит к повторным усилиям по извлечению и необходимых знаний.

\paragraph{Стандартизация знаний}
Ответ на многие из поставленных вопросов может быть получен путем стандартизации знаний? Стандартизация устранит или сведет к минимуму концептуальную и терминологическую путаницу и установит однозначное понимание языка, используемого для представления знаний

Такой язык должен служить средством
\begin{itemize}
\item стандартизации представления знаний,
\item коммуникации между людьми, имеющими различный взгляд на одни и те же вещи,
\item взаимодействия между программными системами путем трансляции в него и из него,
\item обеспечения возможности повторного использования благодаря формальной спецификации,
\item автоматизации проверки корректности знаний,
\item адекватного представления других языков представления знаний.
\end{itemize}

\paragraph{Онтология}
Онтологией называются представленные на некотором стандартном языке, обладающем перечисленными выше свойствами, знаний о некоторой области интересов (среде, мире). Онтологии хранятся в базах знаний. Онтологии непременно сопутствует некоторая концепция этой области интересов.

Чаще всего эта концепция выражается посредством определения базовых объектов (индивидуумов, атрибутов, процессов) и отношений между ними. Определение этих объектов и отношений между ними обычно называется концептуализацией. Концептуализация может быть явной или ментальной, т.е. существующей только в чьей-то голове. Однако мы будем полагать, что онтология является явным представлением некоторой концептуализации. Онтология может иметь несколько уровней представления знаний.

Уровни онтологий:
\begin{itemize}
\item \textbf{неформальная} на каком-либо естественном языке,
\item \textbf{полуформальная} на каком-либо структурированном подмножестве естественного языка,
\item \textbf{слабоформализованная} на каком-либо языке из области искусственного интеллекта с формальным синтаксисом,
\item \textbf{формализованная} на каком-либо языке из области искусственного интеллекта с формальным синтаксисом, семантикой, значимым и полным механизмом вывода.
\end{itemize}

Следующее определение онтологии, суммирует различные определения онтологий:
\begin{frm}\textbf{Онтологией является} общепринятая и общедоступная концептуализация определенной области знаний (мира, среды), содержащая базис для моделирования этой области знаний, определяющая протоколы для взаимодействия между модулями системы искусственного интеллекта, использующими знания из этой области, и наконец, включающая соглашения о представлении теоретических основ данной области знаний.
\end{frm}
Этапы формирования онтологии
\begin{enumerate}
\item \textit{Определение цели и постановка задачи.} На этом этапе особенно важно понять зачем нужна онтология, как и кем она будет использоваться.
\item \textit{Построение.} Этот этап разбивается на три подэтапа: формализация понятий, кодирование и интеграция.
  \begin{itemize}
  \item Процесс формализации понятий:
    \begin{enumerate}
    \item выявление основных объектов и отношений предметной области,
    \item текстовое описание этих объектов и отношений,
    \item сопоставление этим объектам и отношениям термов.
    \end{enumerate}
  \item Процесс кодирования в каком-либо формальном языке результатов предыдущего подэтапа. Обычно кодирование включает 1) описание с использованием введенных термов необходимых утверждений, 2) выбор формального языка для кодирования, 3) кодирование в выбранном языке.
  \item Процесс интеграции выполняется параллельно двум упомянутым и требует тщательного обдумывания, каким образом вновь создаваемая онтология будет интегрироваться с уже существующими.
  \end{itemize}
\item \textit{Оценка.} На этом этапе осуществляется обдумывание и формирование вопросов, на которые онтология должна давать ответы, выбирается программная среда для реализации онтологии.
\item \textit{Документирование.} На этом этапе осуществляется тщательное составление руководства к онтологии на естественном языке.
\end{enumerate}

\subsection{Языки представления знаний}
\begin{figure}[H]
  \centering
  \includegraphics[width=15cm]{01-langs.png}
  \caption{Языки представления знаний}
  \label{pic:know-langs}
\end{figure}

\section{Формализация логических рассуждений в исчислении логики высказываний}
\textbf{Рассуждением} (а также выводом, поиском, умозаключением) называют ряд мыслей (суждений) изложенных в логически последовательной форме. Процедура математического доказательства - это наиболее чистая форма рассуждения. Все естественно-научные наблюдения и эксперименты, используемые для установления законов природы, используют рассуждения. Аргументация в процессе споров, обсуждений, согласований, судебных процедур основана на рассуждениях.

\subsection{Задача для агента в системе}
Изучим, каким образом агент может находить интересующие его состояния среды (целевые состояния), зная что-либо о других состояниях среды. Нахождение целевых состояний осуществляется с помощью поиска или рассуждения в пространстве состояний путём восприятия состояний и воздействия на среду с помощью опеределённых действий (реакций). То есть, если уже существует чёткий алгоритм решения задачи, то это не задача для искусственного интеллекта.

Существует среда: два объекта (двери) возле которых появляется цель (кусочек сыра), существует агент (кот), который может находиться в некоторых состояниях (лежать, есть) и совершать некоторые действия (перемещаться, есть).
\begin{figure}[h]
  \centering
  \includegraphics[height=6cm]{01-cats.png}
  \caption{Среды и состояния кота}
  \label{pic:cats}
\end{figure}

На рис. \hrf{pic:cats} каждые три выделенные горизонтальные клетки - это состояние среды. То есть еда может появиться сразу у обеих дверей, может у ближенй, дальней или вовсе не появиться. Пользуясь языком логики мы можем понять в каком состоянии находится кот, и что нужно делать для достижения цели. Кот может совершать в один и тот же момент времени только одно из следующих действий:
\begin{itemize}
\item переходить к дверям левой комнаты, 
\item переходить к дверям правой комнаты, 
\item съедать кусочек сыра, около той комнаты, где он находится. 
\end{itemize}
Эти действия обозначим соответственно:
\begin{itemize}
\item c\ts{1} = Идти налево, 
\item c\ts{2} = Идти направо,
\item c\ts{3} = Съесть. 
\end{itemize}

То есть любой объём данных может быть закодирован. Основная задача извлечения знаний - получение результатов из таких представлений и моделирований, построение моделей на каком-то языке.

\begin{figure}[H]
  \centering
  \includegraphics[width=10cm]{01-cats-graph.png}
  \caption{Граф переходов состояний среды}
  \label{pic:cats-graph}
\end{figure}
Цель кота - не оставить ни одного кусочка сыра, где бы он изначально ни находился. В терминах состояний среды целью кота является перевод ее с помощью своих действий (реакций) в одно из состояний b\ts{7} и b\ts{8}. Состояния, в которые с помощью набора допустимых действий необходимо перевести среду, называются целевыми. Будем полагать для нашего примера, что каждое восприятие совпадает с одним из состояний. Решением задачи поиска целевых состояний является нахождение последовательности пар (плана) «восприятие/действие», ведущей из начального состояния в целевые. Процесс нахождения этих последовательностей называется поиском, выводом или рассуждением.
\begin{frm}
\textbf{Постановкой задачи} называется задание всех состояний (не обязательно явно) и действий, которые могут использоваться для решения задачи, начального состояния и целевых состояний, а также всех допустимых переходов между состояниями при выполнении соответствующих действий. Для среды кота постановка задачи уже осуществлена. Все состояния, которые могут использоваться при решении задачи, перечислены
\end{frm}
Целевыми состояниями являются b\ts{7} и b\ts{8}. Все допустимые переходы между состояниями показаны на графе переходов. По графу можно проверить, что решениями задачи являются последовательности  (пути) $b_1c_2\to b_2c_3\to b_4c_1\to b_3c_3$, и $b_1c_3\to b_5c_2\to b_6c_3$, ведущие соответственно в целевые состояния b\ts{7} и b\ts{8}.

Для решения задач нахождения путей, ведущих из начального состояния в целевые в пространстве состояний применяются различные стратегии поиска. Эти стратегии состоят в построении деревьев поиска тем или иным способом. В реальных задачах эти деревья могут быть очень большими, вследствие чего целесообразно разрабатывать такие стратегии поиска, которые с точки зрения оценок сложности являются эффективными. 

Однако, какая бы из этих стратегий не использовалась, элементарным шагом поиска является переход из одного состояния среды в другое и анализ состояния, в которое переход был осуществлен, на принадлежность к числу целевых.

Одной из очевидных, но чрезвычайно неэкономных стратегий поиска, позволяющей найти все решения является стратегия поиска в ширину\footnote{простыми словами: в процедурном программировании для этого используется обычная очередь FIFO и цикл, с условием итерации «пока очередь не пуста». В теле цикла из очереди забирается узел и в очередь кладутся все непосещённые смежные узлы взятого узла (прим. Овчинников)}, состоящая в следующем:
\begin{enumerate}
\item Образовать множество B = {b\ts{1}}, состоящее из одного начального состояния b\ts{1};
\item Для каждого состояния множества B и каждого действия c\ts{j} найти все состояния b\ts{k}, в которые переходит среда. Совокупность всех таких состояний, за исключением тех, которые уже встречались в ранее образованных множествах B, принять за новое множество B;
\item Проверить, нет ли среди элементов этого множества целевых состояний. Если целевых состояний нет, то перейти к п. 2. Если целевые состояния есть, то выписать в порядке использования правил все пути, которые привели к целевым состояниям, удалить эти состояния из множества B и перейти к выполнению следующего пункта.
\item Проверить, все ли целевые состояния найдены. Если найдены все, то прекратить поиск. Если найдены не все, то перейти к п. 2.
\end{enumerate}

\subsection{Формализация}
Рассуждения агента (поиск решений задачи) сводится к вычислению правил перехода в соответствии с выбранной стратегией поиска решения. Каждый шаг вычисления состоит в проверке истинности левой части правила (факта нахождения среды в состоянии b\ts{i} и допустимости действия c\ts{j}) и, в случае её истинности, признанию факта перехода из состояния b\ts{i} в состояние b\ts{k} в результате действия c\ts{j}.

Нам хотелось бы иметь математический аппарат, используя который можно было бы осуществлять постановку и поиск решения задачи формально, используя наилучшую стратегию поиска. Осуществить постановку задачи формально - это значит, имея некий формальный язык, выразить на нем все знания о среде, необходимые для решения задачи.

Решить задачу формально - это значит иметь множество правил и стратегию их использования, позволяющих осуществить вывод одних синтаксически правильных истинных предложений из других синтаксически правильных истинных или предполагаемых истинными. Рассуждения в пространстве состояний могут быть формализованы в языке логики высказываний, на языке логики высказываний можно формально поставить задачу. Логика высказываний может использоваться для формального решения задач. Логика высказываний является одним из простейших языков формализации рассуждений. Синтаксис логики высказываний прост и имеет прямые синтаксические и семантические аналоги в естественных языках, что чрезвычайно облегчает понимание логики высказываний.

Символами языка логики высказываний, составляющими ее алфавит, являются логические константы ИСТИНА и ЛОЖЬ, сокращенно обозначаемые буквами И и Л, логические переменные x, y, z,..., обозначаемые строчными буквами латинского алфавита, логические связки $\wedge$ (И), $\vee$ (ИЛИ), $\neg$ (НЕ), $\equiv$ (ЭКВИВАЛЕНТНО), $\supset$ (ВЛЕЧЕТ) и круглые скобки.

Значениями логических переменных являются логические константы. Предложения языка логики высказываний, называемые также формулами или высказываниями составляются по следующим правилам:
\begin{itemize}
\item Логические константы являются простыми предложениями;
\item Логические переменные также являются простыми предложениями;
\item Сложные предложения формируются из простых с помощью связок $\wedge$ (И), $\vee$ (ИЛИ), $\neg$ (НЕ), $\equiv$ (ЭКВИВАЛЕНТНО), $\supset$ (ВЛЕЧЕТ);
\item Простые и сложные предложения, заключенные или незаключенные в скобки являются предложениями языка логики высказываний.
\item Из предложений с помощью связок и скобок могут образовываться новые предложения языка логики высказываний.
\end{itemize}

Связки имеют следующий порядок старшинства $\neg$, $\wedge$, $\vee$, $\supset$, $\equiv$, т.е. связка $\neg$ самая старшая, а связка $\equiv$ - самая младшая. Формулы логики высказываний, составленные по этим правилам называются правильно построенными формулами или сокращенно \textbf{ппф-формулами}.

\subsection{Формулы логики высказываний}
Формула задает отношение между объектами (свойствами объектов), представленными переменными. Истинностное значение формулы: ИСТИНА или ЛОЖЬ, позволяет судить о наличии или отсутствии у объектов среды тех или иных совокупных свойств или отношений. Истинное значение формулы определяет наличие отношения, а ложное - его отсутствие. Подстановка в формулу констант вместо каких-либо переменных называется ее конкретизацией. Истинностные значения любой формулы, то есть её семантика, всегда могут быть заданы таблицей, состоящей из двух частей: в левой части таблицы перечисляются все наборы значений аргументов, а в правой соответствующие наборам значения формулы. Такие таблицы истинности в логике высказываний называются таблицами истинности (таблица \hrf{table:truthTable}).

\begin{table}[H]
  \centering
  \begin{tabular}{|c|c|c|c|c|c|c|} 
    \hline
    x & y & $\neg x$ & $x\wedge y$ & $x\vee y$ & $x\supset y$ & $x\equiv y$ \\ [0.5ex] 
    \hline\hline
    Л & Л & И & Л & Л & И & И \\ 
    Л & И & И & Л & И & И & Л \\ 
    И & Л & Л & Л & И & Л & Л \\ 
    И & И & Л & И & И & И & И \\ 
    \hline
  \end{tabular}
  \caption{Таблица истинности для связок}
  \label{table:truthTable}
\end{table}

Формулы, истинные на всех наборах значений своих аргументов, называются общезначимыми формулами. Если какая-либо формула $\alpha$ является общезначимой, то этот факт обычно записывается с использованием знака общезначимости $\models$, который ставится перед формулой: $\models\alpha$. 

Проверка формулы на общезначимость может быть осуществлена с помощью таблицы истинности. Если формула истинна во всех строках таблицы истинности, которая содержит все возможные наборы аргументов формулы, то эта формула общезначима (таблица \hrf{table:alpha-formulae}). В логике высказываний известно много общезначимых формул, называемых обычно законами логики высказываний.
\begin{table}[h!]
  \centering
  \begin{tabular}{|c|c|c|c|c|c|c|} 
    \hline
    x & y & $\neg x$ & $(\neg y\wedge y)$ & $\neg x\vee (\neg y\wedge y)$ & $\neg x\vee (\neg y\wedge y)\supset \neg x$ \\ [0.5ex] 
    \hline\hline
    Л & Л & И & И & И & И \\ 
    Л & И & И & И & И & И \\ 
    И & Л & Л & Л & Л & И \\ 
    И & И & Л & Л & Л & И \\ 
    \hline
  \end{tabular}
  \caption{Общезначимые формулы}
  \label{table:alpha-formulae}
\end{table}

\subsection{Законы логики высказываний, выполнимость}
\begin{itemize}
\item Коммутативные законы:
\[w1 \vee w2 \equiv w2 \vee w1\]
\[w1 \wedge w2 \equiv w2 \wedge w1\]
\item Дистрибутивные законы:
\[(w1 \vee w2) \wedge w3 \equiv (w1 \wedge w3) \vee (w2 \wedge w3)\]
\[(w1 \wedge w2) \vee w3 \equiv (w1 \vee w3) \wedge (w2 \vee w3)\]
\item Ассоциативные законы: 
\[(w1 \wedge w2) \wedge w3 \equiv w1 \wedge (w2 \wedge w3)\]
\[(w1 \vee w2) \vee w3 \equiv w1 \vee (w2 \vee w3)\]
\item Законы Де Моргана:
\[\neg (w1 \wedge w2) \equiv \neg w2 \vee \neg w1\]
\[\neg (w1 \vee w2) \equiv \neg w2 \wedge \neg w1\] 
\item Закон двойного отрицания:
\[\neg \neg w1 \equiv w1\]
\end{itemize}
Законы логики высказываний – общезначимые формулы

Формула называется выполнимой, если существуют наборы значений ее аргументов, на которых она принимает истинное значение и наборы значений, на которых она принимает ложное значение. Если формула на всех наборах значений ее аргументов принимает ложное значение, то она называется невыполнимой. Заключение об истинности следствия $\alpha2$ по истинному условию $\alpha1$ и общезначимой импликативной формуле $\alpha1\supset\alpha2$ достаточно универсальный способ для вывода заключений, но требует проверки общезначимости последней. 

Если формула $\alpha1\supset\alpha2$ не является общезначимой, то подобного заключения делать нельзя.

\subsection{Импликативные формулы}
Общезначимость формул вида $\alpha1\supset\alpha2$, называемых импликативными формулами,  является важным свойством для получения заключения об истинности $\alpha2$, называемого заключением, при истинности $\alpha1$, называемого посылкой. Упрощенно импликативные формулы $\alpha1\supset\alpha2$ называются также, как связка $\supset$, т.е. импликацей. Проверка общезначимости может быть сделана с помощью построения таблицы истинности, однако построение таблицы истинности слишком трудоемко для того, чтобы можно было решать реальные задачи: $О(2^n)$, вместо этого используются специальные правила вывода, применение которых базируется не на понятии общезначимости формулы, в частности общезначимости импликативной формулы, а на понятии модели формулы.

Семантика логики высказываний может быть пояснена смысловой интерпретацией ее предложений или формул. Под интерпретацией обычно понимается установление соответствия между логическими переменными и изменяющимися свойствами объектов (или просто  объектами) среды и между значениями переменных (константами) и конкретными значениями свойств объектов. Пример со средой кота:
\begin{itemize}
\item соответствие между логической переменной x\ts{к} и свойствами кота находиться слева или справа,
\item соответствие между значениями логической переменной x\ts{к} = И и x\ts{к} = Л и одним из местонахождений кота слева или справа.
\end{itemize}

\subsection{Модель высказываний. Выводимость}
Среда, любая интерпретация в которой делает данную формулу истинной, называется моделью этой формулы. Понятие модели является важным в логике высказываний и в других логиках, поскольку позволяет удачно ввести понятие выводимости одних, истинных при соответствующей интерпретации формул, из других истинных.

Говорят, что формула $\alpha$ выводима из формул $\alpha1$, $\alpha2$,...,$\alpha k$, если любая (но одна и та же) модель всех этих формул $\alpha1$, $\alpha2$,...,$\alpha k$ является также моделью формулы $\alpha$. Иными словами, если формулы $\alpha1$, $\alpha2$,...,$\alpha k$ истинны на некотором множестве интерпретаций в данной среде, то формула $\alpha$ выводима из них, если она также истинна на всех интерпретациях этого множества. 
Факт выводимости записывают с помощью символа выводимости $\vdash$:
\[\alpha1, ... ,\alpha k \vdash \alpha\]

\subsection{Формальная теория, исчисление высказываний}
Формальной теорией (см. \hrf{subsec:formal-theory}), называемой также формальной моделью, формальной системой, исчислением называется тройка $\Re = \{L, S, P\}$, где
\begin{itemize}
\item [] $L$ – язык формальной модели с присущими ему синтаксисом,
\item [] $S$ – совокупность начальных знаний, сформулированных на языке $L$; 
\item [] $P$ - правила вывода позволяющие формирование по определенной стратегии в языке $L$ новых знаний, начиная с начальных.
\end{itemize}

Правила вывода не обязательно являются правилами логического вывода, поскольку формальные модели могут быть не только логическими.
 
Языком исчисления высказываний является язык логики высказываний. Начальные знания (аксиомы) – это формулы языка логики высказываний. Правила вывода исчисления высказываний – это \setword{модус поненс}{text:modus-ponens-definition}\footnote{Modus ponens (лат. «правило вывода»), обычно называемое правилом отделения или гипотетическим силлогизмом, позволяет от утверждения условного высказывания $A \to B$ и утверждения его основания $A$ (антецедента) перейти к утверждению следствия $B$ (консеквента). Например, металлы — проводники тока, цинк — металл, значит цинк проводит ток. Обратное утверждение не всегда верно: никель и морская вода проводят ток, но никель — металл, а морская вода не металл. Итого, если из $A$ следует $B$, и $B$ — истинно, то $A$ может быть как истинно, так и ложно.}, правило подстановки, правило резолюции и другие, которые будут рассмотрены ниже.

\textbf{Классическое исчисление высказываний}
\begin{itemize}
\item [] Язык: язык логики высказываний.
\item [] Аксиомы: общезначимые формулы.
\item [] Правила: модус поненс и правило подстановки. 
\end{itemize}
В результате получим исчисление, называемое обычно классическим счислением высказываний. Аксиомы классического исчисления высказываний истинны при любой интерпретации. Классическое исчисление высказываний может служить основой для вывода в любой среде.

\textbf{Натуральное исчисление высказываний}
\begin{itemize}
\item В натуральных исчислениях высказываний в качестве аксиом используются не законы логики высказываний, а формулы на языке логики высказываний, для которых среда является моделью.
\item Правила должны быть состоятельными для данной среды.
\item В качестве правил в натуральных исчислениях могут использоваться правила классического исчисления высказываний.
\item В качестве аксиом в натуральных исчислениях могут использоваться аксиомы классического исчисления высказываний.
\item Поскольку количество различных сред бесконечно, то и натуральных исчислений высказываний  может быть сколько угодно.
\end{itemize}

\subsection{Правила вывода}
Правила вывода записываются в виде $\frac{\alpha}{\beta}$. Символы $\alpha$ и $\beta$ в правиле вывода обозначают одну или несколько формул. 
$\alpha$ называется условием, а $\beta$ - следствием. Если в условии или следствии формул несколько, то они записываются через запятую. Используются только такие правила, которые называются \textbf{состоятельными}, т.е. по которым на основании истинности всех формул, входящих в условие правила вывода, можно сделать заключение об истинности всех формул, входящих в следствие правила вывода.

Примеры правил:
\begin{itemize}
  \item \setword{\textbf{Модус поненс}}{text:modus-ponens}. Из истинности условия импликации и истинности самой импликации следует истинность следствия импликации: 
    \[ \frac{\alpha,\alpha\supset\beta}{\beta} \]
  \item \textbf{Правило подстановки}. Из формулы $\alpha(p)$ выводима формула $\alpha(P)$, получающаяся подстановкой в формулу $\alpha(p)$ вместо каждого вхождения переменной $p$ формулы $P$:
    \[\frac{\alpha(p)}{\alpha(P)}\]
\end{itemize}

Примеры правил натуральных исчислений высказываний:
\begin{itemize}
  \item \setword{\textbf{Исключение конъюнкта}}{text:conjunction-exclude}. Из истинности конъюнкции следует истинность любого ее конъюнкта:
    \[\frac{\alpha_1\wedge\alpha_2\wedge...\wedge\alpha_n}{\alpha_i}\]
  \item \setword{\textbf{Введение конъюнкции}}{text:conjunction-inject}. Из списка истинных формул следует истинность их конъюнкции:
    \[\frac{\alpha_1,\alpha_2,...,\alpha_n}{\alpha_1\wedge\alpha_2\wedge...\wedge\alpha_n}\]
  \item \setword{\textbf{Введение дизъюнкции}}{text:disjunction-inject}. Из истинности формулы следует истинность ее дизъюнкции с любыми другими формулами:
    \[\frac{\alpha_i}{\alpha_1\vee\alpha_2\vee...\vee\alpha_n}\]
  \item \setword{\textbf{Исключение двойного отрицания}}{text:double-not-exclude}. Из истинности двойного отрицания формулы следует истинность ее самой:
    \[\frac{\neg(\neg\alpha)}{\alpha}\]
  \item \setword{\textbf{Простая резолюция (удаление дизъюнкта)}}{text:simple-resolution}. Из истинности дизъюнкции и отрицания одного из ее дизъюнктов следует истинность формулы, получающейся из дизъюнкции удалением этого дизъюнкта.
    \[\frac{\alpha\vee\beta,\neg\beta}{\alpha}\]
  \item \setword{\textbf{Резолюция}}{text:resolution}. Из истинности двух дизъюнкций, одна из которых содержит дизъюнкт, а другая - его отрицание, следует формула, являющаяся дизъюнкцией исходных формул без упомянутого дизъюнкта и его отрицания.
    \[\frac{\alpha\vee\beta,\neg\beta\vee\gamma}{\alpha\vee\gamma}\]
\end{itemize}

\section{Формализация логических рассуждений в исчислении логики предикатов первого порядка}
\subsection{Преимущества и недостатки}
Недостатки
\begin{itemize}
\item Выразительные возможности логики высказываний невысоки;
\item Требуется слишком много переменных логики высказываний для описания даже простых сред;
\item В случае простых сред приходится вводить для каждого объекта и каждого его свойства логическую переменную;
\item Число таких переменных равно произведению числа объектов на число их свойств.
\end{itemize}
Преимущества: выразительность логики предикатов является следствием ее основополагающей идеи:
\begin{itemize}
\item каждому уникальному (не совпадающему ни с каким другим) объекту сопоставляется индивидуальная  объектная константа;
\item она обозначается именем (названием) объекта;
\item классу однотипных по каким-либо свойствам объектов сопоставляется - объектная переменная,  значением которой являются объектные константы;
\item объектные константы и переменные в литературе часто называются индивидными или предметными.
\end{itemize}

\subsection{Предикат}
\textbf{Предикатом} называется высказывательная функция, определенная на множестве термов:

\code{предикатный_символ(терм,терм,...,терм)}

Эта функция может принимать только два значения Истина (\code{И}) и Ложь (\code{Л}), называемые истинностными значениями. 

\textbf{Термами} называются константы, переменные и функции.

Пример: среда имеет такие объекты как птицы и другие объекты, и нам известно, что «птицы имеют крылья». Спрашивается, как выразить это знание? Введем константы, обозначающие конкретный вид птиц, например, \textit{Воробей}, \textit{Синица}, \textit{Соловей}, и предикатный символ \textit{имеет\_крылья}. Ведем переменную \code{x}, обозначающую все объекты, нашей среды. Тогда предикат \code{имеет_крылья(x)} задает свойство объекта \code{x} иметь или не иметь крылья.

Если \code{x = Воробей}, то \code{имеет_крылья(Воробей) = И}.
Если \code{x} на является птицей, например \code{x = Лошадь}, то \code{имеет_крылья(Лошадь) = Л}.

\textbf{Объектная константа} называемая в дальнейшем, если это не вызывает путаницы, просто константой, взаимно однозначно сопоставляется в процессе интерпретации какому-либо одному объекту среды. Константа обозначается строкой символов, начинающейся с прописной буквы, и, чаще всего, эта строка символов совпадает с именем или наименованием объекта и записывается курсивом, например, \textit{Владимир}, \textit{Чудовище}, \textit{Кот} и т.д. 

\textbf{Более сложные отношения} объектов среды представляются на языке логики предикатов, как и на языке логики высказываний, в виде определенных предложений (высказываний, формул логики предикатов), использующих предикаты, кванторы, связки и скобки.

\textbf{Объектные переменные} или просто переменные обозначаются строкой символов, начинающейся со строчной буквы и записываемой курсивом. Областью значений каждой переменной является множество объектных констант, в общем случае даже бесконечное.

\textbf{Функции в логике предикатов}

\code{функциональный_символ (терм,терм,...,терм)}

Функция в логике предикатов не предполагает обязательного наличия какого-либо алгоритма вычисления значения функции по ее аргументам. Она лишь задает определенное отношение между термами и возвращает объектную константу.

\subsection{Синтаксис логики предикатов}
\begin{itemize}
\item []  <Формула> $\to$ <Атом> (по сути, предикат)
\item [|] <Формула> 
\item [|] <Формула> <Связка> <Формула>
\item [|] <Квантор> (<Переменная>, ...,<Переменная>) <Формула> 
\item []  $\neg$ <Формула>
\item [|] (Формула) <Атом> $\to$ <Предикатный символ> (<Терм>, ...,<Терм>)
\item [|] <Терм> = <Терм>
\item []  <Терм> $\to$ <Функциональный символ> (<Терм>, ...,<Терм>) | <Константа> | <Переменная>
\item []  <Связка> $\to \supset | \wedge | \vee | \equiv | \neg$
\item []  <Квантор> $\to \forall | \exists$
\item []  <Константа> $\to$ <Строка символов, начинающаяся с прописной буквы>
\item []  <Переменная> $\to$ <Строка символов, начинающаяся со строчной буквы>
\item [] <Предикатный символ> $\to$ <Строка символов, начинающаяся со строчной буквы>
\item [] <Функциональный символ> $\to$ <Строка символов, начинающаяся со строчной буквы>
\end{itemize}

\textbf{Кванторы}
Когда имеем дело с объектами, то возникает естественная потребность выразить какие-либо общие свойства целого множества объектов. Кванторы как раз служат этим целям. Таких кванторов в логике предикатов всего два.
\begin{itemize}
\item Квантор общности $\forall$
\item Квантор существования $\exists$
\end{itemize}

\textbf{Взаимосвязь между кванторами}
Квантор связывает  переменные, которые записываются за знаком квантора в скобках. Они называются связанными. Переменные, которые ни один квантор не связывает, называются свободными. 

Обозначая $P(x)$ любую формулу, переменная x которой связана кванторами, получим следующие законы, характеризующие взаимосвязь между кванторами:

\begin{itemize}
\item $\forall (x) \neg P(x) \equiv \neg \exists(x) P(x)$,
\item $\neg \forall (x) P(x) \equiv \exists (x) \neg P(x)$,
\item $\forall (x) P(x) \equiv \neg \exists(x) \neg P(x)$,
\item $\neg \forall(x) \neg P(x) \equiv \exists (x) P(x)$.
\end{itemize}

\subsection{Аксиомы, теоремы, факты и цели}
Определения таких понятий, как интерпретация, общезначимость, модель, выводимость формул, введенных для логики высказываний, остаются справедливыми и для логики предикатов. 
В математической литературе, посвященной логике предикатов первого порядка, аксиомами обычно называют формулы, истинные при всех интерпретациях в некоторой среде. 
Как и в случае логики высказываний, это можно сказать и другими словами: аксиомами называются такие формулы логики предикатов, для которых среда является моделью при всех их интерпретациях. 
Аксиомы, являющиеся литералами, все аргументы которых являются константами, часто называются фактами. 
Аксиомы, не являющиеся фактами часто называют правилами. 
Факты и правила являются формулами логики предикатов. Основной задачей агента является вывод на основании фактов и правил истинных формул, называемых обычно теоремами, целями или целевыми формулами.

\textbf{Переход от естественного языка к языку логики предикатов}
\begin{itemize}
\item [] \code{Если существо имеет крылья, то это существо - птица.}
\item [] \code{Если существо летает и несет яйца, то это существо - птица.}
\item [] \code{имеет_крылья(существо)} $\supset$ \code{птица (существо)}
\item [] \code{летает(существо)} $\wedge$ \code{несет_яйца(существо)} $\supset$ \code{птица(существо).}
\end{itemize}

\textbf{Одноместные и многоместные предикаты}
\begin{itemize}
\item Одноместные предикаты имеют по одному аргументу. 
\item Предикаты могут быть также многоместными (имеют более одного аргумента). 
\item В случае одноместного предиката предикатный символ соответствует какому-либо свойству объекта. 
\item В случае многоместных предикатов предикатный символ рассматривается как некоторое общее свойство объектов, соответствующих аргументам, либо, чаще всего, как отношение, в котором эти объекты находятся. 
\item Формулы задают отношения с использованием связок.
\end{itemize}

\subsection{Правила вывода}
\textbf{\hrf{text:modus-ponens}}. Сноска с определением \hrf{text:modus-ponens-definition}.

\textbf{Правила введения кванторов}
\[\frac{\alpha(x)\supset\beta(x)}{\alpha(x)\supset\forall(x)\beta(x)}\]
\[\frac{\alpha(x)\supset\beta(x)}{\exists(x)\alpha(x)\supset\beta(x)}\]

\textbf{Правила исключения кванторов}
\[\frac{\forall(x)\alpha(x)}{\alpha(x)}\]
\[\frac{\alpha(y)}{\exists(x)\alpha(x)}\]

\textbf{\hrf{text:conjunction-exclude}}

\textbf{\hrf{text:conjunction-inject}}

\textbf{\hrf{text:disjunction-inject}}

\textbf{\hrf{text:double-not-exclude}}

\textbf{\hrf{text:simple-resolution}}

\textbf{\hrf{text:resolution}}

\subsection{Вопросы к лекции 1}
Представьте на языке логики предикатов следующие предложения русского языка:
\begin{enumerate}
\item Не все студенты любят математику и физику.
\item Только один студент любит историю.
\item Только один студент любит историю, и не любит электронику.
\item Любой охотник, не употребляющий дичь в пищу, вызывает удивление.
\item Известны женщины, которые любят мужчин, не являющихся охотниками.
\item Живет в городе охотник, который знаком со всеми мужчинами-охотниками этого города.
\item Никто не любит охотника, который убивает дичь ради развлечения.
\end{enumerate}

\subsection{Вопросы к лекции 2}
Представьте следующие условные предложения русского языка в виде правил логики предикатов:
\begin{enumerate}
\item Если вы любите детективы, то сегодня вечером можете посмотреть прекрасный фильтр из этой серии.
\item По утрам подают кофе и бутерброды с ветчиной.
\item Может быть я заскочу к вам вечером, если успею.
\item Я её одновременно люблю и ненавижу.
\end{enumerate}

\section{Неопределённость и нечёткие множества}
«По мере увеличения сложности системы наша способность делать точные и все еще значимые суждения о ее поведении все время ослабевает, и после некоторого порога точность и значимость становятся вообще взаимоисключающими.» Лотфи Заде.
\subsection{Сложность и точность}
Какую среду или окружающий мир человек называет сложными? 

Интуитивно сложность среды ощущается человеком как неспособность понять точно ее структуру, выделить отдельные ее составляющие и их взаимосвязи, описать происходящие в среде явления и события. Всё это приводит к неопределенности, двусмысленности, неоднозначности, запутанности знаний о подобной среде. \textit{Большинство проблем}, с которыми сталкивается человечество в современном мире, с указанной точки зрения являются сложными. 

Как, тем не менее, человечеству удается решать сложные задачи, в условиях, когда оно не способно и даже не может надеяться понять и однозначно описать во всех деталях процедуры решения подобных задач? Такие задачи человек решает \textbf{приближенно} и, что очень существенно, этого оказывается достаточно для многих приложений. 

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

\begin{figure}[H]
  \begin{tikzpicture}[domain=0.1:8]
    \draw[->] (-0.2,0) -- (8.2,0) node[anchor = north, pos = 0.5,] {Сложность среды};
    \draw[->] (0,-0.2) -- (0,4.2) node[anchor = south, rotate = 90, pos = 0.5] {Точность модели};
    \draw[thick, domain=0.3:1.7, color=blue] plot (\x,{(1/\x)+0.3}) node[anchor = south, text width = 3cm, above = 80] {Чёткие\\ математические\\ модели};
    \draw[thick, domain=1.3:5, color=black] plot (\x,{(5/\x)-0.5}) node[anchor = south, text width = 3cm, above = 80] {Чёткие\\ имитационные\\ модели};
    \draw[thick, domain=3:8, color=red] plot (\x,{(10/\x)-0.8}) node[anchor = south, text width = 3cm, above = 10] {Нечёткие\\ модели};
  \end{tikzpicture}
  \caption{Отношение точности модели к сложности среды}
  \label{plot:accuracy-complexity}
\end{figure}

Рис. \hrf{plot:accuracy-complexity} иллюстрирует эту взаимосвязь сложности среды и точности вычислительных моделей.

Для сред с небольшой сложностью и, следовательно, маленькой неопределенностью могут быть использованы четкие математические модели на основе использования систем математических уравнений различного типа, обеспечивающие точное описание свойств среды. Для систем, которые несколько более сложны и для которых существует достаточное количество численных экспериментальных данных, могут быть использованы четкие имитационные модели. Например, это могут быть, нейросети, которые являются довольно мощным средством моделирования сред, позволяющим уменьшить неопределенность знаний об изучаемой среде. Для сложных сред, для которых мал\'{о} числовых данных, а доступна только не очень достоверная информация, нечеткие модели открывают путь для представления сред, позволяя приближённо моделировать поведение среды (интерполировать отношения между воздействиями на среду и ее ответными реакциями). 

Все модели, используемые для представления сред, являются математическими абстракциями. При выборе моделей важно использовать наиболее подходящую. Для сред, допускающих точное описание, нечеткие модели менее эффективны, чем четкие, обеспечивающие однозначный алгоритм моделирования и позволяющие лучше понять поведение среды. Нечеткие модели хороши для изучения сред, информация о поведении которых содержит неопределенности и неоднозначности. В 1965 году появилась основополагающая статья Л.Заде, посвященная нечетким множествам и вызвавшая во всем мире большое количество теоретических и прикладных работ на эту тему. Начиная с 1970 года,  нечеткие подходы стали внедряться в промышленность. Особенно в этом преуспела Япония. Теоретической основой для этого послужила развитая за это время нечеткая логика. 

\textbf{Нечеткая логика}, как теоретическая основа, стала использоваться во многих приложениях, например:
\begin{itemize}
\item В видеографии (Fisher, Sanyo) для фокусировки и стабилизации видеоизображений. 
\item Для управления температурой воздуха кондиционеров (Mitsubishi) в соответствии с предпочтениями потребителей.
\item Для управления режимами стиральных машин (Mitsubishi) в соответствии с нечёткими сигналами датчиков состояния стираемого белья. Датчики определяют цвет и вид белья, степень загрязнения. Нечёткий микропроцессор на основании показаний этих датчиков из 600 вариантов выбирает один наиболее подходящий, имеющий соответствующую температуру воды, количество моющих средств, время стирки и скорость вращения барабана. 
\item В Японии в городе Сендай для управления движением поездами подземки использовался нечеткий компьютер. В результате количество ошибок при выборе режимов управления и торможения сократилось на 70\%.
\item Для управления автомобилем (Nissan) ввела нечёткую автоматическую коробку и нечёткую антиблокировочную систему в один из недавних автомобилей представительского класса.
\item В Японии имеются нечеткие диагностические системы для гольфа, вакуумной чистки, машин приготовления риса, тостеров и многих других систем управления изделиями промышленности.
\end{itemize}

Почему подход, развитый в США для моделирования неопределенности в больших сложных системах, нашел огромное количество применений в сравнительно простых изделиях промышленности азиатских стран, таких как Япония? 

Одно из объяснений следующее: предпринимательский менталитет японцев таков, что они доводят любые исследовательские результаты до коммерческой реализации гораздо быстрее, чем другие нации. Кроме того, западная культура тяготеет к Аристотелевской логике черно-белого двоичного мира, который не склонен признавать его серые или нечеткие оттенки, которые столь естественны для Востока. 

Термин «нечеткий» (fuzzy) в англоязычном мире несет скрытый негативный смысл, которого нет в азиатской культуре. Например, выражение «нечеткая фокусировка для новых камер, стабилизирующая изображение» вызывает у рядового западного покупателя ощущение некой их ущербности, поскольку интуитивно интерпретируется как недостаток: фокусировка изображения будет нечеткой.

\subsection{Случайность и нечёткость}
Теория нечетких множеств предлагает аппарат для представления неопределенности. Теория вероятностей, еще до появления нечетких множеств, также была развита для представления неопределенности с помощью вероятностных математических моделей. Из-за этого долгое время предполагалось, что единственным источником неопределенности является случайность. Для описания случайных неопределенностей в теории вероятностей важную роль играет случайный процесс, в котором любое событие является случайным. Предсказание этих событий невозможно. Что возможно в случайном процессе, так это точное описание распределения вероятностей событий, наблюдаемых долгое время.

Однако не все неопределенности случайны. Некоторые виды неопределенностей не случайны и, следовательно, не могут моделироваться с помощью теории вероятностей. Фактически, и это достаточно легко показать, неопределенность событий подавляющего большинства сложных сред не является случайной. Теория нечетких множеств как раз является чрезвычайно адекватным аппаратом для моделирования сред с неслучайной неопределенностью. В то же время, у тех, кто не глубоко задумывался над этой проблемой, часто бытует мнение, что теория нечетких множеств – это замаскированная форма теории вероятностей. \textbf{Это не верно.} Базовый статистический анализ основан на теории вероятностей (случайных процессах). Один из классов случайных процессов, а именно стационарные случайные процессы, имеет следующие особенности: 
\begin{enumerate}
\item они описывают простую среду, в которой процессы не могут изменяться от одного эксперимента к другому; 
\item вероятность событий в среде является постоянной и не может изменяться от одного эксперимента к другому; 
\item исходы событий должны повторяться от эксперимента к эксперименту. 
\item исходы одних событий не влияют на исходы предыдущих или последующих.
\item события характеризуются частотой появления, которая может быть измерена. 
\end{enumerate}

Примером стационарных случайных процессов являются задачи извлечения разноцветных шаров из урны, бросание монет или костей, многие карточные игры. Много ли процессов принятия решений, с которыми человек сталкивается каждый день, могут быть отнесены к случайным процессам подобного типа? Как, например, выразить в виде случайного процесса неопределенность, связанную с прогнозом погоды? Как выразить теми же средствами неопределенность в выборе одежды на следующий день, выборе автомобиля при покупке, предпочтение в выборе цветов для любимой, риск заболеть раком в ближайшие годы и т.п.?

В принципе моделирование всех этих видов неопределенности можно осуществить с помощью различных классов случайных процессов, однако такой подход вряд ли заслуживает доверия. Моделирование таких форм неопределенности с помощью нечеткой логики также следует осуществлять с осторожностью. Прежде необходимо тщательно изучить характер неопределенности, а только затем выбрать подходящий метод для моделирования. Многие параметры каждой задачи, которые изменяются во времени и пространстве, должны быть изучены, прежде, чем переходить к моделированию.

В человеческом сообществе общепринятым способом передачи информации является естественный язык. \textbf{Естественный язык} является мощным средством коммуникации и обмена информацией между людьми и люди, несмотря на неопределенность и неточность языка, не испытывают больших трудностей в общении. Например, что означает на естественном языке выражение «высокий человек»? Высоким может считаться как человек, имеющий рост 1м 80см, так и человек, имеющий рост 1м 90см. Какое из этих значений вкладывает каждый говорящий в понятие «высокий человек» зависит от его точки зрения. Остается удивительным, что, несмотря на различное толкование понятия «высокий» двумя говорящими, понимание и речевое общение между ними \textit{возможны}, поскольку в процессе речевого общения они не требуют идентичного толкования значения термина «высокий».

Базисом для формализации подобной неопределенности естественного языка служит теория нечетких множеств и основанная на них нечеткая логика. При этом следует понимать, что нечеткая логика будет полезной в двух случаях: 
\begin{enumerate}
\item для моделирования сложных сред, изученность поведения которых весьма ограничена; 
\item для моделирования сред, в которых человеческие рассуждения, восприятия и принятия решений являются важной составляющей.
\end{enumerate}

Модели сред, являющиеся системами линейных уравнений, улучшить с помощью использования нечеткой логики невозможно. Нечеткая логика не является средством решения всех проблем. Однако ее роль и значение не следует приуменьшать. Многими примерами в дальнейшем будет показана польза и оправданность ее применения. Понимание многих физических сред и процессов, где нечеткая логика особенно удачно работает, в значительной степени базируется на неточных человеческих суждениях. 

\subsection{Неопределённость}
\begin{figure}[H]
  \centering
  \begin{tikzpicture}
    \draw[ultra thick] (0,0) circle [radius=5];
    \draw[thick] (0,-5)--(0,5) (0,0)--(45:5) (0,0)--(75:5);
    \draw[] node at (-3,0) {Неопределённая};
    \draw[] node at (3,-2) {Нечёткая};
    \draw[] node[rotate=60] at (1.6,2.8) {Случайная};
    \draw[] node[rotate=83] at (0.45,3.4) {Определённая};
  \end{tikzpicture}
  \caption{Структура информации при решении сложных задач}
  \label{plot:info-structure}
\end{figure}
Рис. \hrf{plot:info-structure} характеризует структуру информации, требуемой при решении сложных задач. Круг на этом рисунке очерчивает всю информацию о среде или мире, с которой мы имеем дело при решении каких-либо проблем. Как видно из рисунка, только небольшая часть этой информации является определенной или детерминированной. Но в подавляющем большинстве случаев при преподавании в университетах технических дисциплин исходят из предположения, что используемые для решения тех или иных задач модели носят детерминированный характер.

Моделируемые процессы или объекты упрощаются до уровня, который позволяет сформулировать четкий алгоритм решения на основе использования уравнений или формул. Учась в университете, студенты постепенно забывают большинство из этих формул и опасаются, что это помешает им достойно войти в окружающий мир. И только после окончания университета, столкнувшись с решением реальных задач, многие из них осознают, что в определенной степени в университете они были введены в заблуждение. Ни в одной из задач, с которыми приходится сталкиваться, информация не является полностью известной, она полна неопределенностей, неточностей, случайностей, двусмысленностей. Источники неопределенности различны: сложность среды, недостаток знаний о среде, неточность измерений и т.п. например:
\begin{itemize}
\item «положить немного лука»,  
\item «бросить щепотку соли»,  
\item «добавить небольшое количество растительного масла»,
\item «обжарить до золотистого цвета» и т.п. 
\end{itemize}
Ни одна из этих рекомендаций не является точной или случайной. Тем не менее, человек способен на основе этих рекомендаций приготовить вполне сносное блюдо, хотя и может его, например, пересолить, если его представление о том, что такое «немного лука» и «щепотка соли» ошибочны. 

\subsection{Принадлежность множеству и нечёткие множества}
В своей основополагающей статье Л.Заде впервые высказал идею, что для математического представления неслучайной неопределенности, которая особенно характерна при описании мира на естественных языках, может быть использована характеристика принадлежности элемента множеству. Например, если в поваренной книге речь идёт о щепотке соли, то на самом деле речь идет о множестве $\text{Щ}=\{\text{щ}_1, \text{щ}_2, ..., \text{щ}_n\}$ таких щепоток: от самой большой у крупного повара большого ресторана до самой маленькой у миниатюрной хозяйки дома. Объединение всех этих щепоток, пусть, например, их будет 10, образует некоторое более или менее известное читателю поваренной книги множество $\text{Щ}=\{\text{щ}_1, \text{щ}_2, ..., \text{щ}_{10}\}$. Каждая щепотка щ\ts{i} является элементом множества. Если считать, что все щепотки равнозначны для приготовления наилучшего блюда, то может быть использована любая из них. Эта равнозначность может быть выражена одним и тем же характеристическим значением, например, числом 1, интерпретируемым как равнозначность всех щепоток щ\ts{i} множества Щ, допустимых для использования. 

Это число называется \textbf{степенью принадлежности} щепоток множеству Щ. Если все степени принадлежности одинаковы, то никакой неопределенности, какую из щепоток следует использовать, нет. Использовать можно любую. Но если щепотки неравнозначны, то, как выразить, какие из них являются наилучшими, исключающими пересол или недосол, какие наихудшими, использование которых не рекомендуется, а какие могут быть использованы, но лучше этого не делать?

В этом случае тем щепоткам, которые не являются наилучшими, степени принадлежности можно выбрать меньшими 1. И считать, что чем сильней они отличаются от наилучшей, тем меньше должно быть значение степени принадлежности. В этом случае значение степени принадлежности позволяет \textbf{математически охарактеризовать неопределенность}, содержащуюся в рекомендациях поваренной книги. Для этого, конечно, нужно знать множество Щ и уметь задавать значение степени принадлежности для щепоток этого множества. Именно эту идею выражения неопределенности и развил Л.Заде в своих основополагающих работах, основываясь на рассмотренной степени принадлежности множеству. 

Рассмотрим наиболее важные из понятий, используемых для представления неслучайной неопределенности.
\begin{frm}
  \textbf{Универсумом X} в математике обычно называют совокупность объектов, рассматриваемых в той или иной теории и имеющих одинаковые характеристики. Отдельный объект универсума обозначают x и называют также элементом.
\end{frm}

Число объектов универсума называют \textbf{мощностью универсума} и обозначают чаще всего как \code{|X|}. Часть элементов универсума называют множеством или подмножеством универсума. В крайнем случае, подмножество универсума может совпадать со всем универсумом. Множества подразделяются на \textbf{четкие} (или классические) и \textbf{нечеткие}. В теории четких множеств любой элемент универсума либо принадлежит, либо не принадлежит какому-либо множеству или подмножеству универсума. Для обозначения факта принадлежности элемента x универсуму X или подмножеству A используют знак $\in$ и выражения «элемент x принадлежит универсуму X» или «элемент x  принадлежит множеству A» записывают, соответственно как 
\[x \in X,\]
\[x \in A.\]

Если элемент x не принадлежит множеству A, то это записывают как $x \notin A$. Для четких множеств A, B и универсума X используют также следующие обозначения:
\begin{itemize}
\item $A \subset B$, если множество A является подмножеством множества B, но не совпадает с ним,
\item $A \subseteq B$, если множество A является подмножеством множества B или совпадает с ним,
\item $A \not\subset B$, если множество не A является подмножеством множества B и не совпадает с ним.
\item $A = B$, если множество A совпадает с множеством B,
\item $A \neq B$, если множество A не совпадает с множеством B.
\end{itemize}

Над четкими множествами могут совершаться различные операции, основными из которых являются следующие:
\begin{itemize}
\item Объединение: $A \cup B = \{x| x \in A или x \in B\}$,
\item Пересечение: $A \cap B = \{x| x \in A и x \in B\}$,
\item Дополнение: $\neg A = \{x| x \notin A и x \in X\}$,
\item Вычитание: $A | B = \{x| x \in A и x \notin B\}$.
\end{itemize}
Четкие множества удобно характеризовать так называемой характеристической функцией, суть которой состоит в следующем: отложим по оси абсцисс в некотором порядке все элементы какого-либо универсума. Для простоты пусть это будут целые числа, начиная с 0. Выделим в этом универсуме какое-либо подмножество чисел, например А = \{3, 4, 5\}. Значение характеристической функции для этого множества будет иметь следующий вид:
\begin{equation}
  \chi_A(x) = \begin{cases}\frac{1, x \in A}{0, x \notin A}\end{cases}
  \label{eq:characteristical-function}
\end{equation}
Таким образом, для четкого множества характеристическая функция равна 1, если элемент принадлежит множеству, и равна 0 в противном случае. Значением характеристической функции фактически является степень принадлежности элементов универсума. 

Зная характеристические функции четких множеств A, B легко вычислить характеристические функции множеств,  получаемых в результате применения к этим множествам перечисленных выше операций, т.е.
\begin{itemize}
\item если $C = A \cup B$, то $\chi_C(x) = max\{\chi_A(x), \chi_B(x)\}$,
\item если $C = A \cap B$, то $\chi_C(x) = min\{\chi_A(x), \chi_B(x)\}$,
\item если $C = \neg A$, то $\chi_C(x) = 1 - \chi_A(x)$.
\end{itemize}
Для случая, когда  множество A  содержится в множестве B, имеет место
\begin{itemize}
\item если $A \subseteq B$, то $\chi_A(x) \leq \chi_B(x)$.
\end{itemize}

Выражение $A \supset B$ в теоретико-множественном смысле задает отношение между множествами A и B, которое может использоваться для суждений. Суждение делается на основе вычисления характеристического значения $\chi_{A \supset В}(x)$ множества $A \supset B$. Выражение $A \supset B$  рассматривается с одной стороны как множество, а с другой, как импликативная формула. Характеристическая функция множества $A \supset B$, как результат  применения операции следования $\supset$ вычисляется по формуле (\hrf{eq:applying}).
\begin{equation}
  \chi_{A \supset B}(x) = \begin{cases}\frac{1, \text{ если } x \in A, x \in B}{0, \text{ если } x \notin B}\end{cases}
  \label{eq:applying}
\end{equation}

Для нечеткого множества принадлежность или непринадлежность ему элементов не является столь определенной, как для четких. Эта принадлежность определяется  характеристической функцией, называемой \textbf{функцией принадлежности}. Нечеткое множество A – это, по существу, всегда функция, обозначаемая $\mu_A(u)$. Она задает в явном виде отображение некоторого универсума U на отрезок [0,1]: $\mu_A(u): U \to [0, 1]$.

Функций принадлежности для одного и того же универсума может быть сколько угодно. И каждая из них задает свое нечеткое множество А. Иногда, для того чтобы подчеркнуть, что это не простое множество, а нечеткое, оно подчеркивается «тильдой». Мы этого делать не будем. Функция принадлежности определяет степень принадлежности множества элементов универсума множеству A. Часто, нечеткое множество задается в виде конечного упорядоченного множества пар (\hrf{eq:defined-pairs}):
\begin{equation}
  A=\{<\mu_A(u)/u>\}
  \label{eq:defined-pairs}
\end{equation}
Любое четкое множество \textit{можно рассматривать} как частный случай нечеткого. 

\subsection{Отличия случайной и нечёткой неопределённостей}
Предположим, что в семье должен родиться ребенок, и в поликлинике на основании многолетних наблюдений сказали, что у всех отцов, живущих в данной местности схожий генотип, и поэтому с вероятностью 95\% рождаются  мальчики. Это вероятностная оценка будущего события - рождения ребенка, основанная на случайности (из 1000 случаев или событий рождения детей у отцов, живущих в данной местности, в 950 случаях рождался мальчик, а в 50 – девочка). 

Если отец страстно ожидает мальчика, то риск иметь девочку в зависимости от слепого случая составляет 5\%. Информация, содержащаяся в такой вероятностной оценке, основанной на случайности, особенно если с этой оценкой связано какое-то важное последующее событие, например, наследование большого состояния, если это будет мальчик, содержит для отца слишком высокий риск.

В другом случае отцу было сказано, что по результатам научных исследований у отцов, генотип которых принадлежит множеству из 100 схожих генотипов отцов, функция принадлежности отцов с генотипом  $i \in \{1,2,..., 95\}$, характеризующая принадлежность рожденного к мальчикам равна 1, а к девочкам равна 0, а с генотипом $j\in\{96,..., 100\}$ функция принадлежности, характеризующая принадлежность рожденного к мальчикам равна 0 , а к девочкам равна 1.

И еще отцу было сказано, что его генотип принадлежит множеству $\{1,2,..., 95\}$. Это нечеткая оценка будущего события рождения ребенка. Она гораздо более информативна для отца, поскольку основана не на случайных событиях, не на воле случая, а на накопленных неслучайных исследованиях и анализе его генотипа, свидетельствующих, что функция принадлежности будущего ребенка к категории мальчиков составляет 1. Это не исключает ошибки в анализе генотипа или ошибки в получении функции принадлежности.

Другой пример, аналогичный изложенному. 
На стол поставили два стакана с прозрачными жидкостями, взяв их из 100 стаканов с прозрачными жидкостями. В одном  стакане с жидкостью находится чистая вода, в другом – яд. Имеется две оценки ситуации.
\begin{enumerate}
\item Одна основана на случайности: вероятность того, что в первом стакане содержится чистая вода, равна 95\%.
\item Другая основана на принадлежности множеству: функция принадлежности к стаканам с чистой водой первых 95 стаканов из множества всех 100 стаканов равна 1, а остальных – 0. 
\end{enumerate}
Какая разница между этими двумя оценками неопределенности?

Предположим, что можно наугад попробовать жидкость в первом стакане. 
После этой пробы, вероятность того, что в стакане чистая вода, станет равной 100\% или 0\%. Во втором случае степень принадлежности какой была такой и останется. Точно также и с оценкой рождаемости. Если провести томографическое исследование роженицы, которое покажет, что будущий ребенок – это мальчик, то вероятность рождения мальчика станет 100\%, а если томография покажет, что это девочка, то вероятность рождения мальчика станет равно 0\%, а девочки 100\%. Степень же принадлежности будущего ребенка к категории мальчиков в зависимости от генотипа какой была такой и останется.

Два приведенных примера ясно иллюстрируют разницу между нечеткой и случайной представлениями неопределенности. Нечеткость описывает \textbf{неоднозначность принадлежности} каждого элемента множеству. Случайность описывает \textbf{неоднозначность события} появления каждого элемента множества. Для того, чтобы можно было описывать и вычислять неопределенность неслучайных сред необходимо уметь задавать функции принадлежности. 

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

\subsection{Нечёткие множества геометрических фигур}
Рассмотрим три геометрические фигуры: диск, цилиндр и стержень (рис. справа). 
Различие между этими тремя фигурами зависит от отношения $d / h$ диаметра d к высоте h.
\begin{multicols}{2}
\begin{itemize}
\item При $d / h \ll 1$ форма фигуры стремится к стержню. 
\item При $d / h \to 0$ достигает прямой линии. 
\item При $d / h \gg 1$ фигура стремится к форме плоского эллипса. 
\item При $d / h \to \infty$ становится круговым цилиндром.
\end{itemize}
\columnbreak
\begin{tikzpicture}[shape aspect=1]
\node (A) [cylinder, shape border rotate=90, draw, minimum height=1cm,minimum width=3cm] at (0,0) {A};
\node (B) [cylinder, shape border rotate=90, draw, minimum height=3cm,minimum width=2cm] at (3,0) {B};
\node (C) [cylinder, shape border rotate=90, draw, minimum height=4cm,minimum width=3mm] at (5,0) {C};
\end{tikzpicture}
\end{multicols}
Геометрическая фигура на рис. \hrf{pic:undef-ellipse} является эллипсом с параметрами a и b. Из геометрии известно:
\begin{itemize}
\item при $a / b = 1$ эллипс превращается в окружность,  
\item при $a / b \ll 1$ и $a / b \gg 1$ является эллипсом, 
\item при $a / b \to\infty$ превращается в отрезок. 
\end{itemize}
Используя эти знания, можем задать функцию принадлежности на универсуме
\[\{0,..., a / b\}.\]

Этой функцией может быть, например кривая Гаусса (Гауссиан), уравнением которой является следующее 

\[\mu(a / b) = exp\{-3 [(a / b) -1] 2\}.\] 

В графическом виде Гауссиан показан на рис. \hrf{pic:undef-gaussian}.

\begin{figure}[H]
  \centering
  \begin{subfigure}[b]{0.4\textwidth}
    \centering
    \begin{tikzpicture}
      \draw[<->] (-2,0) -- (2,0) node[right] {a};
      \draw[<->] (0,-1) -- (0,1) node[above] {b};
      \draw[thick] (0,0) ellipse [x radius=2, y radius=1];
    \end{tikzpicture}
    \caption{Эллипс}
    \label{pic:undef-ellipse}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.4\textwidth}
    \centering
    \begin{tikzpicture}
      \draw[->] (-0.2,0) -- (3.2,0) node[right] {$a/b$};
      \draw[->] (0,-1.2) -- (0,2.2) node[above] {$\mu(a/b)$};
      \draw[domain=1.2:2.8] plot (\x,{(sin(\x * 225)) + 1});
      \end{tikzpicture}

    \caption{Гауссиан}
    \label{pic:undef-gaussian}
  \end{subfigure}
  \caption{Пример нечёткого множества в геометрии}
  \label{pic:undefined-geometry}
\end{figure}

Носителем Support(A) нечеткого множества A называется такое его подмножество, на всех элементах u которого функция принадлежности имеет значение, большее 0, т.е: 
\[Support(A) = \{u \in U|\mu_A(u)>0\}\]

Ядром нечеткого множества A называется его подмножество
\[A = \{u \in U|\mu_A(u) = 1\}\]

Нечеткое множество A называется \textbf{нормальным}, если во множестве A существует хотя бы один элемент, функция принадлежности которого равна 1. В противном случае нечеткое множество является аномальным. Для нечетких множеств на упорядоченных универсумах вводится понятие \textbf{выпуклости}. Нечеткое множество A называется выпуклым, если его функция принадлежности выпукла, т.е. для любых трех упорядоченных точек  справедливо:
\[u_1 \leq u_2 \leq u_3 \supset \mu_A(u_2) \geq min [\mu_A(u_1),\mu_A(u_3)]\]

\subsection{Некоторые свойства нечётких множеств}
Для ряда задач, использующих совокупности нечетких множеств, заданных на одном универсуме, функции принадлежности должны обладать определенными свойствами. Необходимость удовлетворения этим свойствам вытекает не из каких-либо строгих доказательств, а из интуитивных соображений, связанных с интерпретацией человеком нечетких множеств как совокупностей объектов какого-либо универсума и рассмотрением функций принадлежности как оценки степени принадлежности этих объектов тому или иному подмножеству этого универсума.
\begin{itemize}
\item \textbf{Нечеткое множество должно быть нормальным и выпуклым.} Это объясняется тем, что для человеческого мышления естественно сопоставлять каждому нечеткому подмножеству объектов универсума, (например, значений температуры, давления, веса и т.п), некоторый интервал, упорядоченный таким образом, что в центре его находится значение (объект), принадлежность которого данному интервалу оценивается как наибольшая (функция принадлежности равна 1), а на краях – как наименьшая (функция принадлежности равна или близка к 0). Между этими объектами должны находится такие, принадлежность которых нечеткому множеству либо постепенно увеличивается (от краев к центру), либо уменьшается (от центра к краям) без скачков и провалов.
\item \textbf{Множества должны быть упорядочены} таким образом, чтобы для любых двух нечетких множеств $C_i$, $C_{i+1}$ имело место пересечение
\[ Support(C_i) \cap Support(C_{i+1}) \neq \varnothing \]
но такое, чтобы ядра этих множеств не пересекались
\[ \mathring{C_i} \cap \mathring{C}_{i+1} = \varnothing \] 
 
Это объясняется тем, что нечеткие множества предназначены для приближенного неоднозначного представления (описания) сред. Пересекаемость является как раз средством задания этой неоднозначности.
\item Универсум должен иметь верхнюю и нижнюю границы
\[\exists x_1, x_1 = inf U; \exists x_2, x_2 = \sup U\]
и эти величины должны принадлежать ядрам крайних нечетких множеств $C_1$, $C_n$ 
\[\mu_{C_1}(x_1) = 1, \mu_{C_n}(x_2) = 1\]
Такое требование к универсуму и крайним нечетким множествам объясняется тем, что в противном случае формирование нечетких множеств не может считаться законченным. Так,  например, если нечеткое множество $C_n$ является крайним справа, но не существует границы $x_2$ такой, что
\[\mu_{C_n}(x_2) = 1\]
то это наводит на мысль, что $x_2$ должно принадлежать не только множеству $C_n$, но и ещё какому-то справа. Но $C_n$ является крайним справа, а это значит, что такое множество нельзя добавить. 
\end{itemize}

\textbf{Дополнение}
Дополнение, обозначаемое знаком $\neg$. В результате этой операции по исходному нечеткому множеству $R \alpha$  получается новое нечеткое множество $\neg R \alpha$ .

\[R'_\alpha = \neg R_\alpha = \bigcup_{x\in U} 1 - \mu_{R_\alpha} (x) / x\]
\begin{figure}[H]
  \centering
  \includegraphics[height=4cm]{04-addition.png}
  \caption{Пример применения операции дополнения}
  \label{pic:addition-example}
\end{figure}
На рис. \hrf{pic:addition-example} справа представлен пример применения операции дополнения. На этом рисунке с помощью выносных линий показаны функции принадлежности и нечеткие множества, в которые они входят.

\textbf{Объединение и пересечение}
\begin{figure}[H]
  \centering
  \includegraphics[height=4cm]{04-addition2.png}
  \caption{Пример применения операции объединения и пересечения}
  \label{pic:union-example}
\end{figure}
Объединение,  обозначаемое знаком $\bigcup$:
\[R_\alpha \bigcup R_\beta = \bigcup_{x\in U} max (\mu_{R_\alpha} (x), \mu_{R_\beta} (x)) / (x) \]

Пересечение, обозначаемое знаком $\bigcap$. 
\[R_\alpha \bigcap R_\beta = \bigcap_{x\in U} min (\mu_{R_\alpha} (x), \mu_{R_\beta} (x)) / (x) \]

\textbf{Следование}
\begin{figure}[H]
  \centering
  \includegraphics[height=4cm]{04-follow.png}
  \caption{Пример применения операции следования}
  \label{pic:follow-example}
\end{figure}
Следование, обозначаемое знаком $\supset$. (в строгой обозначает принадлежность)
\[ (R_\alpha \supset R_\beta)  = \{\mu_{R_\gamma}(x)/x \}, \]
где
\begin{equation*}
 \mu_{R_\gamma}(x) = \begin{cases}
    1, \mu_{R_\alpha}(x) \leq \mu_{R_\beta}(x)\\
    \mu_{R_\beta}(x), \mu_{R_\alpha}(x) > \mu_{R_\beta} (x)
  \end{cases}
\end{equation*}

Следующие законы, называемые также нечеткими законами, являются общими для четких и нечетких множеств.
\begin{itemize}
\item Коммутативности:
  \begin{equation*}
    \begin{gathered}
      A \cup B = B \cup A,\\
      A \cap B = B \cap A.
    \end{gathered}
  \end{equation*}
\item Ассоциативности:
  \begin{equation*}
    \begin{gathered}
      A \cup (B \cup C) = (A \cup B) \cup C,\\
      A \cap (B \cap C) = (A \cap B) \cap C.
    \end{gathered}
  \end{equation*}
\item Дистрибутивности:
  \begin{equation*}
    \begin{gathered}
      A \cup (B \cap C) = (A \cup B) \cap (A \cup C),\\
      A \cap (B \cup C) = (A \cap B) \cap (A \cap C).
    \end{gathered}
  \end{equation*}
\item Идемпотентности:
  \begin{equation*}
    \begin{gathered}
      A \cup A = A,\\
      A \cap A = A.
    \end{gathered}
  \end{equation*}
\item Идентичности:
  \begin{equation*}
    \begin{gathered}
      A \cup \oslash = A,\\
      A \cap U = A,\\
      A \cup \oslash = \oslash,\\
      A \cup U = U.
      \end{gathered}
  \end{equation*}
\item Транзитивности: если $A \subseteq B \land B \subseteq C$, то $  A \subseteq C$.
\item Инволюции: $\neg\neg A = A$,
\item Де Моргана:
  \begin{equation*}
    \begin{gathered}
      \neg (A \cup B) = \neg A \cap \neg B,\\
      \neg (A \cap B) = \neg A \cup \neg B
    \end{gathered}
  \end{equation*}
\end{itemize}

Два закона, справедливые для четких множеств, не выполняются для нечетких, – это законы исключенного третьего и  противоречия. Для четких множеств эти законы выглядят следующим образом.
\begin{itemize}
\item Исключенного третьего: $A \cup \neg A = U$,
\item Противоречия: $A \cap \neg A = \oslash$.
\end{itemize}

Для нечетких множеств они выглядят иначе:
\begin{itemize}
\item Исключенного третьего: $A \cup \neg A \neq U$,
\item Противоречия: $A \cap \neg A \neq \oslash$.
\end{itemize}

\subsection{Пример}
\textbf{Нечёткая среда:} Стальной шарик, находится на плоской горизонтальной площадке, имеющей квадратную форму. На этой площадке проделана канавка так, как показано на рисунке \hrf{pic:uncertain}. Мы хотим смоделировать эту систему в терминах понятных человеческой речи и получить какие-то новые знания.
\begin{figure}[h]
  \centering
  \begin{tikzpicture}
    \draw [->] (0, -2) -- (0, 2) node [right] {Y};
    \draw [->] (-2, 0) -- (2, 0) node [right] {X};
    \draw (-1, 1) rectangle (1, -1);
    \draw (-1, 0.9) -- (0.9, -1);
    \draw (-0.9, 1) -- (1, -0.9);    
  \end{tikzpicture}
  \caption{Визуализация нечёткой среды}
  \label{pic:uncertain}
\end{figure}

Шарик может перемещаться только вдоль этой канавки. Его координаты определяются положением его центра. Расположение шарика на плоскости характеризуется двумя лингвистическими переменными:
\begin{equation*}
  \begin{gathered}
    <X, \theta_Б(X), U, G, M>,\\
    <Y, \theta_Б(Y), V, G, M>. 
  \end{gathered}
\end{equation*}
где:

\begin{itemize}
\item [] X и Y - координаты шарика;
\item [] $\theta_Б(X)$ = $\theta_Б(Y)$ = \{Слева, В-центре, Справа\} - базовые терм-множества;
\item [] $U = V = [-1, 1]$ - универсумы координат $X$ и $Y$; 
\item [] $G, M$ - синтаксическое и семантическое правила. 
\item [] Базовые терм-множества лингвистических переменных $X$ и $Y$ совпадают. 
\end{itemize}
Универсумами $X$ и $Y$ являются два отрезка действительной прямой: $[-1, 1]$, а область рассуждений представляет собой их декартово произведение: $[-1, 1] \times [-1, 1]$.
\begin{figure}[h]
  \centering
  \includegraphics[height=4cm]{04-ball-location.png}
  \caption{Графики функций принадлежности}
  \label{pic:submissions}
\end{figure}

\begin{itemize}
\item Лингвистические значения: Слева, В-центре, Справа,
\item Нечеткие множества: M(Слева), M(В-центре), M(Справа), 
\item Универсумы: $[-1, 1]$,
\item Функции принадлежности: $\mu_L, \mu_C, \mu_R$ 
\end{itemize}

Имеем следующие аксиомы, выражающие свойства расположения шарика.
\begin{itemize}
\item (X = Слева $\supset$ Y = Справа)
\item (X = В-центре $\supset$ Y = В-центре)
\item (X = Справа $\supset$ Y = Слева) 
\item (Возможно-50 X = В-центре $\land$ Возможно-50 X = Справа).
\end{itemize}

Требуется установить расположение шарика. Заметим, что лингвистическое значение координаты X уже задано. Необходимо найти значения координаты Y. Для этого  необходимо найти нечеткое множество S(Y), исходя из имеющихся аксиом.

Лингвистическая переменная X:
\begin{equation*}
  \begin{gathered}
    \{\\
    X,\\
    \theta_б(X) = \{ \text{Слева, В-центре, Справа} \},\\
    U_х = [ -1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1],\\
    G_х = \oslash,\\
    M_х = \{M_х(\text{Слева}), M_х(\text{В-центре}), M_х(\text{Справа})\\
    \}
  \end{gathered}
\end{equation*}

Лингвистическая переменная Y:
\begin{equation*}
  \begin{gathered}
    \{\\
    Y,\\
    \theta_б(Y) = \{ \text{Слева, В-центре, Справа} \},\\
    U_y = [ -1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1],\\
    G_y = \oslash,\\
    M_y = \{M_y(\text{Слева}), M_y(\text{В-центре}), M_y(\text{Справа})\\
    \}
  \end{gathered}
\end{equation*}

\section{Нечёткие исчисления}
Связь нечетких множеств с естественным языком устанавливается с помощью понятия лингвистической переменной, которая характеризуется пятеркой:
\[< X, \theta(X), U, G, M>.\]
Здесь
\begin{itemize}
\item [] $X$ - название лингвистической переменной; 
\item [] $\theta(X)$ - множество лингвистических значений переменной X, каждое из которых представляет собой слово или выражение естественного языка. 
\item [] $\theta(X)$ - базовое множество лингвистических значений. Оно считается заданным, а остальные лингвистические значения (имена) порождаются синтаксическими правилами G. 
\item [] Каждому лингвистическому значению ставится в соответствие нечеткое множество, заданное, на универсуме U. 
\item [] Лингвистическое значение представляется словом естественного языка (именем лингвистического значения), а соответствующее нечеткое множество выражает его смысл. 
\item [] Соответствие между лингвистическим значением из множества и каким-либо нечетким множеством задается с помощью отображения M, называемого также семантическими правилами. 
\end{itemize}

Введенные понятия лингвистической переменной позволяют ввести исчисление, значениями формул которого будут не ИСТИНА или ЛОЖЬ, а нечеткие множества. Сами формулы при этом становятся лингвистическими формулами, а исчисление называется нечетким исчислением. Интерпретация лингвистических формул осуществляется теперь на нечеткой среде и состоит в установлении соответствия между лингвистическими значениями и атрибутами термов, между нечеткими формулами и атрибутами нечетких схем отношений. Значениями формул теперь являются нечеткие множества. Моделью лингвистической формулы теперь является такая нечеткая среда, интерпретация в которой данной формулы позволяет вычислить по ней нечеткое множество с определенными свойствами, позволяющее характеризовать отношение, соответствующее этой формуле.

Нечеткое исчисление, как и любое другое включает: 
\begin{itemize}
\item язык, который будем называть нечетким языком (алфавит, синтаксис, семантика)
\item аксиомы,
\item правила вывода.
\end{itemize}

В различного рода экспертных и управляющих системах используется нечеткий ввод на основе знаний, формируемых в простейшем случае в виде совокупности нечетких правил вида:
\begin{equation*}
  \begin{gathered}
    \text{Если } x = a_1, \to y = b_1,\\
    \text{Если } x = a_2, \to y = b_2,\\
    ...\\
    \text{Если } x = a_n, \to y = b_n.\\
  \end{gathered}
\end{equation*}

где $a_i$ и $b_i$ —лингвистические значения лингвистической переменной соответственно x и y. В более сложном случае в посылке может стоять выражение, содержащее несколько термов, связанных операциями.

\subsection{Алгоритмы элементарного вывода. Алгоритм Mamdani}
 \includegraphics[width=11cm]{05-mamdani1.png}

 \includegraphics[width=11cm]{05-mamdani2.png}

 \includegraphics[width=11cm]{05-mamdani3.png}

 \includegraphics[width=11cm]{05-mamdani4.png}

\section{Представление пространственно-временн\'{ы}х нечётких знаний (06)}
\subsection{Введение}
Охранные, географические, игровые, бытовые, медицинские, транспортные и многие другие системы требуют развития  информационных технологий, которые позволяли бы анализировать сложные пространственно-временные ситуации. Эти технологии развиваются в искусственном интеллекте (ИИ), в частности, как системы, основанные на пространственно-временных представлениях знаний с использование нечетких отношений.

\textbf{Конечный автомат}
Следуя подходу, изложенному в работах Р.А. Брукса, это прстранственно-временн\'{о}е поведение объектов может быть представлено иерархией взаимосвязанных конечных автоматов. Если мы точно знаем, какое поведение  нас интересует, то принцип построения указанной совокупности автоматов состоит в следующем.

Начиная наблюдение за средой с момента времени $t_e$ и заканчивая моментом времени $t_s$ строим все интересующие нас автоматы, начиная с простейших. 

\begin{itemize}
\item Шкала времени $T = \{t | t \in N \} $
\item Временной интервал $[t_s,t_e] = \{t | t_s \leq t \leq t_e \} $
\item Объект $ \theta$
\item Значение признака 1-го уровня объекта (отсчёт) $y_{i_1} (\theta_t), i_1 = 1, ..., m_1 $
\item Тренд $Y[\theta_{t_s}, \theta_{t_e}] = Y \langle y(\theta_{t_s}), ..., y(\theta_{t_s})\rangle$
\item Поток трендов
  \begin{equation*}
    \begin{gathered}
Y_1 \langle y_1(\theta_{t_s}), ..., y_1(\theta_{t_s})\rangle,\\
Y_2 \langle y_2(\theta_{t_s}), ..., y_2(\theta_{t_s})\rangle,\\
...\\
Y_n \langle y_n(\theta_{t_s}), ..., y_n(\theta_{t_s})\rangle.
    \end{gathered}
  \end{equation*}
\item Макроотсчет $Y(\Theta_t) = Y\langle y_i(\theta_{t_s}), ..., y_i(\theta_{t_s})\rangle$
\item Макротренд $Y[\Theta_{t_s}, \Theta_{t_e}] = Y \langle y(\Theta_{t_s}), ..., y(\Theta_{t_s})\rangle$
\item Поток макротрендов
  \begin{equation*}
    \begin{gathered}
Y_1 [\Theta_{t_s}, \Theta_{t_e}],\\
Y_2 [\Theta_{t_s}, \Theta_{t_e}],\\
...\\
Y_n [\Theta_{t_s}, \Theta_{t_e}].
    \end{gathered}
  \end{equation*}
\end{itemize}

\subsection{Объекты, отрезки, признаки}
Предположим, есть два объекта, расположенные на плоскости в каком-то отношении друг к другу. Возможно описать взаиморасположение этих объектов формулами (предикатами первого порядка, фактами). и определить поведение этих объектов как в статике, так и в динамике.
\begin{multicols}{2}
\includegraphics[width=5cm]{06-obj-prop.png}
  \columnbreak
\begin{equation*}
  \begin{gathered}
    \Theta = \{ \theta_t^1, \theta_t^2 \}\\
    y_{11}(\theta_t^1) = x_{\theta(t)}^1,\\
    y_{12}(\theta_t^1) = y_{\theta(t)}^1,\\
    y_{13}(\theta_t^1) = \alpha_{\theta(t)}^1,\\
    y_{21}(\theta_t^2) = x_{\theta(t)}^2,\\
    y_{22}(\theta_t^2) = y_{\theta(t)}^2,\\
    y_{23}(\theta_t^2) = \alpha_{\theta(t)}^2,\\
  \end{gathered}
\end{equation*}
\end{multicols}


\begin{figure}[H]
  \centering
  \begin{subfigure}[b]{0.31\textwidth}
    \centering
    \includegraphics[width=\textwidth]{06-obj-dir.png}
    \caption{направлений (совпадающие}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.31\textwidth}
    \centering
    \includegraphics[width=\textwidth]{06-obj-orien.png}
    \caption{ориентаций (сзади}
  \end{subfigure}
  \caption{Макроотсчёты}
\end{figure}

Что может происходить со временем-пространством и объектами? Возможно подсчитать тренды расстояния, направления и ориентации, чтобы понять, как изменяются соответствующие параметры.
\begin{figure}[H]
  \centering
  \begin{subfigure}[b]{0.47\textwidth}
    \centering
    \includegraphics[width=\textwidth]{06-macro-s.png}
    \caption{$Y_{\text{расстояние}} [ \Theta_t, \Theta_{t+2\Delta t}] $}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.47\textwidth}
    \centering
    \includegraphics[width=\textwidth]{06-macro-or.png}
    \caption{$Y_{\text{ориентация}} [ \Theta_t, \Theta_{t+2\Delta t}] $}
  \end{subfigure}

  \begin{subfigure}[b]{0.5\textwidth}
    \centering
    \includegraphics[width=\textwidth]{06-macro-dir.png}
    \caption{$Y_{\text{направление}} [ \Theta_t, \Theta_{t+2\Delta t}] $}
  \end{subfigure}
  \caption{Макротренды}
\end{figure}


Представим  макротренд
\[ Y[\Theta_{t_s}, \Theta_{t_e}] = Y \langle y(\Theta_{t_s}), ..., y(\Theta_{t_s})\rangle \]

конечным автоматом $M_i [\Theta_{t_s}, \Theta_{t_e}]$.

\[ f[t,b_i(\Theta_t] = b_i(\Theta_{t+\Delta}), t \in [t_s, t_e - \Delta], \varphi[b_i(\Theta_t)] = y_i(\Theta_t) \]

Вводим состояния, время и переходы (граф) как тренды. Время в КА конечно, то есть мы его зацикливаем. Описываем функции выхода

(06-15-16) описываем КА. каждое состояние КА ведёт себя как малый КА. Или, например, показывает как меняется расстояние в зависимости от времени. как ведут себя объекты. 

(06-17-18-19) мы строим эталон поведения системы в виде КА и можем моделировать или сразу делать программу, устанавливая КА в исходное состояние. Если эталонная и реальная модель совпадают на всём участке времени мы делаем вывод о правильном поведении.

\subsection{Замечания}
Рассмотрены детерминированные четкие автоматы, для построения которых использовались линейные тренды (время в этих трендах линейно). Для многих сред это может быть не адекватно и не удобно. Может оказаться, что  нелинейные (ветвящиеся тренды), более адекватно описывают среду. Автоматы в этом случае могут быть недетерминированными.
Любой автомат может быть представлен не только в виде графа, но и в виде множества правил или уравнений специального вида. Это потребует модификации предложенного метода применительно к такому представлению.
Четкие автоматы слишком чувствительны для распознавания ситуаций в нечетких средах. Для таких сред требуется развитие методов, использующих нечеткие автоматы, а также  методы нечеткого агрегирования отношений.

\subsection{Нечёткие множества}
(06-23) вместо КА получаем нечёткий КА. функции перехода остаются почти неизменные, а вот признаки меняются. Каждому состоянию соответствует нечёткое множество.
(06-24-25-26) Сравниваем поведение срежды с поведением НА. если на каждом шаге значение совокупности признаков (совокупной функции принадлежности) не является нулевым, получаем знание о правильности поведения (нахождение в рамках допустимых).
(06-27-28-29) Вводим множество функций принадлежности для НА, описывающего систему, в которой человек хочет включить телевизор.
(06-30-31) Вводим состояния и переходы, распознаём ситуации
% Здесь в прошлогодних презентациях пробел. Распознавание аварийной ситуации на перекрёстке.
% Вводим лингвистические переменные (место относительно перекрёстка: далеко, близко, содержится. скорость: большая маленькая).
% можем создать граф автоматов первого уровня (начальные графы). Это будут разные графы с одной и той же формулой.
% Универсум нечёткого множества лингвистической переменной

% строим граф второго уровня исходя из соображений правил вождения. тогда общая эталонная модель характеризует и физическую среду и некоторые субъективные правила поведения на перекрёстке.

Самый очевидный способ проверить работу КА - это тестирование. взяв у некоего эксперта набор знаний и тестовых данных - получаем ок/не ок на выходе. Если же есть модель знаний, мы можем сформулировать более точную модель поведения программы по парвилам. Продолжение в разделе \hRf{section:modal}
(06-32-33-34-35)


\section{Стратегии извлечения знаний в пространстве состояний}
Состояния среды, с которых начинается поиск достижения цели называются \textbf{начальными состояниями}. Состояния среды, которые надо найти (вывести), называются \textbf{целевыми состояниями}. Множество всех состояний, достижимых из начального с помощью всех \textit{допустимых последовательностей действий} называется \textbf{пространством поиска} (пространством состояний), обозначаемым B. Последовательность состояний ведущих из начального состояния в другое в данном пространстве состояний называется \textbf{путем}. Процесс нахождения целевых состояний называется \textbf{стратегией вывода} (поиска) цели или просто поиском цели. Агент, являющийся исполнителем той или иной стратегии должен действовать таким образом, чтобы при анализе состояний среды максимизировать меру своего успеха. Это требование носит общий  характер, чтобы его можно было непосредственно воплотить в конкретную стратегию. Рассмотрим сначала, какие оценки могут характеризовать \textbf{меру успеха} (оценку успеха).

\subsection{Оценки успеха стратегий поиска}
Оценки успеха, характеризующие эффективность поиска цели, могут быть самыми различными.
\begin{itemize}
\item Самая очевидная оценка - это возможность достижения цели вообще. 
\item Другая оценка может быть ценой пути, вычисляемой с помощью функции цены пути. 
\item Третья оценка может быть ценой поиска, характеризующейся объемом необходимых для поиска времени и памяти. 
\item Наконец, еще одна оценка успеха может быть общей ценой, являющейся некоторой функцией от цены пути и цены поиска. 
\end{itemize}

Критерии оценки стратегий поиска
\begin{itemize}
\item Полнота: стратегия является полной, если она всегда обеспечивает достижение цели (целевого состояния или состояний) если оно вообще существует в данном пространстве состояний.
\item Сложность по времени: время, необходимое для достижения цели.
\item Сложность по памяти: объем памяти, необходимый для достижения цели.
\item Оптимальность: стратегия называется оптимальной, если она обеспечивает достижение цели не с самой лучшей оценкой успеха, но известно, что оно принадлежит некоторому классу или подмножеству стратегий, обладающих неким общим свойством или свойствами, по которым мы их относим их к оптимальным решениям.
\item Минимальность: стратегия является минимальной, если она обеспечивает достижение с наилучшей оценкой успеха. Минимальность таким образом является частным и более сильным случаем оптимальности.
\end{itemize}

\subsection{Слепой и направленный поиск}
Стратегии поиска разбиваются на две большие группы:
\begin{itemize}
\item слепой поиск, 
\item направленный поиск. 
\end{itemize}
Различие между слепым и направленным поиском можно продемонстрировать на следующем простом примере.

Представим себе, что агент приехал в Россию по туристической путевке с целью совершить путешествие по золотому кольцу России. Его самолет сел в аэропорту Шереметьево. Обратный  вылет тоже из Шереметьева. Дальнейший маршрут агента должен был осуществляться на автобусе и почти благополучно завершился. Посетив все города золотого кольца, агент самостоятельно поехал в близлежащий город Иваново, где отстал от автобуса. В отличие, например, от Ярославля, Иваново не имеет прямой автострады, соединяющей его с Москвой. Агент имеет билет на самолет с датой вылета на следующий день, билет не может быть продлен, да к тому же билетов вообще нет ранее, чем через две недели. Срок визы также заканчивается через два дня. 

Отправляясь в поездку, агент ставил перед собой, помимо чисто туристических, несколько других целей: улучшить знание русского языка, завязать полезные деловые контакты, написать несколько пейзажей с видами русской природы и т.п. Но, учитывая серьезность ситуации, главной его целью теперь стало вовремя добраться до аэропорта Шереметьево, не опоздав на свой самолет. После формулировки главной цели агент может принимать во внимание и другие факторы, влияющие на ее достижение. Прежде всего, следует решить, что мы будем понимать под действиями и состояниями. Если бы вдруг нам пришло в голову в качестве действий выбрать такие, как «повернуть руль на 10 градусов» или «продвинутся вперед на 1 метр», то решение задачи на таком уровне детализации стало бы практически неразрешимой задачей. 

В нашем случае в качестве действий лучше всего выбрать переезд из одного города в другой, а в качестве состояний нахождение агента в том или ином населенном пункте. \textbf{Целевым состоянием} в этом случае будет достижение агентом аэропорта Шереметьево (в Москве). Поиск будет слепым, если агент не имеет никакой информации о дорогах, ведущих из Иваново в другие города, и будет просто перебирать все дороги подряд. Поиск станет направленным, если он ознакомится с картой, увидит, что Москва лежит на юго-западе от Иваново, и будет пытаться выбирать дороги, ведущие в юго-западом или близком к нему направлениям.

\subsection{Слепой поиск в ширину}
Одна из самых очевидных стратегий поиска называется поиском в ширину: 
\begin{itemize}
\item начинается поиск с корневой вершины, 
\item находятся все последователи корневой вершины, 
\item затем все последователи каждого из последователей корневой вершины, 
\item затем все последователи каждого из последователей, найденных на предыдущем шаге,
\item и т.д. до тех пор, пока не будут найдены все вершины, соответствующие целевым состояниям. 
\end{itemize}
По этой стратегии вершины глубины k + 1 ищутся после того, как будут найдены все вершины глубины k.

На рис. ниже показана последовательность нахождения вершин при поиске в ширину и при числе последователей каждой вершины, равной 2. При поиске в ширину сначала рассматриваются все пути длины 1, затем длины 2 и т.д. Очевидно, что поиск в ширину удовлетворяет критерию полноты, поскольку в процессе этого поиска рассматриваются все пути, ведущие из начальной вершины (состояния) во все остальные.

(07-10)

Будем полагать, что число последователей каждой вершины равно l. Тогда в начале поиска в ширину мы имеем 1. В общем случае при глубине дерева поиска, равном k число вершин, получаемых в процессе поиска равно 
 \[ 1 + l + l^2 + l^3 + ...+ l^k.\]
При конкретных значениях l и k по этой формуле можно вычислить максимальное число вершин дерева поиска, которое может быть получено в процессе поиска в ширину. Решение может быть найдено раньше, чем будут найдены все последователи. Однако для некоторых задач эта величина может быть достигнута. Обычно вместо этой формулы употребляют ее обозначение в виде $O(l^k)$, которое называют экспоненциальной оценкой сложности. Если полагать, что получение каждого последователя требует одной единицы времени, то $O(l^k)$ является также оценкой сложности по времени. Если полагать, что для этого сохранения требуется единица памяти, то та же формула является одновременно и оценкой сложности по памяти для поиска в ширину.

Посмотрим, что это будут за величины при числе последователей l = 10 для различных значений глубины дерева поиска k. Предположим, что 1000 вершин-последователей могут быть получены за 1 сек, и что одна вершина требует 100 байт памяти. Эти величины соответствуют средним затратам времени и памяти, требуемым для решения многих иллюстративных задач типа головоломок. При этих предположениях получим следующую таблицу.

(07-14)

Глядя на нее, можно сделать два важных вывода. 
\begin{enumerate}
\item рост требований к памяти для решения задач поиском в ширину гораздо более серьезная проблема, чем рост требований ко времени решения тех же задач. Так, например, вполне приемлемо подождать решения задачи в течение 18 минут при l = 6, но необходимость наличия 111 мегабайт памяти для решения таких сравнительно простых задач кажется слишком высокой ценой. 
\item Для задач, в которых $l \geq 10$, помимо катастрофического роста требований к памяти, наблюдается быстрый рост временных затрат, не позволяющий решать реальные задачи с помощью поиска в ширину даже на современных мощных компьютерах. Это приводит к следующему заключению.
\end{enumerate}
Стратегии поиска, имеющие экспоненциальные оценки сложности решения задач по времени или памяти, в частности стратегия поиска в ширину, не могут быть использованы для решения задач большой размерности, т.е. задач, у которых $l \geq 10$.

\subsection{Монотонный поиск в ширину}
Монотонный поиск в ширину является некоторой модификацией поиска в ширину. Модификация заключается в том, что в процессе поиска в ширину всякий раз, когда определяется очередная вершина-последователь, одновременно вычисляется цена пути, ведущего в эту вершину. Эта цена пути используется для оценки целесообразности поиска вершин, продолжающих данный путь, сравнением с другими, уже полученными ценами путей. Если цена данного пути меньше цен всех этих путей, то поиск вершин на этом пути продолжается. В противном случае поиск вершин на этом пути откладывается, а продолжается поиск вершин на путях, цена которых меньше данного. Когда на каком-либо пути будет достигнута целевая вершина, то поиск на путях цена которых выше цены этого пути вообще прекращается. Все пути, имеющие одинаковую минимальную цену путей, ведущих в целевую вершину, являются решением задачи.

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

(07-18)

\subsection{Поиск в глубину}
При поиске в глубину, начиная с корневой вершины (корневая вершина находится на уровне 1), рассматриваются все инцидентные ей вершины уровня 2, начиная слева направо. Если удается найти среди них все целевые вершины, то на этом поиск прекращается. Если среди них не удается найти все целевые вершины, а максимальная глубина дерева еще не достигнута, то  берется самая левая вершина из числа рассмотренных уровня 2, и рассматриваются все инцидентные ей вершины уровня 3 слева направо. 

Если после этого все целевые вершины все еще не найдены, то берется самая левая вершина из числа рассмотренных уровня 3. Затем снова рассматриваются все инцидентные ей вершины уровня 3 слева направо и так до тех пор, пока  либо не будут найдены все целевые вершины, либо достигнута максимальная глубина дерева, на которой в соответствии с рассматриваемой процедурой просмотрены все вершины, инцидентные самой левой вершине предыдущего уровня, и все целевые все еще не найдены.  

В последнем случае осуществляется подъем по дереву на один уровень вверх, выбор на этом уровне самой левой  вершины, инцидентные которой вершины следующего уровня еще не рассмотрены и поиск  дальше среди  целевых вершин по тому же принципу. И так до тех пор, пока все вершины дерева не будут рассмотрены. На Рис. показана последовательность поиска в глубину для дерева  с тремя уровнями и степенью ветвления 2.

(07-21)

Требования к объему памяти при поиске в глубину существенно меньше, чем при поиске в ширину. В памяти необходимо хранить все вершины, инцидентные вершинам на пути из корневой вершины к любой другой, соседние вершины которой рассматриваются. Очевидно, что при степени ветвления l и глубине ветвления k, оценка сложности по памяти  при поиске в глубину равна $О(l^k)$. Оценка сложности по времени для поиска в глубину остается такой же как и при поиске в ширину, а именно $О(l^k)$. 

Для задач, дерево поиска для которых конечно, а число целей сравнительно невелико, поиск в глубину может оказаться эффективным, так как имеет шанс найти это небольшое число целей без просмотра всех вершин. Для задач, имеющих большую или даже бесконечную глубину дерева, поиск в глубину может оказаться крайне неэффективным, так как будет стремиться все время в глубину, в то время как цель может оказаться близкой к корню дерева, но на том пути, который еще не был просмотрен. 

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

\textbf{Ограниченный поиск в глубину} является частным случаем поиска в глубину. 
При этом поиске используется ограничение на глубину поиска. Например, при поиске маршрута из Иваново в Москву,  при наличии информации о числе населенных пунктов, которые могут встретиться на этом пути, глубину поиска можно ограничить числом этих населенных пунктов. 

При ограниченном поиске в глубину, как только достигается уровень, совпадающий с этим числом, происходит возврат назад также как это делается при обычном поиске в глубину. Ограниченный поиск в глубину полный, если ограничение на глубину поиска выбрано таким образом, чтобы обеспечить просмотр всех вершин дерева. Оценки сложности по времени и памяти при ограниченном поиске в глубину те же, что и при обычном поиске в глубину.

\subsection{Итеративный поиск в глубину}
При ограниченном поиске в глубину сложность поиска зависит от выбора ограничения. Например, при поиске маршрута можно использовать не число всех населенных пунктов в районе поиска подходящего маршрута, а максимальное число населенных пунктов, которые могут встретиться на каждом из возможных маршрутов. Это число, называемое обычно \textbf{радиусом поиска}. Знание радиуса поиска приводит к более эффективному ограниченному поиску в глубину. Однако в большинстве задач радиус поиска не известен до тех пор, пока задача не будет решена. Итеративный поиск в глубину использует стратегию, основанную на итеративном применении ограниченного поиска в глубину сначала для радиуса поиска, равного 0, затем 1, после этого 2 и т.д. Итерации итеративного поиска для бинарного дерева иллюстрирует Рис. справа. 

(07-26)

Итеративный поиск в глубину может показаться очень неэффективным, поскольку некоторые вершины просматриваются многократно. Однако для многих задач подавляющая доля вершин находится на низком уровне. Напомним, что оценка сложности по времени при ограниченном поиске в глубину вычисляется по формуле

\[О(lk) = 1 + l + l^2+ .... + l^{k-2}+ l^{k-1}+ l^k\]

Для l = 10, k = 5 будем иметь $О(l^k) = 111111$. При итерактивном поиске в глубину вершины 1-го уровня просматриваются k + 1 раз, второго k и т.д. Таким образом, оценка сложности по времени  при итеративном поиске в глубину вычисляется по формуле
 
\[ О(l^k) = (k+1)l + (k)l + (k-1)l^2+ ... +3 l^{k-2} + 2 l^{k-1} + 1 l^k \]

Для l = 10, k = 5 будем иметь  $О(l^k) = 123456$

По сравнению с оценкой сложности по времени для ограниченного  поиска в глубину сложность по времени для итеративного поиска в глубину возросла только на 11\%. Из формулы, приведенной выше видно, что чем выше степень ветвления, тем ниже доля сложности, получающейся за счет повторного просмотра вершин. Для случая, когда l = 2, сложность по времени итерационного поиска в глубину только в два раза превосходит сложность по времени простого поиска в глубину. Это означает, что оценка сложности по времени итерационного поиска в глубину по-прежнему равна $О(l^k)$, а сложность по памяти - $О(lk)$. Итеративный поиск в глубину достаточно хорошо себя зарекомендовал для задач с большим пространством поиска и неизвестной его глубиной.

\subsection{Двунаправленный поиск}
Идея двунаправленного поиска основана на использовании сразу двух стратегий  
\begin{enumerate}
\item прямого поиска от корневой вершины 
\item обратного от целевой вершины. 
\end{enumerate}
Процесс поиска прекращается, когда оба этих процесса встретятся на середине глубины. Если считать, что степень ветвления при прямом и обратном поиске одинакова, то  оценка сложности по времени двунаправленного поиска будет $О(2l^{k/2}) = О(l^{k/2})$. Эта оценка существенно лучше, чем аналогичная для  рассмотренных стратегий поиска при больших k. В таблицу ниже сведены характеристики  шести рассмотренных стратегий, где l - степень ветвления, k - глубина поиска, d - максимальная глубина дерева поиска, r ограничение на глубину поиска.

(07-30)

\subsection{Направленный поиск}
Все стратегии слепого поиска обладают экспоненциальными оценками сложности по времени поиска, а некоторые и по памяти, и, вследствие этого, пригодны для решения сравнительно небольших задач. В стратегиях слепого поиска знания, используемые при выборе очередной вершины, определяют только общий порядок выбора и никак не учитывают качество выбора, например, по сложности поиска целевой вершины. В стратегиях направленного поиска знания, используемые для выбора очередной вершины, более глубокие и используют  специальные функции, называемые критериями. Если  для каждой вершины b, участвующей в поиске, критерий может быть вычислен, а множество всех вершин  упорядочивается по этому критерию, то выбор очередной вершины производится в соответствии со значением этого критерия.

Чем лучше значение критерия (например, выше или ниже), тем предпочтительней выбор. Иными словами из множества альтернативных вершин выбирается та, для которой критерий имеет наилучшее значение. Стратегии выбора подобного типа называются стратегиями выбора по наилучшему критерию. Критерии обычно выбираются таким образом, чтобы оптимизировать сложность поиска,  найти оптимальное решение или достичь того и другого.

\subsection{Поиск по критерию близости цели}
Критерием близости к цели обычно является числовая функция $h(b) \geq 0$, вычисляемая для  вершины  b и характеризующая близость этой вершины к целевой. При использовании критерия близости к цели, начиная с корневой вершины, просматриваются все соседние ей вершины, выбирается та, для которой  h(b) минимальна, и все повторяется вновь для выбранной вершины. И так до тех пор, пока не будет достигнута целевая вершина, для которой h(b) = 0, т.е. выбирается та вершина, которая ближе всего находится к цели. Вид критерия близости к цели зависит от среды (является проблемно зависимым). Чтобы получить достаточно полное представление об этом критерии, вернемся к задаче поиска маршрута из Иваново в Москву. Критерием выбора в этом случае будет минимальное расстояние по прямой (кратчайшее расстояние) от вершины (населенного пункта) до Москвы. 

Естественно, чтобы значение критерия могло быть вычислено, необходимо иметь карту или какой-либо другой источник информации, содержащий сведения о кратчайших расстояниях от населенных пунктов до Москвы. На Рис. ниже показана последовательность поиска по критерию близости к цели для примера с поиском маршрута из Иваново в Москву, использованного при рассмотрении монотонного поиска в ширину.

(07-35)

Поиск по критерию близости к цели является поиском в глубину, но с выбором на каждом шаге  единственной вершины, от которой начинается следующий шаг. Недостатки этой стратегии те же, что и для слепого поиска в глубину, а именно, она неоптимальная и неполная, поскольку может случиться, что поиск пойдет по бесконечному пути и никогда не вернется назад. Оценка сложности по времени этой стратеги поиска равна $О(l^d)$, где d - максимальная глубина пространства поиска. При поиске по критерию близости к цели приходится хранить все вершины, рассматриваемые при поиске. Поэтому оценка сложности по памяти для этой стратегии та же, что и оценка сложности по времени. Если критерий близости к цели выбран  достаточно удачно, то сложность поиска может быть существенно уменьшена.

\subsection{Поиск по критерию цены пути (A* - поиск)}
Обозначим 
\begin{itemize}
\item [] g(b) - критерий цены пути из корневой вершины в вершину b, 
\item [] h(b) - уже рассмотренный критерий близости к цели. 
\end{itemize}
Пусть оба критерия имеют одну и ту же размерность. Функцию $f(b) = g(b) + h(b)$ будем считать интегральным критерием цены пути из корневой вершины в целевую. Рассмотрим стратегию поиска на основе этого критерия и покажем, что она будет полна и оптимальна. 

Введем небольшие ограничения на критерий h(b). Идея этого ограничения состоит в том, чтобы выбирать критерий h(b), таким образом, чтобы не переоценивать близость к цели, т.е. всегда выбирать значение h(b) больше, чем оно есть на самом деле. Критерий h(b), выбираемый таким образом, называется \textbf{допустимым}. Стратегия поиска, использующая критерий f(b) и допустимый критерий h(b) известна как \textbf{А*- поиск}\footnote{https://ru.wikipedia.org/wiki/A*}. Критерий близости к цели h(b), использованный в примере с поиском маршрута из Иваново в Москву, является типичным примером допустимого критерия, поскольку не может быть пути из одного населенного пункта в другой короче, чем кратчайший путь. На рис. справа показаны первые четыре шага поиска пути из Иваново в Москву с использованием критерия f(b) в А*- поиске.

(07-39)

В результате этого поиска, в отличие от поиска только по критерию близости к цели, рассмотренном в предыдущем разделе, выбран путь к Москве не через Юрьев-Польский, а через Владимир,  хотя Юрьев-Польский ближе к Москве, чем Владимир. Такой выбор объясняется тем, что цена пути g(b) от Иваново до Юрьева-Польского выше, чем до Владимира вследствие очень плохой дороги.

(07-40)

Выбор маршрута можно проследить по рисунку. На любом пути от корневой вершины значение критерия  f(b) нигде не уменьшается при переходе к рассмотрению очередной вершины. Это не случайность и справедливо почти для всех допустимых критериев h(b) близости к цели. Критерии f(b), для которых имеет место подобное свойство, называются монотонными. Если монотонность нарушается, то путем незначительной коррекции это нарушение может быть устранено.

(07-41)

Рассмотрим, например, пару  вершин b, b', где  b предшественник, а b' - последователь. Предположим, что g(b) = 3,  h(b) = 4. Тогда f(b) = 7, т.е. цена пути через вершину b самое меньшее равна 7. Предположим также, что  g(b') = 4  h(b') = 2, т.е. f(b') = 6 . Ясно, что в этом случае критерий f(b) не  является монотонным. К счастью, благодаря тому, что любой путь через b' является также путем через b, цена пути  f(b') = 6 является бессмысленной. 

Поэтому каждый раз, как рассматривается  какая-либо вершина b' и оказывается, что ее цена пути f(b') < f(b), мы полагаем, что  f(b') = f(b), т.е. f(b') = max (f(b), f(b')). Таким способом немонотонность может быть всегда устранена, и критерий  f(b) никогда не будет уменьшаться вдоль одного и того же пути при условии, что h(b) допустимое. Если же  f(b) никогда не уменьшается вдоль одного и того же пути, начинающегося от корневой вершины, то на пространство состояний можно наложить контуры, каждый из которых охватывает множество вершин b, для которых значение критерия f(b) меньше определенной величины c.

Процесс поиска можно представить как переход от просмотра еще не просмотренных вершин какого-либо внутреннего  контура, для всех вершин b1 которого имеет место $f(b1) \leq c1$, к просмотру вершин некоторого внешнего контура, для всех вершин b2 которого имеет место $f(b2) \leq c2$ и c1 < c2 . Это продолжается до тех пор, пока внутри очередного контура не окажется целевая вершина с h(b) = 0. При удачном выборе  критерия f(b), контуры как бы растягиваются в сторону целевой вершины, фокусируясь вокруг оптимального пути.

Обозначим c* цену оптимального пути. Тогда можно утверждать следующее
\begin{itemize}
\item А*- поиск просматривает вершины с $f(b) \leq c*$.
\item А*- поиск осуществляет направленный просмотр вершин, стремясь к просмотру вершин контура, для которых имеет место f(b) = c*.
\end{itemize}

Решение, получаемое с помощью А*- поиска, является оптимальным, поскольку находится вершина с максимальным значением f(b), а следовательно и максимальным g(b), поскольку h(b) = 0. А*- поиск является также полным, поскольку увеличивая постепенно значение критерия f(b) мы должны, в конце концов, найти путь к целевой вершине. Заметим также, что для данного критерия f(b) не существует никакой другой процедуры поиска, которая давала бы более оптимальные решения, чем  А*- поиск.  

Все эти утверждения требуют более строгих доказательств, которые здесь не приводятся. Оценки сложности по времени и памяти для А*- поиска аналогичны оценкам для поиска по критерию близости цели. На идее А*-поиска построено много других методов поиска, учитывающих особенности конкретной среды, влияющих на выбор критериев, и различные ограничения, например по доступным ресурсам (времени выполнения и доступной памяти).

\subsection{Оптимизирующий итеративный поиск}
Во многих задачах поиск целевого состояния (состояний) в пространстве состояний ставится как задача нахождения такого состояния (состояний), которые в определенном  смысле наилучшие (оптимальные). При этом не имеет особого значения цена пути нахождения цели, если эта цель может быть достигнута  за приемлемые затраты времени и памяти. Идея оптимизирующего итеративного поиска станет понятной, если полагать что  состояния - это точки на поверхности некоторого горного ландшафта. Чем выше точка находится над уровнем моря, тем лучше (оптимальней) состояние, которое она представляет. Точки, соответствующие пикам являются оптимальными точками. 

Задачей оптимизирующего итеративного поиска является такой порядок просмотра точек, или иначе такое движение по поверхности ландшафта, чтобы в конце концов достичь (найти) оптимальные точки. Имеется большое разнообразие стратегий оптимизирующего итеративного поиска. Например, к их числу относиться простой градиентный поиск.

Идея простого градиентного поиска чрезвычайно проста:
\begin{itemize}
\item начиная с некоторого начального состояния, двигаться в направлении подъема вверх, 
\item дерево поиска не хранить, а сохранять только последнее найденное состояние b и оценку его качества L(b). 
\item если попадется несколько состояний с одинаковой оценкой качества, выбирать одно из них.
\end{itemize}
Простой градиентный поиск в чистом виде обладает тремя известными недостатками:
\begin{itemize}
\item Если вершин несколько, то поднявшись на одну из них, процесс поиска остановится, полагая, что цель достигнута, хотя достигнутая вершина является всего лишь локальным оптимумом и далека от наилучшей.
\item Если ландшафт имеет плато, то процесс поиска по нему становится случайным.
\item Если ландшафт имеет гребни (хребты) со слабым наклоном, то  легко достигнув гребня, процесс поиска может очень долго идти по гребню, пока достигнет оптимальной вершины.
\end{itemize}
После остановки процесса градиентного поиска начинается следующая итерация с другого начального состояния. Найденное оптимальное состояние сохраняется до тех пор, пока не будет найдено лучшее. Этот итеративный процесс поиска продолжается конечное число раз или пока не будет найдено устраивающее решение. Ясно, что если провести достаточное число подобных итераций, то оптимальное решение, в конце концов, будет найдено. 

Успех градиентного поиска сильно зависит от вида пространства состояний. Если число локальных минимумов невелико, то оптимальное решение будет найдено сравнительно быстро. Стратегии градиентного поиска могут отличаться способом выбора очередной вершины в процессе подъема на вершину, выбором очередной вершины для новой итерации и т.д.

\section{Линейная временная модальная логика}
\label{section:modal}
Основные формы представления знаний - это графы. 
\begin{itemize}
\item \textbf{Динамическая среда}. Среда является динамической, если ее состояния изменяются во времени. Актуальная задача – это анализ этих изменений. Не требуется знания ни точного времени перехода в те или иные состояния, ни самих этих состояний. Требуется установление истинностного значения (И или Л) той или иной формулы, выражающей определенные отношения между объектами динамической среды и не явно зависящей от состояний среды, изменяющихся во времени.
\item \textbf{Модальность}. На естественном языке для выражения этих отношений обычно используются слова типа «допустимо», «необходимо», «возможно» и т.п., выражающих определенную степень уверенности наступления каких-либо событий во времени или пространстве, но без указания точного времени или места. Возможность делать в логике высказывания, содержащие выразительные средства, характеризующие подобную степень уверенности или «силу» высказывания называется модальностью. Исчисления, в которых вводятся специальные символы или слова (модальные операторы), с помощью которых это делается, называются модальными исчислениями.
\end{itemize}
Линейная временная модальная логика основана на логике предикатов первого порядка. Называется линейной модальной логикой. Слово «временное» употребляется здесь в связи с тем, что изменение подразумеваемых состояний происходит во времени. Слово «линейное» означает, что время течет линейно, нет параллелизма. Состояния тоже изменяются линейно в этом времени. Всегда анализируем единственный возможный путь.
\subsection{Переход от логики предикатов к модальной логике}
Переход от логики предикатов к модальной логике не такой резкий, как переход от логики исчисления высказываний к логике предикатов. При этом выбор переменных, определяющих состояние, произволен и зависит от субъективной точки зрения. Переменные, определяющие состояние, являются более важными, чем все остальные. Формулы модальной логики не зависят явно от состояний и тем самым от переменных, его определяющих. Временная модальная логика предполагает наличие базисного отношения достижимости между состояниями: R(s, s'), которое определяет возможность перехода из одного состояния s в другое s'. Это отношение имеет место, если ситуация s' достижима из состоянии s.

(08-06)
Линейная модальная логика предполагает, что между состояниями можно установить отношение достижимости: 
R(s, s,), если состояние (день, место) s, следует за состоянием s. 
Обычно считается, что отношение R(s, s) всегда имеет место. 
Главная идея обозначений, принятых в модальной логике, состоит в стремлении избежать использования состояний и отношения достижимости. 
Для этого в линейной временной логике вводится два основных модальных оператора, описывающих свойства достижимости состояний: 
оператор необходимости $\bullet$, 
оператор возможности ◊.
возможны и другие модальные операторы

(08-07)
w некоторая формула модальной логики. 
w и ◊w также формулы модальной логики. 
Значение формул w, w и ◊w неявно зависит от некоторго текущего состояния s. 
Формула w считается истинной в состоянии s, если формула w истинна на всех состояниях достижимых из состоянии s, включая собственно ситуацию s. 
Формула ◊w считается истинной в состоянии s, если формула w истинна хотя бы в одном состоянии, достижимом из состоянии s. 
Обозначим w(s) значение  формулы w в состоянии s. 
Тогда правила вывода истинных значений модальных формул w(s) и ◊w(s) можно записать следующим образом.

Модальная формула записывается с помощью пропозициональных  символов, предикатных символов (включая равенство), функциональных символов, констант, переменных, классических операторов (связок) и кванторов, модальных операторов. Формула без модальных операторов, являющаяся по существу формулой логики предикатов первого порядка, называется иногда статической. 
Модальная формула, называемая иногда динамической, содержит статические подформулы, к которым и модальные операторы. Истинное значение модальной формулы в некотором состоянии может быть найдено с помощью повторяющегося использования указанных выше правил для модальных операторов и вычисления статических формул в каждом состоянии.

(08-09)
Формула ◊(w) истинна в состоянии s, если существует хотя бы одно состояние s', достижимое из состояния s, в которой истинна формула w. Другими  словами  истинность формулы ◊(w) означает, что существует состояние s', достижимое из состояния s, такое, что в состоянии s' и во всех достижимых из него состояниях истинна формула w. Формула (◊w) истинна в состоянии s, если во всех состояниях s', достижимых из состояния s, истинна формула ◊ w. Другими  словами  истинность формулы   (◊w) означает, что для всех состояний s', достижимых из состоянии s, можно найти хотя бы одно достижимое из s’ состояние, в котором истинна формула ◊w.

(08-11)
Формула (w ⊃  w) истинна, если для всех состояний s', достижимых из s, истинна формула w ⊃  w.. Истинность формулы w ⊃  w в ситуации s' означает, истинность формулы w во всех ситуациях достижимых из ситуации s'. 
Таким образом, истинность формулы  (w ⊃ w) означает, что формула w становится всегда истинной в любой ситуации s', достижимой из s и остается истинной для всех состояний, достижимых из s'.
Модальная логика построена на базе логики предикатов. 
Для нее справедливы понятия, используемые в последней: общезначимость, выводимость и др. В частности формулы
¬w ⊃ ¬◊w,
w ≡ w
общезначимы. 
Формула 
(w1 ⊃ w2) ⊃  (w1 ⊃ w2)
также общезначима. 
Это означает (на основе правила модус поненс), что истинность формулы (w1 ⊃ w2) всегда влечет истинность формулы  w1 ⊃  w2.

\subsection{Модальные исчисления}
(08-13)
Задавая различные ограничения на отношение достижимости R, можно получать различные модальные исчисления, не переходя к моделям среды. 
Полагаем, что отношение R всегда рефлексивно и транзитивно ( sRs ,(s1Rs2  ∧ s2Rs3) ⊃ s1Rs3 )). Вследствие этого общезначимы все следующие формулы: 
 w ⊃ w 
◊◊w ⊃ ◊w  
Это означает, что рассматриваемая нами линейная временная модальная логика имеет дело с последовательностями  состояний s0, s1,..., причем sj достижимо из si, если и только, если i ≤ j, а s0 есть единственное начальное состояние.

Язык временной модальной логики использует множество базовых символов, состоящих из индивидных (объектных) переменных и констант, пропозициональных, функциональных и предикатных символов. 
Множество всех символов может разбиваться на два подмножества: глобальных и локальных символов. 
Глобальные символы имеют одну и ту же область интерпретации на всем универсуме. 
Локальные символы разбиваются на группы, каждая из которых имеет свою, отличную от других групп область интерпретации. 
Символы разбиваются также на виды. Каждому виду соответствует своя область интрпретации. 
Например, для натуральных чисел  используются общеупотребимые символы: 
{0,1,2,3,4,5,6,7,8,9,+,-,...,≤,≥...}.

(08-15, 16)

\subsection{Динамические системы}
  Транспортные системы
  Медицинские системы
  Электронный бизнес
  Телефонные сети
   Протоколы
   Сетевые экраны

   используются методы поиска
   
Имитационное моделирование 
Тестирование 
Дедуктивный анализ
Верификация модели

(08-19)
Всегда, когда в некотором текущем состоянии осуществляется восприятие пакета p, над которым совершается действие !accept , то не должно быть достижимого из этого состояния другого состояния, в которое процесс переходит в результате восприятия того же пакета p, над которым совершается действие !drop
(08-20)
Eсли в некотором текущем состоянии возможно восприятие пакета p, над которым совершается действие !accept , и в достижимом из этого состояния другом состоянии, в которое процесс переходит в результате восприятия того же пакета p , совершается действие !drop

p1 = udp 192.168.1.1,
p2 = tcp 10.1.1.0,
p3= udp 192.168.1.1,
p4= tcp 10.1.1.26,
p5= tcp 10.1.1.64. 

\begin{lstlisting}[language=C,style=CCodeStyle]
  domains
  f =f(symbol, integer, integer, integer, integer, symbol ) 
  list = f*

  predicates
  nondeterm  transition(symbol, list, symbol)
  nondeterm accessible(symbol, list, symbol)
  clauses
  transition(b1, [f(udp,192,168,1,1, accept)], b2 ).
  transition(b2, [f(tcp,10,1,1,0, accept)], b3).
  transition(b3, [f (udp,192,168,1,1,drop)], b4).
  transition(b4, [f(tcp,10,1,1,26, accept)], b5).
  transition(b5, [f(tcp,10,1,1,64, dropall)], b6).
  transition(b1, [],b2).
  transition(b2, [],b3).
  transition(b3, [],b4).
  transition(b4, [],b5).
  transition(b5, [],b6).

  accessible(B1, [X], B2) :- transition(B1, [X], B2).
  accessible(B1, [X|Rest], B2) :- transition(B1, X, B3),  accessible(B3, Rest, B2).
  goal
  accessible(B1, [f(udp,X,Y,V,W, accept)], B2), accessible(B1, [f(udp,X,Y,V,W, drop)], B3), B2<>B3.
\end{lstlisting}

в линейной временной модальной логике нет квантов. если есть разветвления (параллелизм) это логика деревьев вычислений computation tree logic). позволяет описывать множественные варианты развития событий в одном графе.

альтернативная временная логика - это обобщение логики деревьев. поведение множества агентов подчиняется правилу, что формула гаммы всегда должна быть истинна. в этой логике можно формулировать утверждения типа «агенты множества взаимодействуют в соответствии с формулой гамма или поведение агентов удовлетворяет формуле гамма».

\section{Прямой и обратный вывод(09)}
Какие бы рассуждения ни использовались, нужно делать выводы.
Наиболее распространенными являются следующие типы выводов: 
прямой,
обратный,
комбинированный.
До сих пор при рассмотрении дедуктивно-рассуждающих агентов использовался прямой вывод.

Начальные знания (аксиомы) помещаются в базу знаний.
Для всех целевых формул подбираются правила вывода, условия которых может быть образовано из формул, хранящихся в базе знаний с использованием, если это необходимо, унификации.
По правилам вывода получаются истинные формулы (теоремы), являющиеся унифицированным следствием правил вывода.
Если эти формулы (теоремы) совпадают с целевыми формулами, то процесс вывода завершается.
В противном случае теоремы добавляются в базу знаний и осуществляется переход к п. 2.

Начальные знания (аксиомы) помещаются в базу знаний.
Подбираются правило вывода, следствием которого являются целевые формулы, а условие может быть образовано из формул базы знаний с использованием, если это необходимо, унификации. 
Унифицированные формулы, входящие в условия правил вывода, принимаются за новые целевые формулы (обычно называемые подцелевыми формулами).
Если все подцелевые формулы оказываются истинными, то начальные целевые формулы выведены и  процесс вывода завершается. 
В противном случае выведенные истинные подцелевые формулы добавляются в базу знаний, подцелевые формулы, истинность которых не доказана, принимаются за новые целевые формулы и осуществляется переход к п. 2.

\subsection{Хорновские формулы}
Хорновские формулы – это импликативные формулы, левая часть (посылка) которых является конъюнкцией атомов, а правая (заключение) является либо атомом, либо пустым символом, т.е. справа ничего нет. При унификации соблюдаются следующие ограничения:
Вместо переменной в x, y  может подставляться переменная. Такая подстановка называется переименованием переменной или переименованием переменной.
Вместо переменной может подставляться константа. Такая подстановка называется конкретизацией переменной.
Вместо переменной может подставляться функция. Такая подстановка называется заменой переменной

(09-07, 08)

Вывод на основе использования правила модус поненс, унификации и хорновских формул использует только один тип правила. 
Поэтому нет необходимости осуществлять выбор подходящего правила вывода. 
Это типизирует процедуры прямого и обратного вывода, превращая их в итеративную процедуру выполнения однотипных шагов.

(09-10, 11, 12)

на (x,y) ∧ свободен (x) ∧  переместить(x,Стол) ⊃ на(x,Стол)
на (x,y) ∧ свободен (x) ∧  переместить(x,Стол) ⊃ свободен (y)
на (x,y) ∧ свободен (x) ∧  переместить(x,Стол) ⊃ свободен (x)
	
на (x, y) ∧ свободен (x) ∧ свободен(z) ∧  переместить(x,z)⊃ на(x,z)
на (x,y) ∧ свободен (x) ∧ свободен(z) ∧  переместить(x,z)⊃ свободен (y)
на (x,y) ∧ свободен (x) ∧ свободен(z) ∧  переместить(x,z)⊃ свободен (x)
\subsection{Среда кубиков. Прямой вывод. (14-19)}
Имеем истинные формулы
на (A, C) , свободен (A) , на (х, у) ∧ свободен (х) ⊃ пeреместить (x,Стол)

Унифицируем их
на (A, C) , свободен (A) , на (A, C) ∧ свободен (A) ⊃ пeреместить (A,Стол)

Применяем обобщенное правило модус поненс
на (A, C) , свободен (A) ,на (A, C) ∧ свободен (A) ⊃ пeреместить (A,Стол)
                             пeреместить (A,Стол)
Аналогично
на (D, B) , свободен (D), на (D, B) ∧ свободен (D) ⊃ пeреместить (D,Стол)
пeреместить (D,Стол)
на (A,С) , свободен (A) ,  переместить(A, Стол), на (A,С) ∧ свободен (A) ∧  переместить(A, Стол)⊃ на(A, Стол)
на(A, Стол)
	
на (A,С), свободен (A) ,  переместить(A, Стол), на (A,С)∧ свободен (A) ∧  переместить(A, Стол)⊃ свободен (С)
	 свободен (С)

на (D,B) , свободен (D) , переместить(D, Стол), на (D,B) ∧ свободен (D) ∧  переместить(D, Стол)⊃ на(D, Стол)
на(D, Стол)
	
на (D,B) , свободен (D) , переместить(D, Стол), на (D,B) ∧ свободен (D) ∧  переместить(D, Стол)⊃ свободен (B)
свободен (B)

(14-20-23)
(14-24-28)

\section{Практично-рассуждающие агенты (10)}
Практичное рассуждение – это рассуждение (вывод), направленное на действия – процесс выделения того, что надо сделать: «Практическое рассуждение является процессом взвешивания конкурирующих соображений за и против, где наиболее существенные соображения агента предоставляются в виде его желаний, ценностей, наблюдений  и убеждений» (Bratman, 1990).

Практичное рассуждение отличается о логического. Например, вывод о смертности Сократа на основе знания о том что все люди смертны, а Сократ – человек, является логическим рассуждением. Процесс же принятия решения о выборе автобуса вместо трамвая является практичным, поскольку направлен на непосредственное выполнение действия.

Практичное рассуждение состоит из двух основных этапов:
\begin{enumerate}
\item обдумывание и взвешивание: Формирование цели, которую хотелось бы достичь;
\item достижение и окончание: формирование плана достижения цели.
\end{enumerate}

Пример: обдумывание и взвешивание, достижение и окончание карьерных устремлений.

Применяется принцип BDI:
\begin{itemize}
\item [] Beliefs – убеждения
\item [] Desires – желания
\item [] Intentions – намерения
\end{itemize}
Результат обдумывания и взвешивания BDI-агентов – это намерение.

\subsection{Принципы формирования и взвешивания агентом при формировании намерения}
\begin{itemize}
\item Наличие ресурсов для реализации намерения. Если я хочу реализовать намерение $\phi$, то я должен предусмотреть необходимые ресурсы для достижения этого намерения $\phi$.
\item Отсеивание других намерений, которые являются конфликтными. Если я хочу реализовать намерение $\phi$, то я не должен иметь намерений $\psi$ таких, что $\phi$ и $\psi$ взаимно исключают друг друга.
\item Отслеживание успехов в реализации  своих намерений и склонность повторять попытки их реализации в случае неудач. Если первая попытка агента реализовать намерение $\phi$ потерпела неудачу, то при тех же предпосылках, он будет делать попытку реализации намерения $\phi$ с помощью альтернативного плана.
\item Убежденность реализуемости намерений. Я убежден, что есть по крайней мере один путь реализации  моего намерения.
\item Неверие, что намерения могут быть нереализуемы. Для меня неразумно (нерационально) иметь намерение $\phi$, если я убежден, что $\phi$ нереализуемо.
\item Предположение, что при определенных обстоятельствах намерения могут быть изменены. Не нормально, будучи рациональным, полагать, что я не могу изменить своих намерений. Намерения могут не сбываться. Более того, бессмысленно верить в реализацию намерения $\phi$, если я убежден, что это намерение неосуществимо.
\item Незнание всех побочных эффектов намерений. Если я верю в $\phi \supset \psi$ и верю в $\phi$, то это не означает, что я обязательно верю также в $\psi$. (Из истинности $\phi$ и $\phi \supset \psi$ не обязательно следует истинность $\psi$, т.е. modus ponens в этом случае не применим) 

Эта проблема известна как, побочный эффект (side effect) или комплексная сделка (package deal). Я могу верить, что поход к дантисту предполагает боль, но мое намерение пойти к дантисту не означает, что я намерен подвергаться боли.
\end{itemize}

\subsection{Намерения и желания}
Намерения намного сильней, чем желания:
«Мое желание играть в баскетбол  после обеда – это не более чем просто возможность потенциального влияния на мое поведение во второй половине дня. Оно может вступать в конфликт с моими другими желаниями до тех пор, пока какое-либо одно из них не победит. Но как только, у меня появится намерение играть после обеда в баскетбол, ситуация изменяется: я перестаю взвешивать за и против. Когда проходит обед, я перехожу к выполнению своих намерений» (Bratman, 1990).

Достижение и окончание в ИИ больше известно как планирование.
Планировщик агента – это система, которая имеет на входе:
\begin{itemize}
\item цель, намерение или задачу,
\item текущее состояние среды (убеждения агента),
\item действия, доступные агенту.
\end{itemize}
Планирующий алгоритм вырабатывает план достижения цели. По существу, это автоматизация программирования.

\textbf{Планирующие агенты}
С ранних 1970 ИИ-сообщество усиленно интересовалось созданием интеллектуальных агентов. Планирование – это автоматизированное программирование: создание последовательности действий, ведущих к достижению некоторой цели. В рамках символического ИИ долго предполагалось, что некоторая форма ИИ планирующей  системы будет центральной для интеллектуального агента. Основываясь на ранних работах Fikes \& Nilsson (1971) было предложено множество планирующих алгоритмов и теория планирования была хорошо развита.

Так, планировщик формирует \textit{план достижения цели} на основе трёх начальных факторов:
\begin{enumerate}
\item цель, намерение, задача
\item убеждения, соответствующие текущему состоянию среды
\item возможные действия.
\end{enumerate}

\textbf{Пример:}
Мир блоков содержит
\begin{enumerate}
\item захват робота,
\item 3 блока (A, B и C) одинакового размера,
\item поверхность стола.
\end{enumerate}

Предикаты:
\code{On(x, y)}   кубик x лежит на кубике y
\code{OnTable(x)} кубик x лежит на столе
\code{Clear(x)}   на кубике x ничего не лежит
\code{Holding(x)} захват держит кубик x

Начальное состояние среды блоков:
\begin{verbatim}
Clear(A)
On(A, B)
OnTable(B)
OnTable(C)
\end{verbatim}

Используем принцип замкнутости среды (closed world assumption): Все, что не объявлено истинным, ложно. Цель: $OnTable(A) \land OnTable(B) \land OnTable(C)$.

Действия представляются на основе использования метода, развитого в планировщике STRIPS (Fikes и Nilsson, 1971). Каждое действие имеет:
\begin{itemize}
\item имя, которое может иметь аргументы,
\item список предусловий: факты, которые должны стать истинными  в результате выполнения действия,
\item удаляемый список: список фактов, которые перестают быть истинными после выполнения действия,
\item добавляемый список: список фактов, которые становятся истинными после выполнения действия.
\end{itemize}

Пример 1: действие stack совершается, когда захват робота помещает кубик x, который он держит, на кубик y. Stack(x, y)
\begin{itemize}
\item предусловие Clear(y) $\land$ Holding(x)
\item удаляемый список Clear(y) $\land$ Holding(x)
\item добавляемый список ArmEmpty $\land$ On(x, y)
\end{itemize}

Пример 2: Действие unstack совершается, когда захват робота захватывает кубик x, который находится наверху кубика y. UnStack(x, y)
\begin{itemize}
\item предусловие On(x, y) $\land$ Clear(x) $\land$ ArmEmpty
\item удаляемый список On(x, y) $\land$ ArmEmpty
\item добавляемый список Holding(x) $\land$ Clear(y)
\end{itemize}

Пример 3: Действие pickup совершается, когда захват робота захватывает кубик x со стола. Pickup(x)
\begin{itemize}
\item предусловие Clear(x) $\land$ OnTable(x) $\land$ ArmEmpty
\item удаляемый список OnTable(x) $\land$ ArmEmpty
\item добавляемый список Holding(x)
\end{itemize}

Пример 4: Действие putdown совершается, когда захват робота помещает кубик x на стол. Putdown(x)
\begin{itemize}
\item предусловие Holding(x)
\item удаляемый список Holding(x)
\item добавляемый список Clear(x) $\land$ OnTable(x) $\land$ ArmEmpty
\end{itemize}

План - это последовательность (список) действий, в которых переменные замещены константами. Представляется в виде дерева, разрастающегося от изначального состояния и схлопывающееся к конечному результату действия. В оригинале планировщик STRIPS использовал для управления построением плана стек целей. Планировщик имел базу данных и стек в который цели и подцели заносились последовательно.
\begin{enumerate}
\item Помещение цели в стек целей
\item Анализ цели Цель1, помещение в стек ее подцелей:
\item Анализ подцели Подцели1-2, и т.д.
\end{enumerate}

\subsection{Формализация процесса поиска плана 10-24 - 27}
Множество действий $A_c = \{\alpha_1, ..., \alpha_n \}$. Описатель действия $\alpha \in A_c: \{ P_\alpha, D_\alpha, A_\alpha \}$

$P_\alpha$ - множество формул, задающих предусловие действия,
$D_\alpha$ - множество фактов, задающих добавляемый список.
$A_\alpha$ - множество фактов, задающих удаляемый список,

Для простоты будем полагать, что предусловие, удаляемый и добавляемый списки содержат только атомы без связок и переменных. Задача планирования над списком действий определяется тройкой:
\[ \{ \Delta, O, \gamma \} \]

$\Delta$ - убеждения агента о начальном состоянии среды,
$O = \{ < P_\alpha, D_\alpha, A_\alpha > | \alpha \in A_c \}$ - индексированное множество  описателей действий,
$\gamma$ -  множество формул, задающих целевое намерение.
Планом π является последовательность действий

По отношению к задаче планирования план определяет последовательность из n +1 состояний среды
 
где 
и

Говорят, что линейный                    приемлем (допустим) для задачи             , если и только предусловие каждого действия выполняется в предшествующем состоянии среды, т. е. если

План                   корректен для задачи           , если он
приемлем,
, т.е. цель достижима в конечном состоянии среды, генерируемым планом.


Задача, которая должна быть решена планировщиком, может быть сформулирована следующим образом:
Имея задачу планирования $\{ \Delta, O, \gamma \}$, найти корректный план для рещшения этой задачи
Если он не найден, то объявить, что он не существует.

Достижение и окончание  представляется функцией 
 plan : Bel x Des x Int  → Plan,
где Plan  - множество корректных планов.

\subsection{Реализация практично рассуждающего агента}
Псевдокод простейшего цикла работы практично рассуждающего агента:
 while true
    наблюдать за средой: воспринимать Per;
    обновлять убеждения среды: believes : Bel  x Per → Bel;
        вырабатывать желания: desires : Bel x Int → Des;
    обдумывать намерения для достижения цели: intentions : Bel x Des  x Int → Int;  
    выводить план, соответствующий намерениям: plan : Bel x Des x Int  → Plan;
    выполнять план
end while
     
Проблема: Обдумывание и достижение требуют времени, т.е. не происходят мгновенно.
Предположим, что агент начал обдумывание во время t0, достижение во время t1, и выполнение плана во время t2. Тогда время на обдумывание есть 
tобд = t1 – t0,
а время на достижение есть
tдост = t2 – t1
Обдумывание является оптимальным в том случае, если выбирается некоторое намерение наилучшее для агента (максимизирующее ожидаемую полезность)
Если агент выбирает намерение во время t1 , то оно оптимально, если t1 = t0. До тех пор, пока tобд ничтожно мало, то риск того, что намерение уже не оптимально к тому времени, как агент остановил внимание на нем, минимален. 
И это вычислительно рационально.
Обдумывание – это только половина проблемы: необходимо еще определить как реализовать намерение.

Таким образом, агент ведет себя оптимально в следующих случаях :
Когда обдумывание и достижение занимают незначительное время.
Или когда среда гарантированно статична настолько, что за  время обдумывания и достижения  в ней ничего не меняется.  
Или когда намерение гарантированно остается оптимальным до времени t2  (времени, когда агент находит последовательность действий для реализации намерения).

(10-34)

\subsection{Обдумывание}
Как агент обдумывает?
\begin{itemize}
\item начинает с попытки понять,  реализация каких желаний (возможностей)  ему доступна, 
\item осуществляет выбор среди них  и решает следовать им.
\end{itemize}

Выбранные желания (возможности) становятся намерениями. 
Функция обдумывания может быть декомпозирована на две компоненты:
генерация желаний (возможностей), когда агент порождает множество возможных альтернатив, используя функцию   options, которая берет текущие убеждения и намерения и возвращает множество желаний или возможностей  (desires)
фильтрация, когда агент осуществляет выбор среди альтернативных желаний (возможностей) и решает осуществить их. Для того, чтобы осуществить выбор среди альтернативных возможностей, используется функция  filter.

(10-37)

\subsection{Стратегии осуществления (достижения) намерений}
Следующие стратегии осуществления намерений обсуждаются в литературе, посвященной рациональным агентам:
Слепая стратегия Агент сохраняет намерение до тех пор, пока он верит, что оно осуществимо. Слепую стратегию иногда называют  фанатичным осуществлением.
Целенаправленное осуществление  Агент сохраняет намерение до тех пор, пока он верит, что оно осуществимо и не верит, что его осуществить невозможно.  
Объективное осуществление Агент сохраняет намерение до тех пор, пока он все еще убежден в  своих желаниях (возможностях).
В процессе выполнения стратегий осуществления намерений агент имеет как механизм окончания, осуществления намерений, так и механизм (means) перепланирования намерений. 
Если план оказался плохим, то он может быть перепланирован.

(10-40)

До проверки плана не останавливаться и не сомневаться в его соответствии намерению.
При проверке плана определять его успешность, возможность осуществления и корректность.  (Целенаправленное осуществление)

(10-42)

Агент пересматривает свои намерения сразу как только:
\begin{itemize}
\item он полностью выполнил план по осуществлению его текущих намерений; или
\item он верит, что он осуществил свои текущие намерения; или
\item он верит, что его текущие намерения больше недостижимы.  
\end{itemize}
Все это ведет к пересмотру намерений агента. Пересмотр возможен после выполнения каждого действия.

(10-44)

Пересмотр намерений дорог!  Дилемма:
агент не останавливается для пересмотра намерений слишком часто, а пытается достичь их пока не стало ясно, что они не могут быть осуществлены  или когда уже нет стимулов для их осуществления; 
агент, который постоянно  пересматривает намерения может  потратить  неприемлемо много времени на осуществление намерений  и имеет риск никогда их не осуществить. 
Решение: внедрить явно компонент мета-уровневого управления (meta-level control ), для принятия решения о пересмотре.

(10-46)

\section{Представление знаний в информационных системах (11)}
Языки представления знаний, отличные от языка логики предикатов первого порядка, в основе которых лежат категории и отношения между ними, были разработаны, руководствуясь убеждением, что логика предикатов неудобна для представления знаний в системах искусственного интеллекта. Эта точка зрения была основана главным образом на когнитивных экспериментах, проведенных с людьми, и желании иметь формализмы, которые близки к представлениям в головном мозге человека. 
Наиболее известными из этих формализмов, являются
\begin{itemize}
\item семантические сети,  
\item фреймы,
\item концептуальные графы,
\item дескриптивные логики, 
\end{itemize}
\subsection{Семантические сети}
Семантические сети берут начало в работе Quillian за 1967 год как некоторый графический формализм, основанный на использовании помеченных ориентированных графов, использующих различные виды дуг и вершин. Вершины представляют категории или объекты, а дуги отношения между ними. В последующие годы было разработано много различных семантических сетей, использующих основополагающую идею Quillian. Различные семантические сети различаются:
\begin{itemize}
\item вершинами категорий, 
\item вершинами объектов,  
\item дугами отношений между вершинами категорий, 
\item дугами отношений между вершинами категорий  и вершинами объектов,
\item дугами отношений между вершинами объектов,
\item дугами свойств категорий, 
\item дугами свойств объектов.
\end{itemize}
Дуги семантических сетей задают, как правило, следующие бинарные отношения: 
\begin{itemize}
\item наследования подкатегорией,  вершина которой соединена  дугой , направленной к вершине какой-либо категории, свойств категории.
\item несимметричные отношения между объектами, вершины которых соединены дугой,
\item несимметричные отношения между категориями, вершины которых соединены дугой,
\item свойства категорий как  несимметричного отношения между категорией и свойством, в вершину которой ведет дуга от вершины категории.
\end{itemize}

(11-06)

Семнтическая сеть - это знания. Вывод – обход по дугам, чтобы установить наличие или отсутствие тех или иных отношений. Возможно построить семантическую сеть, указав на ней исключения.

(11-09)

По такому графу можно сделать вывод о принадлежности объекта какому-то множеству. Доказательство наличия свойств объектов можно осуществить через логику предикатов первого порядка. (за 2021 отсутствует слайд 11-11,5)
К достоинствам можно отнести
\begin{itemize}
\item близость структуры сети, представляющей систему знаний, семантической структуре фраз на естественном языке;
\item универсальность, достигаемая за счет выбора соответствующего набора отношений;
\item наглядность системы знаний, представленной графически;
\item соответствие современным представлениям об организации долговременной памяти человека.
\end{itemize}
Недостатки семантических сетей:
\begin{itemize}
\item Только простые отношения могут быть представлены
\item Квантификацию и интенсиональные знания трудно представить  
  \begin{itemize}
  \item Некоторые птицы летают
  \item Все птицы поют некоторые песни
  \item Некоторые птицы поют все песни
  \item Михаил думает, что уверенность Жени в том, что Борису понравится их новый дом, ошибочна
  \end{itemize}
\item сетевая модель не дает (точнее, не содержит) ясного представления о структуре предметной области, поэтому формирование и модификация такой модели затруднительна;
\item сетевые модели представляют собой пассивные структуры, для обработки которых необходим специальный аппарат формального вывода;
\item проблема поиска решения в семантической сети сводится к задаче поиска фрагмента сети, соответствующего подсети, отражающей поставленный запрос. Это, в свою очередь, обуславливает сложность поиска решения в семантических сетях; 
\item представление, использование и модификация знаний при описании систем реального уровня сложности оказывается трудоемкой процедурой, особенно при наличии множественных отношений между ее понятиями.
\end{itemize}

\subsection{Фреймы}
Фреймы введены в 1981 год Минским (Minsky) как альтернатива логико-ориентированными подходам, которые он полагал не вполне адекватными  для моделирования человеческого мышления. Фреймы используют запись знаний (данных) как совокупность записей, позволяющих представлять знания, касающиеся ситуаций и объектов, включают возможность умолчаний, множественных перспектив и аналогий. Часто фреймы и семантические сети рассматривают как одно семейство формализмов. Однако в типичных семантических сетях описание  свойств ограничено примитивными атомарными свойствами, в то время как во фреймах это могут быть сложные концепты. Основная цель создания фреймов:
\begin{itemize}
\item собрать все знания, относящиеся к конкретной ситуации (например, вхождение в ресторан) в один объект, вместо того, чтобы распределять все это по различным аксиомам,
\item иными словами подобная ситуация (объект) должна быть в одном фрейме,  
\item фрейм содержит слоты, совокупность которых содержит информацию об одной ситуации.
\item Более структурированы, чем семантические сети
\item Вершины заменены информационными группами 
\item Фрейм – это слот и его содержимое (наполнитель)
  \begin{itemize}
  \item Слот – это свойство
  \item Содержимое – это значение
  \end{itemize}
\item Имеется возможность создавать абстрактные классы сущностей или их экземпляры (образцы)
\end{itemize}

(11-18,19)

Отношения на фреймах
\begin{itemize}
\item наследование подкатегорией,  вершина которой соединена  дугой , направленной к вершине какой-либо категории, свойств последней.
\item несимметричные отношения между объектами, вершины которых соединены дугой,
\item несимметричные отношения между категориями, вершины которых соединены дугой,
\item свойства категорий как  несимметричного отношения между категорией и свойством, в вершину которой ведет дуга от вершины категории.
\end{itemize}
(11-21)
Frame: Course
MemberSlot: enrolls 
ValueClass: Student 
Cardinality.Min: 2 
Cardinality.Max: 30 

MemberSlot: taught\_by 
ValueClass: Professor
Cardinality.Min: 1 
Cardinality.Max: 1

Frame: Graduate
SuperClasses: Course 
MemberSlot: enrolls 
ValueClass: GradStudent 
Cardinality.Max: 20

Frame: BasCourse
SuperClasses: Course 
MemberSlot: taught\_by 
ValueClass: Professor 

Frame: Student 
MemberSlot: degree 
ValueClass: String 
Cardinality.Min: 1 
Cardinality.Max: 1 

Frame: Undergraduate
SuperClasses: Student

\subsection{Концептуальные графы}
Универсальный сетевой язык для представления смысла. Впервые предложены в работе Джона Сова (John Sowa), 1984. Ресурсы: http://www.jfsowa.com/cg/ или http://conceptualgraphs.org/

Являются развитием формализма экзистенциальных графов и графической логики (Ч. Пирс);
Обладают выразительностью естественного языка и вычислительными возможностями символической логики;
Предназначены для реализации различных сетевых способов представления семантики;

\textbf{Концептуальный граф (conceptual graph)} — это конечный связный двудольный граф;
Используются узлы двух видов: первые представляют понятия, а вторые — концептуальные отношения (conceptual relation);
Метки дуг на графах не используются;
\begin{itemize}
\item Для отражения взаимосвязи между понятиями используются вершины, представляющие концептуальные отношения;
\item Чтобы различать вершины понятий и отношений используется графическое обозначение двух видов: прямоугольники — для вершин–понятий и эллипсы — для вершин отношений
\end{itemize}
Предложение «A cat chased mouse»:
\begin{itemize}
\item Четыре прямоугольника соответствуют концептам (понятиям): кот, преследовать, мышь и факт преследования, имеющий неявный тип «ситуация» («situation»);
\item Эллипсы соответствуют отношениям: «агент» («agent»), «объект» («object») и «время действия» («past»);
\item Последнее отношение присоединяется к графу–контексту, т.е. графу, который содержит вложенный в него подграф;
\end{itemize}
Представление концептуального графа  в текстовой форме:
\begin{verbatim}
(PAST) -> [[CAT] <- (AGENT) <- [CHASE] -> (OBJECT) -> [MOUSE]] 
\end{verbatim}

В отличие от дуг, соответствующих бинарным отношениям, вершины, представляющие концептуальные отношения, могут быть связаны с любым конечным количеством вершин–понятий. Аналогично какое-либо понятие может быть связано множеством отношений. Пример: «Миша сообщил Жене новость по электронной почте». Глагол «сообщить» связан с другими понятиями с помощью четырех концептуальных отношений: «агент» («agent»), «объект» («object»), «получатель» («recipient») и «средство» («mean»).
\begin{verbatim}
          [электронная почта] <- (mean)
                                  ^
                                  |
[person: Миша] <- (agent) <- [сообщить] -> (object)
                                  |            |
                                  v            v
          [person: Женя] <- (recipient)    [новость]
\end{verbatim}

В нотации концептуальных графов вводятся явные обозначения отношений класс–элемент, класс–подкласс. Любое понятие рассматривается как экземпляр конкретного типа. 
Обозначение: Вершина «Женя» имеет тип «person».
\begin{verbatim}
                       |
                       v
[person: Женя] <- (recipient)
\end{verbatim}
Тот факт, что один тип является подклассом другого типа принято обозначать символом $\leq$: person $\leq$ homo sapiens $\leq$ being

\textbf{Решётка (иерархия) наследования} Совокупность всех типов образует решетку множественного наследования, в которой каждый тип может иметь множество родителей и детей.Чтобы решетка типов была единой иерархией, в концептуальные графы включают два специальных типа: универсальный тип (universal type), являющийся суперклассом для всех классов, и абсурдный тип (absurd type), являющийся подклассом для всех типов. Универсальный тип принято обозначать символом $\top$, а абсурдный тип — символом $\bot$.

\textbf{Обобщённый маркер «*»} Для обозначения любого или неспецифицированного экземпляра используется обобщенный маркер «*». Метки понятий «person: *» и «person» являются эквивалентными и указывают на произвольный объект типа person. В дополнение к обобщенному маркеру «*» допускается использование переменных, например «person: *X». Для более сложных манипуляций с неспецифицированными экземплярами классов используются лямбда выражения. Пример: «Котенок ловит лапой свой хвост». Неизвестно, о каком конкретно котенке идет речь. Переменная *X позволяет указать, что лапа и хвост принадлежат одному и тому же котенку. 

\textbf{Индексный маркер «\#»} Для указания конкретного экземпляра класса, не используя при этом имени объекта служат индексные маркеры «\#», позволяющие отделить экземпляры от своих имен. Для указания имени объекта можно использовать отношение «name». Это позволяет, с одной стороны, указать для одного объекта несколько имен, а с другой стороны — обозначать различные объекты могут одним и тем же именем. Пример: «Рыжую лошадь звали женским именем Елена». Речь идет о свойстве имени какой-то конкретной лошади «быть женским». Отношение «gender» («род») указывает на свойство имени, а отношение «color» («цвет») — на свойство конкретной лошади. 

Канонические правила формирования
\begin{itemize}
\item Копирование (copy) — позволяет получить точную копию какого—либо графа.
\item Упрощение (detach) — позволяет исключить дублирующиеся отношения. Дублирование отношений часто возникает в результате операции объединения.
\item Ограничение (restrict) — позволяет заменить вершины понятий графа другими вершинами, представляющими их специализацию, или заменить метку типа на метку подтипа. 
\item Объединение (join) — позволяет интегрировать два графа в один, если одна из вершин первого графа, представляющая какое-либо понятие, идентична одной из вершин второго графа.
\end{itemize}

Пример специализации и обобщения концептуальных графов
Два исходных предложения «Manager hired a person» («Менеджер нанял на работу человека») и «Employee hired at data (13/12/06)» («Работник принят на работу 13/12/06»). Типы концептов в данном примере образуют следующую иерархию классов «manager $\leq$ employee $\leq$ person»: тип «person» является более общим (т.е. суперклассом) по отношению к «employee» и «manager», тип «manager» является подклассом типа «employee».
\begin{verbatim}
[manager]->(agent)->[hire]->(object)-> [person]
  [data] ->  (at) ->[hire]->(object)->[employee]
\end{verbatim}
Оба исходных графа содержат вершину «hire». Применяя правило объединения к этим двум графам, по вершине «hire» получим новый граф: 
\begin{verbatim}
[manager]->(agent)->[hire]->(object)-> [person]
                     >   \
  [data] ->  (at)   /     > (object)->[employee]
\end{verbatim}
На основании отношения класс–подкласс между концептами person и employee можно применить правило ограничения и заменить метку вершины «person» на метку «employee»:
\begin{verbatim}
[manager]->(agent)->[hire]->(object)->[employee]
                     >   \
  [data] ->  (at)   /     > (object)->[employee]
\end{verbatim}
Полученный граф содержит две вершины «employee», которые могут быть объединены в одну, т.к. указывают на один и тот же концепт. Операция упрощения позволяет устранить дублирование отношения «object» между концептами «hire» и «employee».
\begin{verbatim}
[manager]->(agent)->[hire]->(object)->[employee]
                     ^   
                     |
         [data] ->  (at)
\end{verbatim}
Часто возникает необходимость для определения отношений между высказываниями или высказыванием и концептом. Например, предложение «Tom believes that Marry like him» («Том верит, что он нравится Мэри») устанавливает отношение между концептом «believe» и высказыванием «Marry like Tom». В концептуальных графах вводится специальный тип высказывание (proposition), объектом ссылки которого является множество концептуальных графов (являющихся подграфами данного графа), обозначаемое прямоугольниками, содержащими подграф.

\subsection{Структура продукции}
Термин «продукция» принадлежит американскому логику Эмилю Леону Посту. В понимании Поста в качестве продукции выступала только та ее часть, которая сейчас называется ядром (А $\to$ В, ЕСЛИ А ТО В). В общем виде под продукцией понимается выражение следующего вида:
\[(i); Q; Р; А \to В; N.\]
Здесь i - имя (идентификатор) продукции, с помощью которого данная продукция выделяется из всего множества продукций. В качестве имени может выступать некоторая лексема, отражающая суть данной продукции (например, «покупка книги» или «набор кода замка»), или порядковый номер продукции в их множестве, хранящемся в памяти системы.

Q характеризует сферу (область) применения продукции. Разделение знаний на отдельные сферы позволяет экономить время при поиске решения задачи. Например, часть продукций описывает процесс приготовления пищи, а вторая – выбора маршрута путешествия и т. п. Основным элементом продукции является ее ядро: $А \to В$. Интерпретация ядра продукции может быть различной и зависит от того, что стоит слева и справа от знака знака $\to$. Обычное прочтение ядра продукции выглядит так: ЕСЛИ A ТО B. Более сложные конструкции ядра допускают в правой части альтернативный выбор, например, ЕСЛИ А ТО B1, ИНАЧЕ B2. Условие А называется антецедентом (условием),  действие В – консенквентом (следствием).

Если А ложно, то об истинности В ничего сказать нельзя, т.е. из лжи может следовать все, что угодно (для импликации принято, что следует истина). Возможны и другие интерпретации ядра продукции, например A описывает некоторое условие, необходимое для того, чтобы можно было совершить действие В.

Р есть условие применимости ядра продукции. Обычно Р представляет собой логическое выражение. Когда Р принимает значение «истина», ядро продукции активизируется. Если Р ложно, то ядро продукции не может быть использовано. Например, если в продукции «НАЛИЧИЕ ДЕНЕГ; ЕСЛИ ХОЧЕШЬ КУПИТЬ ВЕЩЬ X, ТО ЗАПЛАТИ В КАССУ ЕЕ СТОИМОСТЬ И ОТДАЙ ЧЕК ПРОДАВЦУ» условие применимости ядра продукции ложно, т.е. денег нет, то применить ядро продукции невозможно.

N описывает постусловия продукции. Они активизируются только в том случае, если ядро продукции реализовалось. Постусловия продукции описывают действия и процедуры, которые необходимо выполнить после реализации В. Например, после покупки некоторой вещи в магазине необходимо в описи товаров, имеющихся в этом магазине, уменьшить количество вещей такого типа на единицу. Выполнение N может происходить не сразу после реализации ядра продукции.

Прямой вывод называется также выводом, управляемым данными, или нисходящим. В таких системах поиск идет от исходных данных (фактов) к заключениям. T.е. проверяются условия А, включающие известные факты, и активизируются те продукции, для которых А истинно. После этого в рабочую память заносятся промежуточные заключения В’, которые в дальнейшем выступают как дополнительные факты для А’ и так до тех пор, пока не будет получено итоговое заключение В. Обратный вывод называется также выводом, управляемым целями, или восходящим. В таких системах выдвигается некоторая гипотеза В, а затем идет поиск промежуточных фактов A’, подтверждающих эту гипотезу. После этого в рабочую память заносятся промежуточные факты А’, которые в дальнейшем выступают как промежуточные гипотезы (заключения) В’. Если принятая гипотеза В приводит к известным фактам А, то она считается итоговым заключением.
Существуют также системы с двунаправленными выводами.

(11-43, 44, 45, 46, 47)

За
\begin{itemize}
\item Естественность и прозрачность
\item Легкость постановки задачи
\item Модульность
\item Легкость внесения изменений
\end{itemize}
Против
\begin{itemize}
\item Нет возможности представлять отношения между модулями знаний
\item Представление знаний иногда слишком громоздкое
\item Жесткий синтаксис
\end{itemize}

Достоинства
\begin{enumerate}
\item Подавляющая часть человеческих знаний может быть записана в виде продукций.
\item Простота создания и понимания отдельных правил.
\item Простота пополнения и модификации базы знаний (набора продукций).
\item Простота механизма логического вывода.
\item Разбиение системы продукций на сферы (декомпозиция) позволяет эффективно использовать ресурсы и сократить время поиска решения.
\item Возможность реализации немонотонного логического вывода и обработки противоречивых фактов.
\item Возможность параллельной и асинхронной обработки правил.
\end{enumerate}

Недостатки
\begin{enumerate}
\item Отсутствует теоретическое обоснование построения продукционных систем. В основном при их построении используются эвристические приемы.
\item Следствие из недостатка 1. При большом числе продукций процедура проверки непротиворечивости правил и корректности работы системы становится крайне сложной. Именно поэтому число продукций, с которыми работают реальные информационные системы, не превышает тысячи.
\item Следствие из недостатка 2. Возможность легкого внесения серьезных искажений в базу знаний, приводящих к неправильному функционированию системы (если в системе нет развитых средств проверки целостности базы знаний).
\end{enumerate}


\newpage
\section{Языки опиисаний онтологий(+12)}
OWL - ontology web language «Онтология – это спецификация концептуализации»  (Tom Gruber, Stanford). Абстракция – это упрощенный взгляд на мир, выраженный в соответствующем формальном языке с хорошо определенной семантикой. Общая онтология для множества агентов позволяет им взаимодействовать в определенной области знаний без необходимости выходить на уровень глобальной теории. Описан W3C, хотя первые попытки были произведены DARPA. подразделяется на несколько диалектов OWL full, OWL DL обеспечивает полноту, но использование ограничено, отражает связь с дескриптивной логикой, OWL Lite - наименьшие дескриптивные способности, но может быть промежуточным звеном при переходе к онтологиям.

Слабой стороной является то, что нельзя однозначно избежать добавления противоречивых сведений в онтологию. ОВЛ это прототип объектно-ориентированного программирования, представляет классы и свойства как ХМЛ. Для удобства и выразительности описания моделей сред часто вводятся особые, заранее предопределенные, непересекающиеся ни с какими другими категории  объектов. Чаще всего объекты этих категорий являются вымышленными.  Обычно эти особые категории объектов называются сортовыми категориями или сортами.

В определённом контексте класс может выступать в роли экземпляра.

База знаний состоит из конструкторов для построения сложных концептов, ролей из атомарных концептов и ролей.
Tbox: вводит используемую терминологию (terminology), т.е. словарь заданной области знаний. Словарь состоит из концептов, обозначающих множества индивидов, и ролей, обозначающих бинарные отношения между индивидами
Abox: содержит высказывания (assertions) в терминах введенного в Tbox словаря. Дескриптивная логика имеет модельно-теоретическую семантику.

Основная идея модельно-теоретической семантики состоит в том, что смысл различных частей утверждения задается интерпретацией I на модели M, состоящей из множества объектов или индивидов. 
Так, интерпретация логики предикатов первого порядка задаётся отображением термов в множества объектов или индивидов, а предикатов - в истинностные значения «истина» и «ложь».

\subsection{Конструкторы}
Атомарный концепт P – это множество всех объектов  x, которые обладают свойством P (на которых одноместный предикат P(x) истинен) 
Концептуальная конъюнкция P ⨅ Q – это множество всех пар объектов  x, y , удовлетворяющих свойствам  P и Q.
Концептуальная  дизъюнкция P ⨆ Q – это множество всех пар объектов  x, y , удовлетворяющих свойствам  P или Q.
Концептуальное отрицание  ¬P - это множество всех объектов х, которые не обладают свойством P (на которых предикат P(x) ложен).
Атомарная роль R.Q – это множество всех объектов  x  множества  Q которые обладают свойством R  (выполняют роль R , т.е. на которых двуместный предикат R(x,Q)   истинен). 
Экзистенциональная  квантификация атомарной роли ∃R.Q –подмножество объектов  мощностью не менее 1 из числа тех, кто выполняет роль  R и  принадлежит множеству Q .  
Пример: ∃имеетДетей.Женщины -  подмножество женщин из числа тех, что имеют детей  и принадлежат множеству Женщины .
Количественно ограничивающая квантификация атомарной роли ∀R.Q -  множество всех объектов, принадлежащих множеству Q и выполняющих роль R. 
Пример: ∀ имеетДетей.Женщины -  множество  всех женщин   множества Женщины, имеющих детей.   

Определение концептов в Tbox с помощью конструкторов
Женщина ≡ Личность ⨅ Женский пол
допускается только одно определение концепта, определения ацикличны (не могут определять сами себя непосредственно или опосредованно).
Женский пол, Мужской пол, Личность, Женщина - атомарные концепты.
Личность ⨅ ¬ Женский пол - те, кто не женского пола 
Женский пол ⨆ Мужской пол - те, кто женского или мужского пола

∀имеетДетей .Люди ⨅ ∃имеетДетей.Женщины из всех людей категории Люди , имеющих детей, существует по крайней мере один человек, являющийся женщиной.
(≥3имеетДетей) ⨅  (≤ 2имеетДочерей) из  трех и более имеющих детей не менее двух имеет дочерей
Женщины ⨅ ≤ 2(имеетДетей ⨅ имеетДочерей) - все женщины, имеющие не более двух детей, имеют самое большее двух дочерей

Далее вводится содержимое ABox.
это интерпретация обычной информации, например, предложений в понятиях ТБоксов.
(12-16)
Базовый принцип вывода в дескриптивной логике – это категоризация, записываемая как 
                                            С ⊑ D
Категоризация основана на проверке принадлежности категории C (видовая категория) к категории D (родовая категория).
Пример,
Женщина ⊑ Мать

Другой принцип при выводе – выполнимость, т.е. проверка того, что концептуальное выражение не описывает пустой концепт.

Фактически концептуальная выполнимость- это специальный случай категоризации, означающей проверку того, что родовой концепт не пуст.
\subsection{Стратегии вывода}
Несмотря на наличие модельно-теоретической семантики для DL, долгое время вывод основывался на графовом представлении концептуальных выражений в виде семантических сетей, где концепты – это вершины графа, а дуги  - это роли. 
Идея категоризации сводилась к трансформации двух входных концептов в помеченный граф и проверке встраиваемости его в граф концептуальных выражений (структурная категоризация).
Такая стратегия вывода оказалась значимой, но неполной.  В терминах семантики  это означает, что при ответе «да» все корректно, а ответ «нет» может быть некорректным.
Иными словами структурная категоризация оказалась слабей модельно-теоретической категоризации ЛППП.
От структурной категоризации отказались, была развита полная стратегия  категоризации (табло метод), базирующаяся на модельно-теоретической категоризации  DL как подмножества ЛППП. (Schmidt-Schauß and Smolka [1991])
В статье “The Tractability of Subsumption in Frame-Based Description Languages” Brachman and Levesque [1984] обратили внимание на связь между выразительностью и сложностью вывода в языке.
Они показали, что для языка, включающего пересечение концептов, простую форму экзистенциональной   квантификации, количественно ограничивающую квантификацию, можно построить вывод полиноминальной сложности, в то время как добавление ролевых ограничений делает вывод NP-полным.
Позднее этот вопрос зависимости сложности от выразительности был досконально изучен.

\subsection{табло метод}
Результат истинный если не выводима ложность.
Вершины дерева называются секвентами.
Само дерево секвентов называется табло.
Ветвь дерева (табло) называется закрытой, если в этой ветви в левой части секвента формула истинна, в правой части секвента эта же формула ложна. 
Ветвь дерева (табло) называется открытой, если в секвенте этой ветви слева появляется  истинная формула, а справа – ложная,  эти формулы различны, и при этих значениях формул вся левая часть секвента часть истинна, а правая - ложна.
В последнем случае открытой ветви конечный секвент представляет контр пример.

(12-21)
p ∧ (q ∨ r) ⊨  (p ∧ q) ∨ r.              Предполагаем, что при истинной формуле p ∧ (q ∨ r) формула  (p ∧ q) ∨ r является ложной.

Истинность конъюнкции   p ∧ (q ∨ r) в левой части  означает  истинность p и  (q ∨ r) 


Ложность дизъюнкции (p ∧ q ) ∨  r  в правой части означает ложность    (p ∧ q ) и  r


Истинность p и  (q ∨ r) в левой части  означает   истинность p  и  q  или p  и  r  в левой части.  Из истинности  формулы   r  в левой части не может следовать ложность r  в правой части, т.е. из истинности p  и  r не выводима ложность  (p ∧ q ) и  r. Это записываем как p, r • p ∧ q, r  и прекращаем соответствующую ветвь дерева 
   
Ложность формул  (p ∧ q )  и  r в правой части  означает ложность формул               p и r, а также q и  r. Из истинности  формулы   p  в левой части не может следовать ложность p, а из истинности  формулы   r  в левой части не может следовать ложность r  в правой части. Таким образом, имеем   p, q  • p , r ;  p, q  • q, r .  Все ветви дерева  завершились противоречиями. Следовательно наше предположение о ложности формулы ошибочно и p ∧ (q ∨ r) ⊨  (p ∧ q) ∨ r

(12-23) Ветвь с  конечным секвентом r ⨀ p  открыта и представляет контр-пример, поскольку при истинности r  и ложности p  имеем контр-пример
Для ((p ∧ q) ∨ r) ⊨ (p ∧ (q ∨ r)), 
      поскольку
формула (p ∧ q) ∨ r истинна при истинной r, а
формула p ∧ (q ∨ r) ложна при ложной p.

\section{Основы $\pi$ исчислений(13)}
\subsection{История формализации исчислений}
Исследования в области формализации вычислений были начаты в 20-х годах американскими математиками (машина Тьюринга,  $\lambda$-исчисление, принцип фон Неймана построения ЭВМ,  $\lambda$-исчисление Алонзо Черча). 

$\lambda$-исчисление базируется на так называемой денотационной семантике, пытаясь аналитически описать сами исследуемые функции. Такая семантика более характерна для функционального подхода к программированию. Изначально $\lambda$-исчисление создавалось Черчем для формализации понятия алгоритма и исследования предложенных им же частично-рекурсивных функций.

\[\lambda m.n\]
Означает функцию m с параметрами n.

Хорошо известен тезис Черча, в котором утверждается, что любая вычислимая функция эквивалентна некоторой частично-рекурсивной функции. Черч обнаружил некоторые проблемы с применением $\lambda$-исчисления и практически перестал им заниматься.

Через несколько десятков лет обнаружилось, что несмотря на некоторые внутренние проблемы, $\lambda$-исчисление может быть достаточно успешно использовано для вычисления на компьютере описываемых им же функций. Была создана парадигма функционального программирования и язык программирования LISP. Было возобновлено исследование свойств $\lambda$-исчисления, которое помогло ответить на многие вопросы, связанные с практическим программированием.

В середине 70-х годов в Кембридже были начаты исследования вопроса о возможности применения $\lambda$-исчисления для описания взаимодействующих процессов. Вопросом описания взаимодействующих процессов стали заниматься многие английские ученые, и к началу 80-х годов появились три теории, претендовавшие на то, чтобы называться "алгеброй процессов”:

\begin{itemize}
\item Communicating Sequential Processes (CSP), разработанная Хоаром,
\item Algebra of Communicating Processes (ACP), предложенная Бергстра и Клоппом (которые и предложили термин "алгебра процессов"), 
\item Calculus of Communicating Systems (CCS), предложенная Милнером.
\end{itemize}

В данной лекции представляем основы $\pi$-исчисления - формальной теории, являющейся расширением  алгебры CCS и основанных на работах Милнера. Данный подход аналогичен в своей методологии $\lambda$-исчислению и может быть успешно применен для описания и более глубокого понимания параллельных процессов

\subsection{Процессы и каналы}
Имеем два процесса $P$ и $Q$. Процесс $Q$ принимает данные от процесса $P$ по каналу $x$, соединяющему процессы $P$ и $Q$. Канал может быть входным $x$ и выходным $\bar{x}$. Процесс $P$ имеет выходной канал $\bar{x}$ и готов передать данные с именем $z$ по выходному каналу с именем:
\[P \equiv \bar{x}z.P'\]

Процесс $Q$ имеет входной канал $x$ готов принять данные c именем $y$ по входному каналу с именем $x$:
\[Q \equiv x(y).Q'\]

Если процесс $Q$ готов передавать данные с именем $w$ по выходному каналу $y$ какому-либо процессу         
\[R \equiv y(z).R'\]

по его входному каналу $y$, но этот входной канал не соединен с выходным каналом $\bar{y}$ процесса $Q$, то имя входного канала $y$ может быть передано процессу $Q$ каким либо процессом $P$ по каналу $x$, чтобы осуществить это соединение. Возможность такой передачи записывается следующим образом
\[Q \equiv x(z).\bar{z}w.Q'\]

Передачу процессу $Q$ имени канала $y$ на место канала $z$ может осуществить любой процесс $P$, имеющий выходной канал $x$. Передача процессу $Q$ имени входного канала $y$ процесса $R$ процессом $P$, имеющим выходной канал $x$, записывается следующим образом
\[(vx)(P|Q|R) \equiv (vx)(\bar{x}y.P'|x(z).\bar{z}w.Q'|y(z).R')\]

Здесь запись $P|Q|R$ означает, что процессы $P$, $Q$, $R$ выполняются параллельно, а запись $(vx)(P|Q|R)$ означает,  что канал $x$ может использоваться только процессами $P$, $Q$, $R$.

\subsection{Редукция при передаче имени канала}
Процесс передачи имени канала моделируются с помощью редукции выражения 
\[(vx)(P|Q|R) \equiv (vx)(\bar{x}y.P'|x(z).\bar{z}w.Q'|y(z).R')\]
\def\svgwidth{100mm}
\input{pics/02-iskr-00-red1.pdf_tex}


Редукция - это процесс преобразования выражения с помощью применения правил вывода. Рассмотрим редукцию указанного выше выражения. Вначале происходит передача по каналу $х$ имени канала $y$, получается
\[(vx)(\bar{x}y.P'|x(z).\bar{z}w.Q'|y(z).R') \to (vx)(P'|\bar{y}w.Q'|y(z).R')\]
\def\svgwidth{100mm}
\input{pics/02-iskr-00-red2.pdf_tex}

В процессе $Q'$ все вхождения $z$ заменяются на $y$, а затем происходит передача $w$ по каналу $у$:
\[(vx)(P'|\bar{y}w.Q'|y(z).R') \to (vx)(P'|Q'|R')\]
\def\svgwidth{100mm}
\input{pics/02-iskr-00-red3.pdf_tex}

и в $R'$ все вхождения $z$ заменяются на $w$. Целью редукции является приведение процесса к форме, в которой редукция более невозможна.

(10)

(11)
Процесс передачи процессом $P$ процессу $Q$ имени, например процесса $R$ моделируется с помощью редукции выражения 
\[(vx)(P|Q) \equiv (vx)(\bar{x}R.P'|x(z).Q)\]

Вначале происходит передача по каналу $х$ имени процесса $R$:
\[(vx)(P|Q) \equiv (vx)(\bar{x}R.P'|x(z).Q) \to (vx)(P'|x(R).Q)\]

В процесс $Q'$ добавляется имя $R$:
\[(vx)(P'|x(R).Q) \to (vx)(P'|Q')\]

\subsection{Процессы}
 (12)
 Определим теперь $\pi$-исчисление более формально. 
π-исчисление включает 2 множества имен:
Множество имен переменных 
N = {х, у,...}
(строчные латинские символы с индексами или без индексов);
Множество имен процессов 
K = {Р, Q,...}
(прописные латинские символы с индексами или без индексов).

(13)
$P::=0$ пустой процесс (окончание исчисления)
$\nu z P$ значит процесс $P$ может использовать переменную $z$

0 - пустой процесс, не выполняет никаких действий.
Р + Q - сумма процессов, представляет два процесса  Р и Q, из которых выполняется всегда только один.
Выполнение только одного из них регулируется префиксом (см. ниже).

\subsection{Префикс $\pi$.P}
(15)
P –процесс.
π - один из префиксов, означающих следующее:
       - процесс P готов осуществить вывод значения х в выходной канал        .
у(х) - процесс P готов осуществить чтение значения x из канала у и замену всех вхождений переменной х в процессе Р на считанное значение x.
τ - процесс P готов к выполнению без взаимодействия с внешним миром. Внутри Р взаимодействия могут происходить.

(16)
Композиция, репликация, ограничение, сравнение
P  ⎜Q, - композиция Р и Q. Композиция означает, что процессы Р и Q выполняются параллельно.  
!Р - репликация. Репликация означает повторение выполнения процесса Р любое количество раз.
(νх)Р или (νх)Р – ограничение. Ограничение означает, что только процесс Р может взаимодействовать с внешним миром по каналу х.
ϕР – сравнение. Сравнение означает, что  при истинности равенства  ϕ выполняется процесс Р, в противном случае выполняется пустой процесс 0.

(17)
 P(x1,x2,... ,хп) - параметризация. 
	Параметризация означает, что процесс имеет параметры x1,x2,... ,хп, являющиеся именами портов или переменных, которые при использовании процесса могут инстанциироваться (конкретизироваться), т.е. вместо имен параметров x1,x2,... ,хп,, при использовании процесса P подставляются имена параметров y1,y2,... ,yп. 
Параметризация процесса используется также при задании его в виде уравнения
P(x1,x2,... ,хп)     <определение процесса>

(18) Правила помеченных переходов
Каждое процессное выражение, может переходить(преобразовываться) в другое процессное выражение с помощью следующих правил перехода (преобразования).

(19)

MISM1: Если в процессном выражении существует переход                     т.е.   			P def= α.P’+M и [|ϕ|]=true, 
	где [*ϕ*]=true означает истинность формулы ϕ после подстановки  констант в ее левую и  правую части (равенство левой константы правой константе), то 				ϕPQ α → P’

MISM2: Если в процессном выражении существует переход,                    т.е.  
				 Q def= α.Q’+N и [|ϕ|]=false, 
                 где [|ϕ|]=false означает ложность формулы ϕ после подстановки  констант в ее левую и  правую части (неравенство левой константы правой константе), то 				 ϕPQ α → Q’

(20-27)

\section{Спецификация в языке $\pi$-исчисления и проверка ее корректности (14)}

                 
\appendix
\setcounter{secnumdepth}{0}
\section*{Приложения}
\addcontentsline{toc}{section}{Приложения}
\renewcommand{\thesubsection}{\Alph{subsection}}

\subsection{Семинар 1 (2022-02-15)}
Аспекты логического программирования на примере решения прикладных задач. Можно заменить на машинное обучение (взять нейросеть, обучить, и будем получать близкие к человеческим решениям). Но в этом случае мы не получим обоснование решения. Машины логического вывода предоставляют не только решение, но и обоснование (путь, принятные промежуточные решения), по которому это решение было получено.

Программа на языке Prolog - это обычный текст (например, законов) формализованный в виде правил. Исходные данные (например, совершённое преступление) формализуются в виде фактов, программе задаётся теорема (вопрос виновен или нет). Программа строит дерево логического вывода, позволяющее проследить путь от начальных фактов до финального решения. Все выводы язык делает на основе строгой логики.

Языки программирования делятся на:
\begin{multicols}{2}
  \textbf{процедурные} - описание алгоритма по шагам. C++, Python, Java, JS, Assembler, C\#. Незначительно отличаются друг от друга, являются языками общего назначения, в принципе на любом можно решить любую задачу. Некоторые являются мультипарадигменными, то есть включают в себя декларативные возможности, но работают не так эффективно в части решения задач декларативного програмирования.
  
  \columnbreak

  \textbf{декларативные} - описание требований, предъявляемых к решению, сам алгоритм не описывается. Их может быть даже больше, чем процедурных, но все узкоспециальные. Впрочем, б\'{о}льшая часть из них являются расширениями или плагинами к Prolog.
\end{multicols}

Примеры декларативных языков:
\begin{itemize}
  \item Prolog (общий, широкопрофильный язык), 
  \item AgentSpeak (для мультиагентных систем), 
  \item PDDL (planning domain definition language, фактически для решения квестов, есть предикаты для действий, условий, итд), 
  \item CLP (constraint logic programming, расширение пролога для комбинаторного перебора),
  \item CHR (constraint handling rules, используя правила машина вывода пытается добавить новые правила на основе введённых, логистика, расписания, синтаксический разбор текстов),
  \item OWL (создание онтологий), 
  \item SPARQL (запросы к онтологиям). 
\end{itemize}

Декларативные языки удобны, когда мы либо вообще не знаем алгоритм решения, или он в принципе известен, но на его реализацию слишком мало времени, для прототипирования. \textbf{Prolog} - относительно широкая область применения. Будем его изучать, поскольку он является основой для изучения других декларативных языков. Будем работать с \textbf{SWI Prolog}.

Предикат - это минимальная единица. Функция, возвращающая булево значение. Описывается в секции \code{predicates}. Предикаты несут смысловую нагрузку и при описании обязательно указываем типы принимаемых параметров. В примере (\hrf{text:sample-one}) - символические константы: человек и вид спорта.

Аксиомы (факты и правила). Факт - это одиночный предикат с конкретными значениями, возвращающий истину. Факты заканчиваются точкой. Правила состоят из двух частей, разделённых двоеточием и минусом (\code{:-}). Правило означает, что если справа все предикаты истинны то слева тоже будет истина (логическое следование справа налево). Могут быть указаны через запятую. Правила позволяют выводить новые факты. Если параметр написан с маленькой буквы - это константа, если с большой - переменная. Аксиомы записываются в секции \code{clauses}.

Теоремы (секция \code{goal}). Программа пытается доказать целевую формулу. Если решение удалось доказать возвращается истина, если не удалось ложь.

Если в формуле два предиката записаны через запятую, то это логическое И. Если через точку-с-запятой, то это логическое ИЛИ.

В языке Prolog есть возможность производить вычисления и возвращать результат как параметр предикатов (\hrf{text:sample-three}).

\setword{\textbf{Пример №1}}{text:sample-one}
\begin{lstlisting}[language=Prolog]
  predicates
    likes(symbol, symbol)
  clauses
    likes(elen, tennis).
    likes(john, football).
    likes(tom, baseball).
    likes(mark, tennis).
    likes(mark, football).
    likes(bill, Activity):-likes(tom, Activity).
  goal
    likes(bill, baseball).
\end{lstlisting}

Выполнение программы всегда начинается с целевой формулы и просматриваются \textbf{clauses}. Смотрим факты. Смотрим правила. Прежде, чем использовать правило, его надо преобразовать под нашу формулу (чтобы совпадали правило и теорема). Так \code{likes(bill, Activity):-likes(tom, Activity)} преобразуется в \code{likes(bill, baseball):-likes(tom, baseball)}.

Строится дерево:
\begin{enumerate}
\item \code{likes(bill, baseball).}
\item \code{likes(tom, baseball).}
\end{enumerate}

Получается, что доказав правую часть мы автоматически докажем левую. Второй элемент дерева (нижний, приведённый) доказываем аналогично. И поскольку второй элемент - факт, первый оказывается доказанным.

\setword{\textbf{Пример №2}}{text:sample-two}: задача чуть сложнее
\begin{lstlisting}[language=Prolog]
  predicates
    likes(symbol, symbol)
  clauses
    likes(elen, tennis).
    likes(john, football).
    likes(tom, baseball).
    likes(mark, tennis).
    likes(mark, football).
    likes(bill, Activity):-likes(tom, Activity).
  goal
    likes(Person, tennis), likes(Person, football).
\end{lstlisting}
  
Решение:
\begin{enumerate}
\item \code{likes(Person, tennis), likes(Person, football).} теорема
  \begin{enumerate}
  \item \code{likes(Person, tennis).} ищем персон с любовью к теннису
    \begin{enumerate}
    \item \code{likes(elen, tennis).} елена не доказуема, подставляем других, 
    \item \code{likes(mark, tennis).} для тенниса нашли марка, доказали теорему
    \end{enumerate}
  \item \code{likes(Person, football).}
    \begin{enumerate}
    \item \code{likes(mark, football).} марк удачно подошёл ещё и под футбол
    \item \code{likes(john, football).} джона даже проверять не нужно
    \end{enumerate}
  \end{enumerate}
\end{enumerate}

\setword{\textbf{Пример №3}}{text:sample-three}: функция инкрементирования числа
\begin{lstlisting}[language=Prolog]
  predicates
    increment(integer, integer)
  clauses
    increment(X, Y) :- Y is X+1.
  goal
    X = 1, increment(X, Y)
\end{lstlisting}
Решение будет найдено по следующему алгоритму:
\begin{enumerate}
\item число 1 присваиваем в \code{X}
\item передаём значение \code{X} в предикат как в подпрограмму
\item выполняется вычисление правой части и присваивание к \code{Y}.
\item \code{Y} возвращается и равен двум.
\item если не используем оператор \code{is} то выражение справа будет рассматриваться как строка.
\end{enumerate}

Отсюда неверная реализация:
\begin{lstlisting}[language=Prolog]
  predicates
    increment(integer)
  clauses
    increment(X) :- Х is X+1.
  goal
    X = 1, increment(X)
\end{lstlisting}
По сути, мы говорим \code{1 = 2}, и ответом будет «нет решений». Все переменные подставляются один раз для каждого шага, это делается для ускорения обратимости вычислений.

\setword{\textbf{Пример №4}}{text:sample-four}: функция минимума из двух чисел
\begin{lstlisting}[language=Prolog]
  predicates
    min(integer, integer, integer)
  clauses
    min(X, Y, Z) :- X<Y, !, Z=X.
    min(X, Y, Z) :- Z=Y.
  goal
    min(1, 5, Result)
\end{lstlisting}
Оператор восклицательного знака (\code{!}) это оператор отсечения, то есть, если первое правило сработало, то мы не применяем второе правило. если первое правило не сработало - идём проверять следующие. В приведённом примере оператор отсечения можно прочитать так: если \code{X<Y}, то \code{Z=X} иначе \code{Z=Y}.

В описании предиката можно использовать знак нижнего подчёркивания (\code{\_}) для обозначения незначащего параметра.

\code{fail.} в конце описания goal блокирует вывод найденного решения.

\code{write(X," ")} выведет найденные Х в строку через пробел.

findall(param, predicate, outList) сложит всё, что истинно в параметре для предиката в список

length(list, variable) длина списка

\subsection{Семинар 2 (2022-03-01)}
\textbf{Логическое программирование в ограничениях} (Материал к РК1 и ЛР2)
CLP - constraint logic programming

Используется, когда нужно решить задачу определения значения нескольких вхаимосвязанных переменных на которые накладываются требования. Задачи предполагают перебор и обычно переменных очень много (десятки и сотни). если в лоб перебирать - время будет слишком большое. на этапе задания ограничений отбрасываем заведомо неверные случаи. Бывают ситуации, когда мы уже знаем переменную, которая должна быть ограничена, но не знаем точное значение. Это позволяет на этапе подстановки значения отсеять неподходящие варианты (обычно такие проверки в процедурных языках это делается в сеттерах и геттерах с обработкой условий). Также можно решать оптимизационные задачи (искать решения в которых переменная принимает крайние значения).

Разновидности:
\begin{itemize}
\item CLP(FD), CLP(Z) - finite domain - счётное множество, целые числа
\item CLP(B) булево
\item CLP(Q) рациональные числа
\item CLP(QR) вещественные
\item CHR - для создания новых систем CLP
\end{itemize}

Применение в основном для подбора значений переменных для удовлетворения условиям. Например, есть парк самолётов и есть экипажи, надо распланировать так, чтобы люди отсутствовали дома не более, чем определённый норматив. Пролог составит фактически расписание полётов.

переменные бывают трёх видов
\begin{itemize}
\item mutable - изменяемые переменные. Как и обычная переменная, можно объявлять, многократно менять, и так далее
\item логические - переменная пролога. после того как присвоено значение - менять его нельзя до окончания построения дерева логического вывода. два состояния - свободная и связанная. свободную ещё не считали, связанную уже посчитали и присвоили значение (unmutable). для использования в выражениях можно использовать только связанные. 
\item ограниченные переменные - то, что можно сравнить с ифчиками обычного программирования. С каждой переменной сопоставляется диапазон (интервал) значений и переменная-ограничение сокращает эти интервалы согласно правил. Можно в выражении использовать переменные без конкретных значений (потому что используем диапазон). 
\end{itemize}

\textbf{Откатывание}.
foo(X) :- X in 1..3.
foo(X) :- X in 5..7.
foo(X) :- X in 8..12.
обычно в прологе множества в предикатах объединяются по ИЛИ. В CLP такая программа будет работать иначе. Будет выполнено только первое правило, вся программа будет выполнена до конца и если решение найдено то будет распечатан ответ. В любом случае произойдёт откат и применит все вычисления для следующего варианта предиката.

Для хранения к переменной добавляется атрибут (который может также быть множеством, перечислительным или целочисленным)

Классическая задача для CLP:
 SEND
+MORE
MONEY

Разработка производится в три этапа
описание переменных и ограничений
подбор
запуск и вывод.

Для определения конкретных значений переменных после расчёта их множества значений существует несколько механизмов
1. хардкод
2. использовать предикат indomain(x). пролог будет по очереди перебирать все значения из диапазона возможных
3. использвоать label/labeling. 2 принимает все переменные и доп опции, сам всё перебирает. опции - стратегия перебора (выбор из готовых) если по стратегии долго, можно выбрать другую. - сортировку ответов. 1 применяет стратегию по умолчанию и принимает только набор переменных. стратегия first fail - если причиной ненахождения решения является какая-то переменная, то переменная в сравнением меняется. (х = 0-1млн, у = 0-2, не будем для каждого у сравнивать по всем х, а будем брать х и очень быстро проверять все значения у.) чтобы применять лейбл нужно обязательно задать переменной множество значений.

ограничения всегда в начало подставляется решётка.
\begin{enumerate}
\item равно
\item неравно
\item больше
\item меньше
\item большеравно всегда углом в знак равенства
\item меньшеравно
\end{enumerate}
отличия между обычным и ограничительным сравнением на равенство
= синтаксическое равенство (можно использовать для сложных выражений, списков, структур)
\#= обозначает равенство в арифметическом смысле

неравенство может возвращать диапазоны %inf..0\/2..sup

\textbf{Реификация} импликация, эквивалентность

Ограничение можно передавать в качестве параметра другому предикату. 

\subsection{Семинар 3 (2022-03-15)}
\textbf{Программирование наборов решений (Answer Set Programming)}
В 2016 принят закон (Regulation EU 2016/67,9) об автоматической обработке персональных данных, появилось требование: любое решение может быть отменено, если оно не объяснено понятными человеку обоснованиями.
Это дало импульс к развитию логического программирования.
\begin{itemize}
\item Prolog - Programming in logic;
\item ASP - answer set programming;
\item CLP - Constraint logic programming;
\item ASP + CLP = CASP - constraint answer set programming (2020 г.)
\end{itemize}
Мотивация - ограничения классического пролога.
\begin{enumerate}
\item \textbf{Предположение о замкнутости мира.} В прологе указываем факты и правила. Факты считаются истинными. Новые факты тоже являются истинными. Все остальные факты (которые не указаны и то, что не выведено программной логикой) считается ложным. В реальности это не всегда так. Например, может оказаться, что какой-то факт не указан в программе, потому что нет начального знания о его истинности, или его просто-напросто забыли.
\item \textbf{Обработка зацикленных, рекурсивных правил.}
  \begin{lstlisting}[language=Prolog,style=CCodeStyle]
    a :- b.
    b :- a.
      ?- a.
  \end{lstlisting}
Пролог не сможет выполнить такую программу, поскольку это бесконечный цикл. В реальных системах бывают случаи рекурсивных правил, полностью исключить взаимовлияния правил нельзя. 
\end{enumerate}
ASP делает попытку решить эти проблемы. Построена на правилах, но стратегия отличается.
\begin{lstlisting}[language=Prolog,style=CCodeStyle]
  a :- b, c, not d, not e. % <@\lh{dkgreen}{обычное правило}@>
  a. % <@\lh{dkgreen}{факт}@>
\end{lstlisting}
где вся конструкция - это \code{r} (rule), левая часть \code{h(r)} head-of-rule, правая часть \code{B(r)} body-of-rule. Порядок написания предикатов не важен, предикаты могут быть записаны с отрицанием. Предикаты без отрицания \code{B(r)+}, предикаты с отрицанием \code{B(r)-}. Если все \code{B(r)+} становятся истинными, а все \code{B(r)-} становятся ложными, то h(r) становится истинным.

Не все правила могут быть задействованы при исчислении. Система отталкивается от программы, а не от запроса. При запуске машина пытается вывести вообще все факты, и только потом смотрит, что написано в запросе и если находит, то выводит. Если есть противоречия в правилах - программа не будет работать. 

Вводится понятие обозначения для программы. Пусть $X$ - это множество фактов, которые полагаются истинными (некоторая база знаний). Тогда $Y = T_PX$ - это множество фактов, выведенных в результате применения программы $P$ к исходному множеству фактов $X$. То есть программа генерирует новые знания на основе существующих. Программа может дать два вида результатов:
\begin{enumerate}
\item Модель программы - это множество фактов $X$, которое является замкнутым, относительно этой программы $P$. Замкнутость означает, что если применить программу ко множеству $X$, то результатом будет это самое множество.
  \[X = T_PX.\]
  Это даёт понимание, что факты в программе описаны полностью и непротиворечиво.
\item Устойчивая модель программы - это множество фактов $X$, которое выводится из программы $P$ в предположени о замкнутости мира. УМ не полностью совпадает с МП.
  \[ T_PX = \{h(r), r\in P: B(r)^+ \subseteq X, B(r)^-\cap X = \oslash.\]
  То есть некоторое множество фактов, и новый факт генерируется если все его ложные предикаты в правиле ложны, а истинные истинны.
\end{enumerate}

Позитивная программа - это та, в правилах которой нет отрицаний. Процедура описания устойчивой модели для позитивной программы (ответа, который получается при выполнении программы):

\begin{equation*}
  \begin{gathered}
    \text{Пусть:}\\
    T_PX = \{h(r), r\in P: B(r)^+ \subseteq X \} \\
    X := \oslash \\
    \text{Пока:}\\
    X \neq T_PX\\
    X := T_PX
  \end{gathered}
\end{equation*}

Стартуем от пустого множества, далее к $X$ применяем программу, в $X$ попадают факты. Проверяем, на совпадение с исходным множеством, если не совпадает - снова применяем программу. Если новых не добавилось - прогамма завершает работу.

\textbf{Пример 1:}
\begin{equation*}
  \begin{gathered}
    P \begin{cases}
      a.\\
      b :- a.
    \end{cases}\\
    X_0 = \oslash; T_PX_0 = \{a\}; \\
    \to X_1 =\{a\}; T_PX_1 = \{a, b\}; \\
    \to X_2 = \{a, b\}; T_PX_2 = \{a, b\}    
  \end{gathered}
\end{equation*}
На втором шаге получена устойчивая модель.

\textbf{Пример 2:}
\begin{equation*}
  \begin{gathered}
    P \begin{cases}
      a.\\
      b :- a.\\
      c :- d.
    \end{cases}\\
    X_0 = \oslash; T_PX_0 = \{a\}; \\
    \to X_1 =\{a\}; T_PX_1 = \{a, b\}; \\
    \to X_2 = \{a, b\}; T_PX_2 = \{a, b\}    
  \end{gathered}
\end{equation*}
Становится ясно, что третье правило не используется. УМ совпадает с УМ из первого примера.

\textbf{Пример 3, рекурсия:}
\begin{equation*}
  \begin{gathered}
    P \begin{cases}
      a.\\
      b :- a, c.\\
      c :- b.
    \end{cases}\\
    X_0 = \oslash; T_PX_0 = \{a\}; \\
    \to X_1 =\{a\}; T_PX_1 = \{a\}; 
  \end{gathered}
\end{equation*}
Проблема рекурсии решилась, поскольку неизвестно, как вычислять b и c.

\textbf{Пример 4, рекурсия с отрицанием:}
\begin{equation*}
  \begin{gathered}
    P \begin{cases}
      a.\\
      b :- a, \text{not c}.\\
      c :- b.
    \end{cases}\\
    X_0 = \oslash; T_PX_0 = \{a\}; \\
    \to X_1 =\{a\}; T_PX_1 = \{a, b\}; \\
    \to X_2 = \{a, b\}; T_Px_2 = \{a, b, c\}; \\
    \to X_3 = \{a, b, c\}; T_pX_3 = \{a, c\}; \\
    \to X_4 = \{a, c\}; T_PX_4 = \{a\}. \text{Программа зацикливается}
  \end{gathered}
\end{equation*}

Для программ с отрицанием мы не можем сказать, есть ли в принципе ответ. Для программ с отрицанием вводят специальный объект - редукция $P^X$ программы $P$. Относительно множества $X$ получается из программы $P$ следующими манипуляциями:
\begin{itemize}
\item [] Если $r\in P$ и $B(r)^- \cap X \neq \oslash$, то r отбрасывается;
\item [] Если $r\in P$ и $B(r)^- \cap X = \oslash$, то r включаем, но без отрицательных элементов;
\end{itemize}

Редуцированное множество полностью положительное. Процедура отыскания УМ для программы $P$ общего вида: используется редукция и исходное предположение. Положим, что УМ - это некоторое множество фактов $Y$.
\begin{equation*}
  \begin{gathered}
    \text{Пусть:}\\
    T_{P^y}X = \{h(r), r \in P^y: B(r)^+ \subseteq X \}\\
    X:= \oslash\\
    \text{Пока:}\\
    X \neq T_{P^y}X \\
    X:= T_{P^y}X\\
    \text{Если}\\
    X=Y, \text{Возвращаем Y в качестве результата, иначе провал}
  \end{gathered}
\end{equation*}

\textbf{Пример исчисления с применением редуцирования:}
\begin{equation*}
  \begin{gathered}
    P \begin{cases}
      a.\\
      b :- a, \text{not c}.\\
      c :- b.
    \end{cases}\\
    Y = \oslash, X_0 = \oslash; \\
    P^y \begin{cases}
      a.\\
      b:-a.\\
      c:-b.
    \end{cases}\\
    T_{P^y}X_0 = \{a\} = X_1; \\
    \to T_{P^y}X_1 = \{a, b\} = X_2; \\
    \to T_{P^y}X_2 = \{a, b, c\} = X_3; \\
    \to T_{P^y}X_3 = \{a, b, c\}; \text{Не решение, истинность b подразумевает ложность c}
  \end{gathered}
\end{equation*}

Сделаем другие предположения об изначальной истинности:
\begin{equation*}
  \begin{gathered}
    y=\{a\} \text{Не решение}\\
    y=\{a, b, c\} \text{Не решение}\\
    y=\begin{cases}
      a.\\
      c:-b.
    \end{cases}\\
    X_0 = \oslash; \\
    T_PX_0 = \{a\}=X_1\\
    T_PX_1 = \{a\}\\
    y=\{a, b\} \text{Не решение}\\
    y=\{a, c\} \text{Не решение}
  \end{gathered}
\end{equation*}
Нет устойчивой модели.

\textbf{Лабораторная работа №3}
есть текст о группе людей; есть характеристики людей и действия; есть подсказки - связи между свойствами людей; нужно вычислить какие характеристики связаны с какими людьми; задача написать программу на АСП, чтобы получить такое решение.

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

правила
\begin{enumerate}
\item факт - простой как в прологе
\item характеристики бывают числами, чтобы учитывать порядок
\item обычные правила «если-то»
\item во всех правилах надо будет назначить людям характеристики, чтобы это сделать используется выбирающее правило. позволяют для данного объекта добавить нужное кол-во фактов. =1 гарантирует, что для одного человека будет назначена только одна тема лекции и только одна. такое присвоение надо дополнительно проверять и это делается с помощью глобальных ограничений
\item глобальное ограничение - без левой части. ждут пока программа не выведет все возможные правила. пишем условия, которые запрещены в программе - это уничтожающее правило. если удалось обратить правило в истину - происходит перегенерация правил, потому что этот набор не будет решением. В наших вариантах должно быть только одно решение
\item директивы отображения результата show
\end{enumerate}

Позволяет работать с программами с неполностью заданным условием. делаем предположение, что есть правильное решение, преобразуем к отсутствию отрицательных элементов, 
Пример 1: есть программа.
\begin{equation*}
  \begin{gathered}
    p=\begin{cases}
  p:-p.\\
  q:-not p.
    \end{cases}
  \end{gathered}
\end{equation*}
X - это предположение об устойчивой модели. То есть можество фактов, выводимых из программы в предположении о замкнутости мира.
$P^X$ - это позитивная программа, полученная из исходной программы с предположением X.
$Cn(P^X)$ - это множество фактов, которые удалось вывести.
Если $X = Cn(P^X)$, то X - устойчивая модель програмы P.
В ответе максимум, что может быть - это два предиката. упрощение - это убирание отрицательных компонентов

\begin{table}[H]
  \centering
  \begin{tabular}{||c|c|c|c||} 
    \hline
    $X$       & $P^X$ & $Cn(P^X)$ & Примечание \\ [0.5ex] 
    \hline\hline
    $\oslash$  & p :- p. q. & $\{ q \}$ & не решение \\
    $\{ p  \}$ & p :- p.    & $\oslash$ & не решение \\
    $\{  q \}$ & p :- p. q. & $\{ q \}$ & УМ \\
    $\{ pq \}$ & p :- p     & $\oslash$ & не решение \\
    \hline
  \end{tabular}
  \caption{Выведение устойчивой модели в примере}
  \label{table:example}
\end{table}

Пример 2: есть программа.
\begin{equation*}
  \begin{gathered}
    p = \begin{cases}
  p:-not q.\\
  q:-not p.
    \end{cases}
  \end{gathered}
\end{equation*}

\begin{table}[H]
  \centering
  \begin{tabular}{||c|c|c|c||} 
    \hline
    $X$       & $P^X$ & $Cn(P^X)$ & Примечание \\ [0.5ex] 
    \hline\hline
    $\oslash$  & p. q.     & $\{ p q \}$ & не решение \\
    $\{ p  \}$ & p.        & $\{ p \}$   & УМ \\
    $\{  q \}$ & q.        & $\{ q \}$   & УМ \\
    $\{ pq \}$ & $\oslash$ & $\oslash$   & не решение \\
    \hline
  \end{tabular}
  \caption{Выведение устойчивой модели в примере}
  \label{table:example2}
\end{table}

В этом примере есть косвенная рекурсия. Если проследить цикл, то он проходит через два отрицания, а двойное отрицание уничтожается.

Пример 3.
p:- not p.
\begin{table}[h!]
  \centering
  \begin{tabular}{||c|c|c|c||} 
    \hline
    $X$       & $P^X$ & $Cn(P^X)$ & Примечание \\ [0.5ex] 
    \hline\hline
    $\oslash$ & p.        & p.        & не решение \\
    $\{ p \}$ & $\oslash$ & $\oslash$ & не решение \\
    \hline
  \end{tabular}
  \caption{Выведение устойчивой модели в примере}
  \label{table:example2}
\end{table}

В этой программе вообще нет устойчивой модели, то есть программа противоречива.

\subsection{Семинар 4 (2022-03-29)}
Обработка переменных.
\begin{equation*}
  \begin{gathered}
    p = \begin{cases}
  r(a, b).\\
  r(b, c).\\
  t(X,Y):- r(X, T).
    \end{cases}
  \end{gathered}
\end{equation*}
$T = \{a,b,c\}$ описали универсум. далее происходит подстановка (граундинг). Переменной назначается конкретное значение. То есть подставляются все возможные комбинации из универсума T.
\begin{equation*}
  \begin{gathered}
    p = \begin{cases}
  r(a, b).\\
  r(b, c).\\
  t(a,b):- r(a, b). t(a,c):- r(a, c). t(b,c):- r(b, c).\\
  t(b,a):- r(b, a). t(c,a):- r(c, a). t(c,b):- r(c, b).\\
  t(a,a):- r(a, a). t(b,b):- r(b, b). t(c,c):- r(c, c).
    \end{cases}
  \end{gathered}
\end{equation*}
можно избавиться от параметров и назвать правила с подставленными значениями к простым предикатам, и вернёмся к примеру 1. Так сразобают только t(a,b) и t(b,c). для остальных не сработают правые части. УМ программы станет $\{ r(a,b), r(b,c), t(a,b), t(b,c) \}$

Правило является безопасным (требования безопасности нужны, чтобы возможно было выполнить граундинг) если все его переменные встречаются в позитивных предикатах в теле правила.
\begin{enumerate}
\item p(a). - безопасно
\item p(X). - есть переменная, значит небезопасно
\item p(X):- q(X). - безопасно 
\item p(X):- not q(X). - небезопасно
\item p(X):- q(X), X!=a. - безопасно.
\item p(X):- t(X), not q(X). - безопасно, главное, что есть в позитивном предикате
\item p(X,Y) :- X ==Y. - явных отрицаний нет, но есть сравнение, непонятно откуда брать значения. небезопасно.
\item p(X,Y) :- t(X), q(Y), X==Y. - безопасно потому что сопоставили предикатам.
\end{enumerate}
Программа безопасна, если все правила безопасна. программа может быть выполнена, только если она безопасна. Часто можно заменить отрицания на сравнения.

Также в ASP есть необычные правила, например, глобальные ограничения. Это запреты, которые ставятся на устойчивую модель. это правила без левой части:
\begin{enumerate}
\item \verb|:- a,b|, то есть мы хотим, чтобы не было выведено одновременно и а и б.
\item \verb|:- not c|, то есть мы хотим, чтобы обязательно было выведено с.
\end{enumerate}
Глобальные ограничения применяются после получения УМ.

Этапы выполнения программы ASP
\begin{enumerate}
\item Подстановка переменных
\item получение УМ
\item проверка УМ на удовлетворение глобальным ограничениям
\end{enumerate}

\subsubsection{Классическое отрицание}
у системы АСП есть специфика работы с отрицаниями в отличие от пролога. Пролог использует предположение о замкнутости мира - что не может быть выведено из программы считается ложным. запрос к программе на прологе предполагает ответы Да и Нет. В прологе можно использовать отрицания, например \verb|not a|, отрицание, как провал поиска или отрицание по умолчанию, оно выполняется, если пролог не может вывести предикат а из нашей программы.

ASP расширяет возможности логического программирования и уходит от требования замкнутости мира. Сложно описать вообще все вохможные случаи. всегда останется неописанная часть. Программа на языке АСП может получить три варианта - Да, нет, неизвестно. это берётся за счёт поддержки двух типов отрицаний:
\begin{enumerate}
\item \verb|not a| - как провал поиска, как в прологе;
\item \verb|-a| - классическое отрицание (требует явного указания на ложность предиката или явное задание ложности предиката а);
  \begin{table}[h!]
    \centering
    \begin{tabular}{||c|c|c||} 
      \hline
      Удалость вывести & Не удалось вывести & Ответ программы \\ [0.5ex] 
      \hline
      a & -a & a = истинно \\ 
      -a & a & a = ложно \\
        & a, -a & a неизвестно \\
      a, -a &   & противоречние, нет модели \\
      \hline
    \end{tabular}
  \end{table}
\end{enumerate}
Классический пример - жд переезд в сельской местности без шлагбаума. его можно записать так
\begin{verbatim}
cross:- not train. %можно ехать, если нет приезжающего поезда
\end{verbatim}
такая запись означает, что мы не смогли вывести предикат трейн. если неполные знания, например, забыли посмотреть по сторонам, мы поедем через переезд. вопрос слишком ответственный, поэтому лучше записать как
\begin{verbatim}
cross:- - train. %можно ехать, если явно проверено
\end{verbatim}

Пример2 устройство на работу.
\begin{equation*}
  \begin{gathered}
    p = \begin{cases}
  employed(jack, stanford).\\
  employed(jane, prinston).\\
  hasIncome(X):-employed(X,Y).
    \end{cases}
  \end{gathered}
\end{equation*}
В вывод сразу пойдут правила, но добавятся два предиката выведенные из правила. Можно описать замкнутость мира как явное отрицание -employed(X,Y) :- not employed(X,Y). если это добавить, к УМ добавится два факта - джек не в принстоне, джей не в стенфорде. То есть мы сразу разрешаем выводить отрицания, если нет позитивного предиката.

Пример3 поиск определения листовых вершин в ориентированном графе.
\begin{itemize}
\item terminal(X) - вершина X - терминальная, только входящие рёбра.
\item arc(X,Y) - наличие ребра между вершинами X и Y.
\end{itemize}

\begin{verbatim}
-terminal(X) :- arc(X, Y).
terminal(X) :- not -terminal(X). % не смогли вывести ложность
\end{verbatim}

ЛР4 CASP (constraint ASP). - CLP + ASP. работает со множествами значений переменных. не требует явной подстановки всех переменных. позволяет избавиться от этапа граундинга, спасает от комбинаторного взрыва. позволяет получить обоснование для решения.

\subsection{Семинар 5 (2022-04-12)}
РК.
Во всех вариантах задание это текст логической программы.

\textbf{Пример 1.}
\begin{verbatim}F
0. coffee <-
1. lemon <- tea
0. sugar <- coffee
0. milk <- coffee, sugar
2. tea <- lemon
3. tea <- diet
\end{verbatim}
дана позитивная программа. следствие справа налево. это набор предикатов. если нет правой части это факт. Нужно для этой программы найти модели и устойчивые модели. УМ получается из предположения о замкнутости мира. Получить УМ можно по правилам логического вывода пролога. Простая модель это набор фактов, которые не противоречат программе (то есть нет требований о замкнутости мира).

Начать нужно с УМ.
\begin{enumerate}
\item Кофе - это факт. Он точно выводится из программы
\item из этого факта мы можем вывести Сахар и, соответственно, Молоко.
\end{enumerate}
УМ найдена. \code{{coffee, sugar, milk}}

Обычные модели. их может быть несколько. она является надмножеством УМ. База программы
\begin{verbatim}
A(P) = {c, s, m, t, l, d}
Candidates:
{c s m      }, 
{c s m t l d},
{c s m t l  },
{c s m t   d}, -1
{c s m t    }, -1
{c s m   l d}, -2
{c s m   l  }, -2
{c s m     d}, -3
\end{verbatim}
Далее действуем методом исключения. УМ не противоречит. Проверяем по правилам.

Логический вывод (рассуждения) на примерах подходит когда надо подбирать много комбинаций. Строим дерево рассуждений. Выбираем факт наугад, опираясь на УМ. Например, Чай
\begin{verbatim}
Чай
1 да
1.1. есть лимон
1.1.1 есть диета или нет диеты
2 нет
2.1. нет лимона нет диеты
\end{verbatim}

\textbf{Пример 2.}
\begin{verbatim}
diet <- ~sugar
coffee <- ~tea
lemon <- tea
sugar <- coffee
milk <- coffee, sugar
tea <- lemon
tea <- diet
\end{verbatim}
Дана логическая программа с отрицаниями. нужно найти модели и УМ. Отличие в том, что может быть несколько УМ. Лучше найти все модели и из них выбрать устойчивые.
\begin{enumerate}
\item {c s m t l d},
\end{enumerate}
\begin{verbatim}
Сахар
+ 
++ предположим Ч
    + Л+
     предположим Кофе
      + М+ {}, {d}
      - {d}, {m}, {dm}
    - М+ Л- Д-
- Д+ Ч+ Л+ К-. {}, {m},
\end{verbatim}
УМ это точно обычная модель. По ветке {s, t, l} получим 4 варианта {s, t, l}, {s, t, l, d}, {s, t, l, m}, {s, t, l, d, m}. УМ минимальна. делаем редукцию. исходная программа требует истинности сахара и чая. То есть STL не устойчивая модель, потому что мы не можем прям точно сказать о наличии сахара или чая. Если идём по ветке +С-Ч то -Чай делает фактом кофе. И получаем УМ = CSM. и по ветке С- УМ будет DTL.

\textbf{Пример 3.}
Позитивная программа с переменными
\begin{verbatim}
next(0, 1)
next(1, 0)
even(0)
even(Y) <- next(X, Y), odd(X)
odd(Y) <- next(X, Y) even(X)
\end{verbatim}
выписываем все константы (универсум) T = {0, 1}. Составляем базу - выписываем предикаты
next/2, even/1, odd/1
Выписываем базу программы. Берём все предикаты и подставляем туда все аргументы
\begin{verbatim}
next(0, 0), next(0, 1), next(1, 0), next(1, 1)
even(1), even(0)
odd(1), odd(0)
\end{verbatim}
Осуществляем граундинг. Факты совпали, поэтому переписываем
\begin{verbatim}
next(0, 0), next(1, 0), even(0)

even(0) <- next(0, 0), odd(0)
even(0) <- next(1, 0), odd(1)
even(1) <- next(0, 1), odd(0)
even(1) <- next(1, 1), odd(1)

odd(0) <- next(0, 0), even(0)
odd(0) <- next(0, 1), even(1)
odd(1) <- next(1, 0), even(0)+
odd(1) <- next(1, 1), even(1)
\end{verbatim}
Из подставленных выводим дополнительные факты.
УМ = next(0, 0), next(1, 0), even(0), odd(1).

\textbf{Пример 4.}
Логическая программа с переменными и отрицаниями.
\begin{verbatim}
next(0, 1)
next(1, 0)
even(Y) <- not odd(X)
odd(Y) <- next(X, Y) even(X)
\end{verbatim}
T = {0, 1}. Граундинг
\begin{verbatim}
next(0, 0), next(1, 0)
even(0) <- not odd(0)
even(1) <- not odd(1)
odd(0) <- next(0, 0), even(0) -
odd(1) <- next(0, 1), even(0)
odd(0) <- next(1, 0), even(1)
odd(1) <- next(1, 1), even(1) -
\end{verbatim}
N = {next(0, 1), next(1, 0)}
УМ = N + {even(0), odd(1)}, N + {odd(1), even(0)}.



\subsection{Семинар 6 (2022-05-06)}
РК2.
дана логическая программа с отрицаниями и переменными
P=
select(X) <- element(S,X), $\neg$ nselect(X).
nselect(X) <- element(S,X), $\neg$ select(X).
<- set(S), element(S,X1),select(X1), element (S,X2), select(X2), X1 $\neq$ X2
hit(S) <- element(S,X), select(X),
<- set(S), $\neg$ hit(S)

I=
set(1..3)
element(1,a)
element(2,b)
element(2,c)
element(3,b)
nselect(a)

правила без левой части это глобальные запреты

1. построить граф общих и позитивных зависимостей и топологический порядок,
2. для полученного топологического порядка определить множество атомов для каждого правила,
3. подставить значения переменных.

1. граф общих зависимостей.
1.1. нумеруем правила.
1.2. зависимое = предикат 1 содержится в теле 2. направленный граф с выходом из предиката. сильно связанные компоненты - это вершины такие, что можно попасть из вершины в другие, обычно двусторонние связи
1.3. выделить сильно связанные вершины
1.4. описать граф $G_p$=(P, {все рёбра через запятую}).
1.5. граф позитивных зависимостей $G_p+$. такой же граф, но рёбра - это связи без отрицаний. в нашем примере всего две связи
1.6. топологический порядок. найти сильно связанные компоненты, выстраиваем в последовательность так, чтобы если есть связи, то та из которой стрелка выходит, должна стоять раньше. в нашем примере {r1,r2},{r3},{r4},{r5}. сдвоенные связанные вершины разбиваются по графу позитивных зависимостей. $L_p$ = {r1},{r2},{r3},{r4},{r5}.
2. атомы - это проблемные предикаты. $R_{r_1}$. проблемный - это отрицательный предикат, который выводится из правила, которое находится позже в топологическом порядке, или из самого себя. т.е. при обработке следующего можно использовать всё что получено в предыдущих. р1 плохо р2 и р5 хорошо.
$R_{R_1} = {nselect(X)}. R_{r_2}=...=R_{r_5}=\oslash$
3. подстановка переменных
нужно множество истинных и потенциально истинных фактов. начинаем с инициализации
Истинные факты F = I.
потенциально истинные факты D = I.
3.1. рассматриваем в топологическом порядке:
r1
$s(a) <- e (1,a), \neg ns(a)$
$s(b) <- e (2,b), \neg ns(b)$
$s(c) <- e (2,c), \neg ns(c)$
$s(b) <- e (3,b), \neg ns(b)$
применяем упрощение (удаляем заведомо истинные или ложные) первое правило сокращаем потому что есть факт ns(a). есть также проблемный предикат, поэтому не вычёркиваем отрицания. элемент не выводится, поэтому это гарантированно истинные предикаты. вычёркиваем. второе полностью совпало с 4м, но это не вычёркиваем. получили по первому правилу
$s(b) <- \neg ns(b)$
$s(c) <- \neg ns(c)$
$s(b) <- \neg ns(b)$
3.2. обновляем множества F и D.
могут быть выведены s(b) и s(c). F=I, D=IV{s(b), s(c)}.
3.3. шаг 2 обрабатываем правило r2
$ns(a) <- e(1,a), \neg s(a)$
$ns(b) <- e(2,b), \neg s(b)$
$ns(c) <- e(2,c), \neg s(c)$
$ns(b) <- e(3,b), \neg s(b)$
ns(a) есть во множестве фактов, поэтому его вычёркиваем. элементы также упрощаются.
3.4. шаг3 снова обновляем множества
F=I, D=IV{s(b), s(c), ns(b), ns(c)}.
3.5. r3
S X1 X2
1 a  a
2 b  b
2 b  c
2 c  b
2 c  c
3 b  b
далее по правилу $X1 \neq X2$ остаются только
set(2), e(2,b), s(b), e(2,c), s(c)
set(2), e(2,c), s(c), e(2,b), s(b)
сеты в фактах вычеркнули всё кроме селектов. это запреты, поэтому множества не меняются
3.5. r4
h(1) <- e (1,a), s(a)
h(2) <- e (2,b), s(b)
h(2) <- e (2,c), s(c)
h(3) <- e (3,b), s(b)
во множестве потенциальных предикатов нет s(a) поэтому зачёркиваем. остались 
h(2) <- s(b)
h(2) <- s(c)
h(3) <- s(b)
F=I, D=IV{s(b), s(c), ns(b), ns(c), h(2), h(3)}
3.6. r5
$set(1), \neg h(1)$
$set(2), \neg h(2)$
$set(3), \neg h(3)$

h(1) нет в потенциальном, поэтому вычеркнули. сеты тоже вычеркнули потому что они во множестве фактов. то что мы вычеркнули и левую и правую часть эквивалентно false<-. для нас не критично, потому что нам не надо решать программу, но это значит, что любое решение в программе будет ложно.
\subsection{Семинар 7 (2022-05-24)}
\begin{verbatim}
РК3
другой алгоритм решения задачи первого РК.

логическая программа с отрицанием
p=
a <- b,f            b <-c, \neg e c <- a,b
a <- \neg c, \neg e b <- \neg d   c <- e
d <- \neg e         e <- \neg d   f <- a, \neg g

Задача: найти все УМ.
1. граф позитивных зависимостей G_+(P). это все факты в программе
G_+(P) = {a,b,c,d,e,f,g}
рисуем граф. взяли факт, рисуем стрелки от правой части в программе, если у правой части нет отрицания и рисуем направленное ребро в факт. факты без рёбер тоже рисуем. перечисляем рёбра
E=(a,c), (a,f), (b,c), (b,a), (c,b), (e,c), (f,a)
2. циклы в графе - описать все множества, формирующие циклическую связь
loops(P) = {{b,c}, {a,f}, {a,b,c}, {a,b,c,f}}
3. формулы циклов нам нужно хотя бы одно правило, запускающее цикл. Если в решении встретилось b или c то должно сработать хотя бы какое-то вспомогательное правило. перебираем по очереди циклы. если сработало хотя бы одно из вспомогательных то цикл нам интересен
LF(P) = {b \lor c -> \neg d \lor e, a \lor f -> \neg c \land \neg e, a \lor b \lor c -> (\neg c \land \neg e) \lor \neg d \lor e, a \lor b \lor c \lor f -> (\neg c \land \neg e) \lor \neg d \lor e}
4. составить вспомогательную программу ``замыкание Кларка''. включает в себя все решения из исходной программы и некоторые дополнительные условия.
выписываем все факты? прописываем тела правил через или
CF(P) =
a <-> (b \land f) \lor (\neg c \land \neg e)
b <-> (c \land \neg e) \lor \neg d
c <-> (a \land b) \lor e
d <-> \neg e
e <-> \neg d
f <-> a \land \neg g
g <-> false
если у правила нет правой части то true
5. модели для CF(P). начинать следует с коротких правил
\neg g.
 e
  \neg d
  b       c
     fa    \neg f \neg a
 \neg e
  d
  bc  \neg b \neg c
  af  af

M(CF) = {{a,b,c,e,f}, {b,c,e}, {a,b,c,d,f}, {a,d,f}}
6. отбор УМ для исходной программы (должны удовлетворять формулам циклов). если слева в цикле ложь не надо проверять, если слева истина то справа обязательно должна истина. если одна формула цикла нарушилась - модель не подходит
SM(CF) = {{b,c,e}, {a,d,f}}
7. проверка решений для потенциальной модели из программы выкидываем все отрицания.
Y={b,c,e} ->
P^y =
a<-bf
b<-
e<-
c<-a,b
c<-e
f<-a
Cn(P^y) = {b e c}вывод совпал с исходным предположением о решении
Y={a,d,f}
P^y =
a<-b,f
a<-
d<-
b<-c
c<-a,b
c<-e
f<-a
Cn(P^y) = {a,d,f} тоже УМ

\end{verbatim}
\end{document}

