Сетевое издание
Международный студенческий научный вестник
ISSN 2409-529X

APPLICATION OF DISCRETE MATHEMATICS IN PROGRAMMING

Andreev I.V. 1
1 Stavropol State Agrarian University
Using the basic methods and concepts of discrete mathematics and mathematical logic, several typical calculations on the correctness of algorithms and processes written in the programming language Pascal (structured and compiled programming language, is the basis for many other known programming languages), the principle and work of the expert system with the use of sets and predicates. With the help of sentence logic, the basic algorithms for solving and testing tasks are described, which are presented to the programmer when checking the correctness of the program and its individual parts, using predicates (a function with the range {0; 1} defined by the n-th Cartesian power of the set M) and compiling expert system created a simple database (knowledge) to obtain information from the database of British kings and queens and explained the basic concepts of mathematical logic and discrete mathematics that are applied in it.
programming
discrete mathematics
set theory
expert system

Дискретная математика и математическая логика – основа любого изучения информационных систем. В настоящий момент основы фундаментальной математической подготовки специалистов в области информатики, программирования и компьютерных наук описаны достаточно понятно: фундаментальные разделы математики, имеющие прикладную направленность на информатику, программирование и компьютеры, сосредоточены в курсах «Математическая логика», «Дискретная математика» и «Теория алгоритмов», являющиеся результатом алгоритмизации знаний, накопленных математикой [1, 3].

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

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

Пусть P – предикат, верный для входных значений алгоритма A, а Q – предикат, содержащий условия, которые удовлетворяют выходные значения. Высказывание and1.wmf означает следующее: «если алгоритм A начинается с корректного значения P, то она закончится при истинном значении Q». Предикат P называется предусловием, Q – постусловием. Высказывание and2.wmf тоже предикат, поэтому доказательство алгоритма A равносильно доказательству верности and3.wmf. Основываясь на этом, можно доказать правильность алгоритма «Квадратный многочлен» на языке Pascal:

Текст программы:

{x – вещественное число}

Begin

and4.wmf

and5.wmf

and6.wmf End

Поделим алгоритм на части и зафиксируем обозначения пред- и постусловий.

and7.wmf

begin

and8.wmf

and9.wmf

and10.wmf

and11.wmf

and12.wmf

and13.wmf

Подстановки показывают, что высказывания:

and14.wmf

and15.wmf

and16.wmf

верны.

Таким образом, предикат

{Q} Квадратный многочлен {P}

верен. Таким образом, алгоритм «Квадратный многочлен» корректен.

Алгоритм условных высказываний тоже поддается такому доказательству, необходимо только отразить альтернативные пути в алгоритме [6].

Предположим, что высказывание

if условие then

высказывание 1;

else

высказывание 2;

вводит предусловие P и в конце даёт условие Q. Поэтому необходимо доказать истинность двух предикатов:

{P и условие} высказывание 1 {Q}

и {P и не (условие)} высказывание 2 {Q}.

Теория множеств используется для наиболее удобного описания массы концепций в информатике. Одним из примеров применения теории множества в программировании является база данных. Возьмём за пример экспертную систему [10].

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

Создадим экспертную систему под названием «Королевская династия Англии». Для начала подготовим список фактов, используя предикаты «родитель» и «жена».

Родитель (Георг I, Георг II) жена (София, Георг I)

Родитель (Георг III, Георг IV) жена (Вильгельмина, Георг II)

Родитель (Георг III, Вильгельм IV) жена (Шарлотта, Георг III)

Родитель (Георг III, Эдвард) жена (Каролина, Георг IV)

Родитель (Эдвард, Виктория) жена (Аделаида, Вильгельм IV)

Родитель (Виктория, Эдвард VII) жена (Виктория, Альберт)

Родитель (Эдвард VII, Георг V) жена (Александра, Эдвард VII)

Родитель (Георг V, Эдвард VIII) жена (Виктория Мари, Георг V)

Родитель (Георг V, Георг VI) жена (Елизавета, Георг VI)

Родитель (Георг V, Елизавета II) жена (Елизавета II, Филипп)

Родитель (Виктория, Элис)

Родитель (Элис, Виктория Альберта)

Родитель (Виктория Альберта, Филипп)

Родитель (x, y) означает, что x является родителем y, а жена (x, y) означает, что x – жена y. Это стандартное чтение предикатов, используемых языками программирования, как, например, PROLOG [4].

Для извлечения информации необходимо отправлять запросы в базу данных. Пример: «является ли Георг I отцом Георга III», то ответ будет отрицательным, поскольку предикат родитель (Георг I, Георг III) не существует в списке. Формат запроса зависит от языка программирования, который поддерживает та или иная база данных. Таким образом, использование баз данных в работе помогает упорядочить информацию и наиболее эффективно работать с ней. Запросы формируются по принципу: «? – предикат». При этом подразумевается наличие переменной в предикате, которое будет равносильно вопросу о существовании того или иного элемента [7].

Сформулируем правило вывода для получения информации о матерях из системы. Необходимо обозначить правило мать(x) так, чтобы положительный ответ на этот запрос формировался только в том случае, если x – жена чьего-то родителя или x – женщина и родитель. Правило такого вывода определяется таким образом:

and17.wmf

Но данное правило вывода не найдёт всех матерей из-за того, что база данных не полная – в ней не записаны, например, дети Елизаветы Второй. Полученный результат показывает трудности, возникающие при попытках ограничения реального мира рамками математической модели [5, 8].