Шулъженко Виталий Игоревич, Эмман Павел Александрович
ИНСТРУМЕНТ ДЛЯ ИЗУЧЕНИЯ МЕТОДА РЕЗОЛЮЦИЙ
В данной статье описывается программа, с помощью которой студент, изучающий метод резолюций, сможет рассмотреть его на примере любого множества логических формул любой интерпретации.
ОСОБЕННОСТИ РАЗРАБОТКИ ПРОГРАММЫ
Для разработки программы был выбран язык Java как наиболее простой для реализации и переносимый. Для возможности использования приложения на различных платформах оформление ядра разработки было сделано в виде апплета на HTML-страничке.
Для реализации выражения был спроектирован и реализован класс Logic-Expression. Выражение хранится в виде строки String expression. При разборе выражения переменные записываются в Vector variables, а значения переменных в Map vars.
Для создания объекта данного класса предоставлен конструктор public Logic-
Expression (String expression), параметром которого может быть любое скобочное логическое выражение с операторами: !, I, &, +, =, > (где ! - отрицание, I -дизъюнкция, & - конъюнкция, + - исключающее ИЛИ, = - эквиваленция, > - импликация). Работа конструктора заключается в разборе всего выражения и заполнении структур variables и vars.
Для проверки выражения была спроектирована отдельная функция, выбрасывающая собственное исключение при наличии ошибки. Данная проверка реализована вычислением выражения. Если выражение удалось вычислить, значит, синтаксических ошибок нет. Если при вычислении выражения встречается какая-либо синтаксическая ошибка, - выбрасывается исключение. По этому исключению можно определить, что за ошибка встретилась при разборе выражения. Ошибками могут быть неверный баланс скобок (при этом сообщается, какой скобки не хватает, - закрывающей или открывающей), отсутствие операнда после операнда и другие.
Для вычисления истинности выражения была реализована функция getExpres-sionValue(), основой работы которой является обход выражения, включая вложенные скобки, и последовательное вычис-
скроеесЛироёлЯл otnfeiiiftafr
ление каждого операнда. Используя данную функцию, можно легко обходить самые сложные выражения с немалым количеством переменных и глубокой вложенностью скобок. Эту функцию удобно использовать при построении таблиц истинности.
Непосредственно для реализации метода резолюций были спроектированы функции построения совершенной дезъюнк-тивной нормальной формы (СДНФ) и совершенной конъюнктивной нормальной формы (СКНФ). Суть методов - обход всех возможных значений логического выражения. Для каждого истинного (или ложного для СКНФ) значения выражения сохраняем набор переменных, затем соответствующим образом объединяем этот набор и составляем необходимую форму исходного выражения.
Так же реализованы функции проверки выражения - находится ли оно в форме СКНФ или СДНФ.
Для наглядного представления задачи был создан класс КезоХийопТазк, который инкапсулирует логическую задачу, решаемую методом резолюций. Этот класс адекватно влияет на добавление и удаление атомов и высказываний, реализует интерфейс ЗвпаЫгаЫв, таким образом, может быть записан в файл.
В данной реализации апплета не был предоставлен интерфейс для записи и чтения задач, что было бы более эффективно для работы на практических занятиях. Но, благодаря интуитивному интерфейсу, ввод данных для задачи занимает незначительное время.
ВИЗУАЛИЗАЦИЯ РАБОТЫ МЕТОДА РЕЗОЛЮЦИЙ
При визуализации необходимо сохранить функционал реализованного математического аппарата и предоставить пользователю интуитивно понятный и наглядный интерфейс.
На первом этапе пользователю необходимо ввести условие задачи, используемые высказывания (вместе со словесным
описанием каждого используемого в высказываниях атома) и правила вывода. Далее пользователю будет предоставлена возможность работать непосредственно только с этими данными. Уже на этом этапе проверяется условие задачи на предмет корректности условия. Если из предложенного набора высказываний нельзя определить их истинность, апплет запретит переход к работе с условиями и укажет на это пользователю.
На втором этапе работы пользователь может работать с данными высказываниями. Доступна возможность изменения конкретного выражения (кнопка «Изменить высказывание»). На основе двух высказываний добавить новое (необходимо выделить два высказывания и нажать на кнопку «Добавить резольвенту», а в предложенном диалоге набрать соответствующее выражение), преобразовать произвольное высказывание в СКНФ (необходимо выделить высказывание и нажать на кнопку «Преобразовать в СКНФ»), а также прочитать условие задачи, соответствие операндов и их словесной интерпретации, просмотреть исходные данные задачи по нажатию кнопки «Условие задачи...».
ПРИМЕР РАБОТЫ С ПРОГРАММОЙ
Выполним преобразование для простейшего примера (см. рисунок 1).
Фа осНо&е ёшка^иваЛий
Шулъженко В.И., Эмман П.А.
Рисунок 1.
Рисунок 2.
д'ЬзЬла-ганна вмсал Е ■ ■ ■ 1 г ЧI Ш
111 ■ вл С 11ЛН1 ПИ НИ 4.1 » (ЛИ.1111. 1
ИИ в> -
1 - 1 ! 1 щ 1 ■: П а и па 1
| ОГЛНЛЧФ«
ЙКНЫЬ Эвцзыъ
|7, а .у*м 'лУ.-Ьтт
Можно добавить атом (по нажатию на кнопке «Добавить атом» - см. рисунок 2) или удить атом, выделив его и нажав кнопку «Удалить атом». Введем атомы: «Q1 - солнце светит», «Q2 - идет дождь», «Q3 - я довольный».
Для ввода высказываний по кнопке «Добавить высказывание», необходимо ввести содержательное высказывание. Для этого предусмотрены два режима: ввод с клавиатуры - тогда доступно поле для ввода, и можно заполнить предложенное поле; ввод с панели - тогда необходимо воспользоваться предоставленными клавишами для составления выражения (см. рисунок 3). Добавим выражения: => Q3» -«Солнце светит, следовательно, я довольный», & ^2» - «Сейчас солнце светит и не идет дождь». Докажем, что «я довольный»» - истина.
Тогда: исходными высказываниями для метода резолюций будут «Q1 => Q3»;
& ^2»; «^3» (см. рисунок 4).
Преобразуем все эти высказывания в СКНФ. Для этого необходимо выделить высказывание и нажать на кнопку «Преобразовать в СКНФ». Получим: «^1^3»;
«^1^2»; «^11^2»; «^1^2»; «^3» (см. рисунок 5). Если не выделить высказывание, апплет сообщит об этом соответствующим сообщением (см. рисунок 6).
Если этого не сделать, программа при попытке добавления новых резольвент
Рисунок 4.
иайияяос&и была
выведет сообщение: «Подсказка: Оба выражения должны иметь форму конъюнкта в дизъюнктной нормальной форме (ДНФ). Проще говоря, должны иметь только следующие операции: НЕ[!],ИЛИ[1].»
Из «0^02»; «01102» следует «01» -поэтому выбираем две эти резольвенты, нажимаем кнопку «Добавить резольвенту» и вводим «01». Резольвента будет добавлена, а в окошке появится объяснение данного преобразования в терминах задачи: «Можно интерпретировать резольвенту так: Известно, что солнце светит ИЛИ НЕ идет дождь и вместе с этим солнце светит ИЛИ идет дождь, СЛЕДОВАТЕЛЬНО, солнце светит». Если пользователь не выберет два выражения либо выберет более двух, апплет сообщит об этом, как показано на рисунке 7.
Из «01» и «!01102» следует «03» - добавляем ее таким же образом.
Теперь можно выделить «03» и «!03» -и на их основе добавить «тождественная ложь» (для этого есть кнопка «тождественная ложь» на панели кнопок, либо можно ввести «Г» в поле ввода - см. рисунок 8). Так как тождественная ложь является следствием этого выражения, что означает окончание работы метода, программа выдаст соответствующее сообщение: «Поздравляем! Вы успешно справились с этой задачей!» (см. рисунок 9).
гЛо солЩе сбеЛиЛ fyrfffa ифеЛ фофф-ъ и 6-месЛе с з&им солЩе с&еЛиЛ "fy-rtfy ифеЛ фАфф-,,,
Рисунок 5.
Рисунок 6.
Рисунок 7.
Рисунок 8.
Сообщение
¡Поздравляем! Вы успешно справились г экой задачей!
Java Applet Window
Рисунок 9.
Шульженко В.И., Эмман П.А.
fciMMhl л --1ЧЧ у
L YfpaHi lwnH Н14С1НГНН
---- ----Л- II
ш_____
| il НР1РП.Л -У ="V.HI дс-хл» НИМ? hp
ntt]4IIL-
Рисунок 10.
-
| Irtiii "iT in". j| PvMV
L ; 1Ь«|ИШ1.|№ И .11 :+гв luhfr
v 1 --
Рисунок 11.
На любом этапе вывода выражений пользователь может просмотреть условие задачи и ее исходные данные, для этого необходимо нажать на кнопку «Условие задачи». Появится форма, похожая на представленную на рисунке 10.
УСТАНОВКА И НАСТРОЙКА ПРОГРАММЫ.
СИСТЕМНЫЕ ТРЕБОВАНИЯ
Для установки программы, необходимо разархивировать содержимое дистрибутива.
В папке app находится сборка для запуска программы как приложения. Для этого необходимо запустить app\WinLunch.bat (в Windows) либо набрать в командной
строке java gui/ResolutionFrame. Запустится приложение, аналогичное описанному апплету (см. рисунок 11).
Для корректного запуска приложения необходимо наличие Java машины не ниже 1.5.
Для запуска апплета необходимо из папки www открыть файл rm.html в любом браузере с поддержкой java. Если Ваш браузер поддерживает Java машину, то на открытой страничке будет активен апплет, описанный в предыдущем разделе.
Браузеры: Mozilla Firefox 2.0.0.4, Opera 9.23, Internet Explorer 5.5. Для всех браузеров должны быть установлены поддерживаемые Java машины, версии не ниже 1,5.
В папке «resolution workspace» находится проект для среды разработки Eclipse и необходимые исходные тексты для компиляции и сборки приложения.
ОБЛАСТИ ПРИМЕНЕНИЯ ПРОГРАММНОГО ПРОДУКТА.
УСОВЕРШЕНСТВОВАНИЯ
Мы хотели разработать качественное математическое ядро для работы с логикой предикатов. Реализованные классы можно использовать для вычисления истинности булевских выражений, для построения таблиц истинности, для реализации задач логики высказываний, для построения СКНФ и СДНФ для любого выражения. Благодаря простоте интерфейсных методов достаточно просто расширять их функциональность. Использование одного класса для полного описания выражений позволяет сохранять их в файл и восстанавливать из файлов.
Шульженко Виталий Игоревич, студент 4 курса факультета компьютерных технологий и информатики СПбГЭТУ «ЛЭТИ»,
Эмман Павел Александрович, студент 4 курса факультета компьютерных технологий и информатики СПбГЭТУ «ЛЭТИ».
© Наши авторы, 2006 Our authors, 2006.