Смекни!
smekni.com

Изобретание, проектирование, разработка и сопровождение) Том Интеллектуальные системы (Системы решения проблем)  Альберт Александрович Красилов (стр. 30 из 85)

Таким образом, предикатный сорт определений универсален, соответствует языку Лейбниц и охватывает широкий класс данных (включая, между прочим, процедурные данные). И главное, этот способ формализует определения, исходно представленные на ЯПП.

6.5.4. Определение логическими уравнениями. Как и всякое уравнение логическое определяет некоторое неизвестное значение, которое может определять и определяет значение понятия. Множество значений, даже если множество не содержит ни одного значения или содержит только одно значение, определяет понятие из конкретных представителей (остенсиональное определение). По формальному существу такие определения являются обобщениями предикатных определений. Пусть задано логическое уравнение вида: F(X) = 0. Его решение Х = Хо, вообще говоря, определяет некоторое понятие в форме факта. Данное определение соответствует предикатному определению: {Хо} = (Х: Тип, F(X) = 0). Имеется одна оговорка, которая не должна повлиять на смысл предикатного определения, данного выше. Необходимо учитывать все множество корней уравнения.

Всегда имеется сомнение в том, что определяется ли таким образом некоторое понятие или не определяется. Сомнение можно устранить, если вспомнить всю совокупность суждений, задающих определение данного понятия. Определение логическими уравнениями является самым главным обобщением всех сортов определений, наивысшей абстракцией в теории определений. Это положение важно для реализации существа концептуальной информатики. Некоторые логические уравнения не имеют количественных решений. Тогда можно получать формульные определения с использованием машинных аналитических выкладок. Конечно, под формульными определениями следует понимать и некоторые тексты, генерируемые формальными представлениями суждений, представленных на некотором ФЯ.

Можно было бы ограничиться тем обстоятельством, что каждое определение есть логическое выражение, которое по сути своей уже является логическим уравнением типа В = истина в соответствии с ИЛ, где В - логическое выражение. Его решение относительно неопределенного термина составит окончательное определение понятия, обозначенного этим термином. Уравнения в самом общем его понимании доставляет большие трудности при получении окончательного решения. Имеются уравнения, которые не имеют решений из-за недостаточности знаний или из-за отсутствия аксиом, определяющих связи некоторых операций. Великая теорема Ферма является наглядным примером трудно и сложно решаемым уравнением. Известны ли аксиомы связи операций сложения и возведения в степень? Если теорема Ферма доказана, то такие аксиомы существуют, и они становятся известными.

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

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

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

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

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

Рассмотрим несколько примеров формального определения понятий. Примеры взяты из статьи С.С. Гончарова и Д.И. Свириденко. Первый пример относится к функции «факториал», она определяется двумя способами:

определение fact(х, у): существует z ((x = 0 => y = 1) \/

(not (x = 0) => ((y = x * z) & fact(x - 1, z)));

определение целое у = х!: ((х = 0 => у = 1) \/ ( not (х = 0) => у = х * (х - 1)!));

Второй пример задает константу ИСТИНА:

определение логическая ИСТИНА: 0 = 0;

Третий пример определяет операцию «больше»:

определение х > у: у <= х & not (х = у);

Четвертый пример определяет функцию min двумя способами:

определение z = min(x, y): если x <= y, то z=x, иначе z=y;

определение z = min(x, y): ((x <= y => z = x) &bsol;/ (y <= x => z = y));

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


Глава 7. Трансляция на формальный язык

В основе перехода с ЯПП на ФЯ используется транслятор, анализирующий исходный текст и строящий выходной текст с полным сохранением смысла текста. Имеется большое разнообразие схем трансляции текстов (например, программ) с одного языка на другой [Дейкало84, Ингерман69, Касьянов86, Красилов68а, 706, 70в, 71а, 72, 74г, 78а, 83б, 86б]. Большинство транслирующих систем ориентировано на такое разделение блоков транслятора: лексический анализ, синтаксический и семантический анализы, генерация объектного кода. Такому делению имеются многие резоны. В главе рассматриваются некоторые вопросы построения транслирующих систем ФЯ на ФЯ и ЯПП на ФЯ.

7.1. Лексический анализ

Многие транслирующие системы начинают свою работу с лексического анализа. Это положение удовлетворяет следующим причинам. Причина первая. Каждый исходный текст везде включает в себя безразмерные первичные объекты: слова, числа, выделенные строки, многосимвольные знаки, комментарии, сообщения системе и т.п. лексические элементы. Первый шаг в программировании состоит в приведении объектов к стандартному формату - первый шаг процесса сжатия информации. Выделение безразмерных объектов можно объединить с процедурой синтаксического анализа, тогда отладка транслятора затруднится. Причина вторая. Имеется практическая насущность разделения ошибок лексики и синтаксических ошибок. Лексический анализ может точно обнаружить, локализовать, идентифицировать и квалифицировать все ошибки в лексике. Отделение их от синтаксических ошибок позволяет осуществлять быстрое исправление ошибок. Причина третья. Структура программ транслятора упрощается концептуально, что обеспечивает ускорение их отладки. Ошибки в программах естественным образом связаны с понятиями исходного и объектного языков, что соответствует организационной структуре транслятора. Именно эта причина и воздействует на такой технологический подход создателей транслятора.

Сущность лексического анализа состоит в выделении лексем и в приведении объектов к стандартному формату. Каждая лексема после распознавания заменяется словом или его номером с признаком сорта лексемы. Весь исходный текст заменяется текстом из кодовых слов или номеров объектов вместе с определяемыми по их конструкциям характеристиками. Для ЯПП термин, состоящий из слов и знаков, не распознается при лексическом анализе. Термин в ЯПП является синтаксической конструкцией, он распознается при синтаксическом анализе. Лексический анализ ориентируется на локальный контекст, который позволяет осуществлять точное распознавание лексем с учетом только близлежащих символов окружения лексемы.

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