Алгебраическая структура с частичными операциями и модель вычислений для арифметики ограниченных целых неотрицательных чисел

Вычислительные технологии

Том 18, № 4, 2013

Алгебраическая структура с частичными операциями и модель вычислений для арифметики ограниченных целых неотрицательных чисел

Ю.Г. Сметанин1, М. В. Ульянов2,3 1 Вычислительный центр им. А.А. Дородницына РАН, Москва, Россия 2Национальный исследовательский университет — высшая школа экономики,

Москва, Россия

3Московский государственный университет печати им. Ивана Федорова, Россия e-mail: smetanin.iury2011@yandex.ru, muljanov@mail.ru

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

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

Введение

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

Здесь Ms — формальная модель памяти, включающая информационный носитель со структурой адресации, Я — механизм реализации, представимый в виде следующей упорядоченной тройки:

M = (Ms ,R).

R = (P,C, Q),

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

Основные формализмы теории алгоритмов — машина Поста, машина Тьюринга, нормальные алгорифмы Маркова [3-5] — могут быть представлены в виде моделей вычислений, имеющих вид (1) и состоящих из указанных выше компонентов. Однако главное несоответствие этих формальных моделей реальному компьютеру состоит в том, что носитель данных моделей не ограничен и формально описывается счётным множеством, имеющим мощность Но. Даже наиболее полное описание алгебраического подхода к формализации компьютерных вычислений, основанное на аппарате "системы алгоритмических алгебр", содержащееся в [6], также оперирует понятием "бесконечного в обе стороны абстрактного двоичного регистра" (с. 115). Подход с бесконечным информационным носителем обеспечивает, очевидно, замкнутость арифметических операций в соответствующих алгебрах без ограничений на операнды, но этот подход противоречит реальным форматам данных и схемным или микропрограммным алгоритмам реализации арифметических операций в компьютере. Таким образом, представляет интерес построение алгебраической структуры и модели вычислений, отражающих ограниченность представления чисел, равно как и порождаемые этой ограниченностью особенности арифметических операций. Такой аппарат интересен и с точки зрения формализации задачи проверки допустимости входов для произвольных арифметических выражений, т. е. проверки допустимости промежуточных и окончательного результатов ограниченным носителем. Один из возможных вариантов такой формализации для арифметических операций над ограниченным множеством целых неотрицательных чисел и составляет предмет исследования настоящей статьи.

1. Частично определённые алгебры и их применение

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

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

Пусть О = (V,Е) — граф, где Е С V х V — множество рёбер. Частичная алгебра задаётся носителем I = V х V и сигнатурой, состоящей из единственной операции Ь:

Ь : I х I ^ I, Vв! = (а,Ь), в2 = (с,й),

(а, ¿) € I, если Ь = с,

Ь((а,Ь), (с,й)) = Л „ ,,

1 Не определено, если Ь = с.

В терминах такой частично определённой алгебры замыкание Е всего множества рёбер Е по операции Ь, т. е. минимальное множество, состоящее из результатов применения операции Ь к объектам из Е, замкнутое относительно данной операции, содержательно есть множество всех путей в графе О. При этом для фиксированной пары вершин как элемента носителя I минимальная длина представления данного элемента в Е, т. е. минимальное по длине представление в виде суперпозиции операции Ь, есть длина минимального пути между этой парой вершин [10]. Таким образом, задача поиска кратчайшего пути между парой вершин а и Ь в графе, классически решаемая алгоритмом Дейкстры, сводится к задаче поиска минимального по длине суперпозиции элемента в множестве Е. Если множество Е не содержит (а, Ь), то это интерпретируется как принадлежность исходных вершин двум несвязным компонентам графа.

Отметим, что в ряде публикаций рассматриваются представления, основанные на аппарате частично определённых алгебр, и для более широкого класса структур, чем графы. Содержательный пример такого представления — применение данного аппарата к задаче алгебраической характеризации преобразований в категориях [11, 12].

2. Алгебраическая структура с частичными операциями

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

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

с [14]):

1п С N, 1п = {0,1,..., п - 1},

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

Таким образом, алгебраическая структура с частичными операциями для арифметики ограниченных целых неотрицательных чисел — Лд — вводится в виде упорядоченной четвёрки:

Лд = ^п, Б, Е, О),

где 1п — носитель, Б — сигнатура алгебраической структуры, Г — функция ограничения носителя для операций, Q — множество предикатов ограничения операндов операций.

Сигнатура Б структуры Ад есть множество, включающее следующие пять арифметических операций:

Б = [вг | г = 1,5} = [в! = "+", в2 = "-", вз = "*", 54 = "/", 55 = "//"},

причём все операции — сложения (+), вычитания (—), умножения (*), целочисленного деления (/) и получения остатка от деления (//) — имеют арность (2,1), т.е. получают одно число — элемент носителя 1п — как результат операции для пары операндов из подмножества 1п х 1п .В силу целочисленности носителя операция деления даёт целый результат деления, а операция получения остатка — целочисленный остаток. Вводятся отдельные операции для деления и получения остатка, поскольку введение операции деления как операции с арностью

"(делимое, делитель) ^ (частное, остаток)"

противоречит требованию замкнутости результата операции в носителе. Отметим также, что операции деления и получения остатка при корректных операндах (к,/) Е 1п, / = 0, замкнуты в носителе, поскольку к/1 < шах(к,/), к//1 < шт(к,/).

Функция Г — функция ограничения носителя — отображает множество операций во множество всех подмножеств 1п х 1п, используя заданные множеством Q ограничения операндов, при этом нумерация предикатов в Q соответствует нумерации операций в Б. Значением функции Г является множество допустимых операндов операции:

Г : Б ^ В(1П х 1П), Г(вг) С Б(1П х 1П), Г(вг) = [(к,/) | дг(к,1)= 1тпе},

Множество предикатов Q = [дг | г = 1,5} задаёт условия, ограничивающие операнды из 1п для частичных арифметических операций, а именно:

в1 = 11+11 д1 (к, /) = (к + / < п — 1), ~

в2 = //_// д2 (к, /) = (к > /),

в3 = дз (к, /) = (к */< п — 1),

в4 = ///// д4 (к, /) = (/ = 0),

в5= ////// д5(к, ) = (/ = 0).

Таким образом, каждая операция в г построенной алгебраической структуры ограничена по операндам (аргументам операции) и задаётся соответствующим отображением

вг : г (вг) ^ 1п, г = 1, 5,

причём в силу (4) и (5) обеспечена замкнутость результата всех операций в носителе 1п.

3. Модель вычислений с предусловиями выполнения операций

Формальные компоненты модели вычислений (1) необходимо конкретизировать с учётом особенностей предложенной алгебраической структуры (3). С этой целью рассмотрим более подробно свойства алгоритмов [2], определяющие компоненты модели вычислений:

— свойство наличия данных, обрабатываемых алгоритмом, формализуется как существование некоторого множества объектов, над которыми выполняются операции, задаваемые алгоритмом. В данном случае такими объектами являются целые неотрицательные числа — элементы множества I,. В целях конкретизации будем представлять эти числа в двоичной позиционной системе счисления с цифрами из алфавита {0, 1}. Фиксируя через к битовую длину записи чисел, получаем значение п = 2к. Таким образом, носитель I, есть множество целых неотрицательных чисел, двоичное представление которых имеет длину не более к бит;

— свойство наличия памяти для размещения данных приводит к введению формальной модели памяти [2], включающей информационный носитель и сигнатуру, которая представляет собой набор операций, определяющих способ доступа к этим данным;

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

— свойство существования механизма реализации предполагает, что существует некоторый абстрактный механизм, который выполняет базовые операции над объектами носителя, включая и операции доступа к данным. Кроме того, предполагается, что механизм реализации распознает запись алгоритма, задающую последовательность базовых операций, и тем самым предполагается наличие ещё одной группы базовых операций, определяющих последовательность выполнения операций над данными в записи алгоритма. Как правило, предполагается, что механизм реализации имеет собственные ячейки, используемые при выполнении операций над операндами носителя. Эти ячейки формально описаны в (2) множеством управляющих и операционных ячеек П.

3.1. Формальная модель памяти

Предлагаемая формальная модель памяти для размещения данных с операциями доступа к ним строится на основе следующих предпосылок. Из возможных способов организации памяти (пространства символов в формализме Поста [3]) и методов адресации мы останавливаемся на структуре памяти с конечным числом ячеек, обладающих символическими именами. Каждая ячейка обладает уникальным символическим именем и хранит целое неотрицательное число. Для построения символических имён зафиксируем некоторый конечный алфавит символов Е и введём в рассмотрение конечное множество символических имён как подмножество множества Е+ — транзитивного замыкания алфавита по операции конкатенации Е* без пустого слова Л — Е+ = Е*\А:

ЛЕ = {а | а € Е+}, Л п С ЛЛ = Л^\Лп,

где Лп, Л — конечное множество имён соответственно внутренних ячеек механизма реализации и ячеек информационного носителя.

Введём информационный носитель формальной модели памяти — множество У — как конечное множество ячеек, каждая из которых обладает символическим именем из Л и может хранить объекты носителя — целые неотрицательные числа из In:

У = {Уг | я =1,т}, У С Л х In, уг = (а, г), а € Л, г € I,

Здесь а — адресный, г — информационный компонент ячейки, при этом символические имена ячеек являются уникальными, т. е. разные элементы из У не могут иметь одинаковые имена:

Уг Е 1п : (уг = (аг, г))&(у,- = (а^-, г)) ^ г = На этой основе вводим формальную модель памяти в виде упорядоченной пары

Ms =

где У — носитель, С/ — множество операций механизма реализации над объектами из У, состоящее из операции чтения содержимого ячейки и записи в ячейку с использованием дополнительных ячеек механизма реализации. Более подробно вариант такой формальной модели памяти описан в [15]. Мы считаем операции из С/ включёнными во множество базовых операций механизма реализации С и опишем их формат ниже.

3.2. Механизм реализации — абстрактный процессор

В состав механизма реализации в соответствии с (2) включаем его собственные ячейки, составляющие множество П. Результат алгоритма всегда формируется в специальной ячейке в механизма реализации и в случае его допустимости возвращается в носитель. Для идентификации отсутствия результата операции введём в рассмотрение специальный элемент //мп^е///, который помещается в ячейку результата в, но не возвращается в носитель. Таким образом, все исходные операнды арифметических операций являются корректными. Алгоритмы, реализующие вычисление арифметических выражений, возвращают в носитель только окончательный результат при условии, что он является корректным. При недопустимости результата ячейка в содержит элемент //мп^е///.

Ячейки множества П имеют структуру, аналогичную структурам ячеек носителя информационной алгебры. Их символические имена составляют множество Ап, а именно:

Ап = [а, в, 7, в, /, г, пи1, м, у}, при этом сами элементы множества П определяются следующим образом:

П = [Уа =

у/ =

Уи = (м,п — 1),уя = (у,//мп^е///)},

г е /п2 е 1п и//мп^е///,Ь е [0,1}.

Таким образом, ячейки с именами а, в, 7 — это операционные ячейки, которые могут хранить целые неотрицательные числа вплоть до значения п2 — 1, обеспечивая тем самым замкнутость всех арифметических операций в механизме реализации над всеми операндами из множества /п, так как (п — 1)(п — 1) = п2 — 2п +1 < п2 — 1. Только в этих операционных ячейках процессор механизма реализации может выполнять арифметические операции; тем самым мы требуем предварительную загрузку операндов в операционные ячейки до выполнения операции. Ячейка в хранит или допустимый результат, или значение //мп^е///. Ячейки с именами /, £ хранят предопределённые значения 0 и 1, которые трактуются как логические значения, а ячейка с именем г хранит

логический результат операции сравнения. Ячейка с именем nul хранит "длинный ноль" длиной 2 k бит, ячейка с именем u — предопределённое значение максимального числа из In, а ячейка с именем д — специальное значение "undef'' для идентификации некорректного результата арифметической операции.

Рассмотрим множество C базовых операций модели вычислений, предопределённо выполняемых процессором механизмом реализации:

C = Ci U Cd U Cp U {stop},

где Ci — операции формальной модели памяти, Cd — операции сравнения и арифметики чисел, Cp — операции управления последовательностью выполнения операций в модели вычислений. Операция stop приводит к останову механизма реализации.

Операции из Ci включают в себя операции чтения и записи содержимого элементов информационного носителя в операционные ячейки механизма реализации. Для нотации будем использовать штрих-операцию [6] как операцию взятия содержимого по указанному символическому адресу. Напомним, что информационный компонент ячейки носителя имеет длину k бит, а соответствующий компонент операционной ячейки — длину 2k бит.

Рассмотрим базовые операции механизма реализации более подробно.

1. Операция чтения из носителя в операционную ячейку: "содержимое операционной ячейки ^ содержимое ячейки носителя". При этом старшие k бит операционной ячейки заполняются битовыми нулями.

Пример. 'а ^ 'а. В операционную ячейку с символическим именем а помещается содержимое ячейки носителя с символическим именем а.

2. Операция записи из операционной ячейки в носитель: "содержимое ячейки носителя ^ содержимое операционной ячейки". При этом в ячейку носителя пересылаются только младшие k бит операционной ячейки, а в случае ячейки 9 этими битами её содержимое исчерпывается.

Пример. 'b ^ 'в. В ячейку носителя с символическим именем b помещается содержимое младших k бит операционной ячейки с символическим именем в.

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

3. Операции арифметики целых чисел:

"содержимое операционной ячейки ^ содержимое операционной ячейки

"символ операции" содержимое операционной ячейки".

Символ операции — элемент из множества {+, —, *,/,//}.

Примеры. '7 ^ 'в + 'а, '7 ^ 'в - 'а, '7 ^ 'в//'а.

4. Операция сравнения. Для записи операций сравнения содержимого операционных ячеек будем использовать нотацию, предложенную Айверсоном [16]. Например, для двух чисел а, Ь при сравнении по "меньше" нотация имеет вид

При сравнении результат, имеющий логическое значение, помещается в специальную операционную ячейку с символическим именем r. Сравнения разрешены только над содержимым операционных ячеек. Набор операций сравнения считаем стандартным. Формат операции сравнения: "содержимое ячейки r ^ сравнение в нотации Айверсона".

Пример. 'r ^ ['в < 'а].

Операции множества Cp управляют порядком выполнения последовательностей базовых операций. Мы вводим предусловие выполнения группы базовых операций, причём оно распространяется на всю группу, заключённую в фигурные скобки. Для ссылок на предусловия вводятся их имена. Предусловие формулируется как сравнение содержимого операционной ячейки r с содержимым одной из ячеек f или t. Постулируем, что базовые операции вне предусловий и внутри группы выполняются последовательно одна за другой.

5. Операция выполнения группы операций по предусловию. Формат,: "имя предусловия: ['r = 't] {группа базовых операций}".

6. Операция перехода на предусловие: "^ имя предусловия".

7. Операция "stop". Останов механизма реализации модели вычислений.

4. Реализация алгебраической структуры с частичными операциями в предложенной модели вычислений

Покажем, как частичные операции алгебраической структуры (3) реализуются в предложенной модели вычислений с предусловиями выполнения операций.

Запишем алгоритм сложения чисел, хранящихся в ячейках носителя с символическими именами а и b, с занесением результата в ячейку с символическим именем c при условии, что этот результат допустим:

'9 ^ 'д

'а ^ 'а

'в ^ 'b

'y ^ 'а + 'b

'r ^ ['y < 'u]

Q1 : ['r = 't] {

В начале алгоритма предопределённое значение ячейки 9 устанавливается в ''мп^е/''. Мы выполняем арифметическую операцию сложения с двумя числами из носителя /п, причём, поскольку операционные ячейки механизма реализации позволяют оперировать с числами из /п2, результат в ячейке с символическим именем 7 всегда разрешён. Последующее сравнение с ячейкой м определяет возможность возврата результата в носитель 1п, тем самым реализуется предикат 51 (к, /) = (к + / < п — 1) алгебраической структуры. Таким образом, в ячейку носителя с символическим именем с результат операции заносится только в случае, если он допустим. В специальной ячейке 9 механизма реализации будет размещен или допустимый результат, или специальный элемент "мп^е/'', идентифицирующий невозможность выполнения операции в заданном ограниченном подмножестве целых неотрицательных чисел.

Фрагмент для умножения отличается только базовой операцией '7 ^ 'а * 'в и соответствующим предикатом (к, / ) = (к* < п — 1), реализация которого выполняется при сравнении результата умножения с ячейкой м, содержащей ограничивающее значение.

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

' 0 'g

'а 'а

'в 'b

'r ['а > 'в]

Q1 ['r = 't]

^ 'а - 'в '0 ^ '7

'c ^ '0 }

stop.

Вычитание выполняется только при условии, что результат операции допустим по предикату q2(k, l) = (k > l). Поэтому прежде всего выполняется проверка, после которой — группа операций, состоящая из вычитания и сохранения результата.

При реализации целочисленного деления и получения остатка от деления мы сталкиваемся с необходимостью проверки делителя на ноль. Для этой цели служит специальная ячейка механизма реализации с именем nu /:

' 0 'g

'а 'а

'в 'b

'r ['в = 'nul]

Q1 ['r = 't]

'7 ^ 'а/'в

'0 ^ '7

'c ^ '0 }

Если условие предиката д4(к, I) = (I = 0) выполнено, то производится целочисленное деление и формирование результата.

Приведём также пример алгоритма в элементарных операциях предложенной модели вычислений с предусловиями выполнения команд, который вычисляет арифметическое выражение с ^ (а + Ь) * (:

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

5. Полиномиальное подмножество арифметических выражений и особенности входов

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

1 — задачи проверки допустимости данного входа, т. е. проверки замкнутости в носителе промежуточных результатов вычисления арифметического выражения и его окончательного значения;

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

Предлагаемая формализация указанных задач и возможный подход к их решению излагаются далее для частного случая представления арифметического выражения полиномом от его операндов. Тем самым рассматриваемый частный случай ограничивается алгебраической структурой (3) и соответствующей моделью вычислений (1)-(2), поддерживающей только три арифметические операции:

'в ^ 'д

'а ^ 'а

'в ^ 'Ь

'ч ^ 'а + 'в

'г ^ ['^ < 'и]

: ['г = 'I] {

'а ^ '( 'в ^ 'а * 'г ^ ['в < 'и] Я2 : [г = 'I] {

'в ^ 'в

'с ^ 'в }

5= {вг | г =1, 3} = {в! = ''+'' ,82

'' ''

,вз = ''*''}.

Будем называть арифметическим выражением полиномиальную функцию g(X), где X — m-компонентный кортеж (xi, x2,... , xm). Область определения аргументов ограничена множеством In, а область допустимых значений функции g есть множество In, объединённое с элементом ''undef'':

g : I^ ^ In U ''undef'', g

j,fcGi,...,m

где c — некоторые константы из In. Запись вида (9) будем называть обобщённой полиномиальной формой арифметического выражения. Очевидно, что функция g является многочленом от m переменных, который отличается от общепринятой формы записью степеней в виде последовательности умножений. Таким образом, в соответствии с (9) мы отождествляем значение арифметического выражения со значением, получаемым в ячейке 0 модели вычислений (7) в результате выполнения алгоритма, реализующего данное арифметическое выражение. Рассматриваемая совокупность многочленов g является, очевидно, подмножеством арифметических выражений, для которого разрешёнными операциями являются умножение, сложение и вычитание (8).

При этом запись полинома g порождена грамматикой арифметических выражений G [17], терминальные символы которой заданы множеством

T = A U S U Const U{(,)},

где A = {xi, x2,... , xm} — множество аргументов функции g (символических имён операндов), S — подмножество арифметических операций (8), Const = {c | c E In} — множество констант. Строковая запись функции g определяется порождающей грамматикой G, в терминальные символы которой включены скобки, определяющие порядок вычислений. Обозначим эту строковую запись через [g]s. Порождённая грамматикой G форма арифметического выражения путём раскрытия скобок может быть сведена к обобщённой полиномиальной форме (9):

gi(xi,X2) = (4xi + 7x2) * X2 + 3x2, g2(xi, X2) = 4xi * X2 + 7x2 + 3x1, [gi]s = [g2]s.

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

Обозначим через X (°) = ( xi0),..., xm) e Inm кортеж из m элементов множества In, представляющий собой конкретный вход арифметического выражения. При этом аргумент Xi функции g получает значение x( , i = 1,m. Определим функцию g как тождественно совпадающую по записи с g: [g]s = [g]s, но обладающую другой областью значений промежуточных и окончательных результатов — множеством целых чисел Z: g : Inm ^ Z. При вычислении значения g(X(0)) могут возникнуть три ситуации, которые авторами предлагается различать и терминологически. Будем называть вход X(0) для заданного функцией g полиномиального арифметического выражения

1 — допустимым входом, если g(X(0)) E In, т.е. арифметическое выражение вычислимо для

2 — входом с потенциально устранимой особенностью, если g(X(0)) E In, g(X(0)) = = ''undef''. Содержательно эта ситуация означает, что промежуточные результаты вычисления арифметического выражения лежат вне носителя In. Возможно, путём некоторых эквивалентных преобразований такое выражение приводится к виду, для которого вход X(0) является допустимым. В таком случае будем говорить о том, что этот вход является входом с эквивалентно устранимой особенностью;

3 — входом с неустранимой особенностью, если д(Х(0)) е д(Х(0)) = "ии(е$".

Это ситуация, когда окончательное значение арифметического выражения д для входа X(0) лежит вне носителя 1п. Очевидно, что в данной ситуации никакие эквивалентные преобразования д не приведут к допустимости входа.

6. Устранение особенностей входов на основе эквивалентных преобразований

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

1. д(Х(0)) = к(Х(0)), д(Х(0)) е 1п, к(Х(0)) е 1п,

2. д(Х(0)) = д(Х(0)), д(Х(0)) е 1п, Ъ(Х(0)) = ''ип(в/'',

3. д(Х(0)) = д(Х(0)), д(Х(0)) = к(Х(0)) = ''ип(в/''.

:ю)

Таким образом, для конкретного входа Х(0) ситуация 1 содержательно означает совпадение и замкнутость результатов двух арифметических выражений в 1п, ситуация 2 — совпадение результатов в Z с допустимостью только одного результата в 1п, ситуация 3 — совпадение результатов в Z с недопустимостью обоих результатов в 1п. Особый интерес представляет ситуация 2, так как здесь возникает возможность некоторого эквивалентного преобразования полиномиального арифметического выражения к(Х), приводящего к допустимости (в 1п) его значения на входе Х(0). В этом случае, используя введённую выше терминологию, можно говорить, что вход Х(0) является входом с эквивалентно устранимой особенностью для арифметического выражения к(Х), причём эквивалентным арифметическим выражением для к(Х) является арифметическое выражение д(Х).

Заметим, что функция д(х\, х2,... , хт) в общем случае представима в виде композиций функций в^), в2(•) либо ¿1 (•), ¿2(^), tз(•), объединённых операциями из Б, аргументы которых являются подмножествами множества аргументов функции д. Преобразование Ь : д1(Х) ^ д2(Х), задаваемое оператором Ь, будем называть эквивалентным преобразованием, если Ь есть произвольная суперпозиция операторов Ьс, Ьа, Ь

Ьг

Ь

в1 (•) ± в2(•) ^ в2(•) ± в1(•), в1 (•) * в2(•) ^ в2(•) * в1 (•),

&(•) ± ¿2(•)) ± ¿з(•) ^ МО ± (МО ± МО),

(МО * ¿20) * МО ^ МО * (¿2(•) * г3(•)), ЬЛ : (¿10 ± МО) * МО ^ МО * (МО ± ¿20 * МО).

Конкретную суперпозицию операторов Ьс, Ьа, Ьа будем обозначать через . На основании свойств кольца Z полиномиальные арифметические выражения, заданные функциями д1(Х) и д2(Х) = Ь(д1(Х)), эквивалентны в смысле (10).

а

Пример. ^(х^ х2, х3) = XI * х2 — XI * х3, £(#1) = у2(х1, х2, х3) = Х1 * (х2 — х3).

Заметим, что в носителе /32 для входа Х(0) = (6, 6, 5) значение #1 (X(0)) поскольку х1 * х2 = 36, но при этом #2(Х(0)) = 6 и 6 Е /32. Эти арифметические выражения эквивалентны в смысле (10), а вход X(0) = (6, 6, 5) является входом с эквивалентно устранимой особенностью для #1(Х). Эквивалентным арифметическим выражением, устраняющим особенность данного входа, является функция #2(Х).

Лемма 1. Если разность многочленов #1(Х) и #2(Х), приведённых к обобщённой полиномиальной форме, есть нулевой многочлен (многочлен с нулевыми коэффициентами), то многочлен #2(Х) может быть получен из #1(Х) с помощью преобразования Ь.

Доказательство. Приведём многочлен #1(Х) к обобщённой полиномиальной форме у1(Х) с использованием эквивалентного преобразования Ь^0 (преобразование раскрытия скобок); аналогично приведём многочлен #2(Х) к обобщённой полиномиальной форме #2 (Х) с использованием эквивалентного преобразования Ь20). По условию леммы #1(Х) — #2(Х) = 0, из чего следует почленное равенство всех коэффициентов у

приведённых многочленов.

Тогда Ь20) Ь0) (#1(Х)) = #2(Х), а суперпозиция эквивалентных преобразований является эквивалентным преобразованием, что и доказывает утверждение леммы.

Рассмотрим применение входа Х(0) к многочлену #(Х). Последовательно подставляя в #(Х) значения х^?,..., х20), придём к представлению #(Х) в виде многочлена от одной переменной х1:

#

где коэффициенты а^ есть результаты подстановки ... ,х20) в #(Х). Предполагаем далее, что вход Х(0) допустим для #(Х) в /п, и, следовательно, а^ Е /п.

Лемма 2. Если арифметические выражения, заданные многочленами от х1: #1(х1) и у2(х1) — эквиваленты в смысле (10) и степень каждого из них меньше п, то #1(Х) можно получить из #2(Х) с помощью преобразования Ь.

Доказательство. Пусть у1(х1) и #2(х1) — многочлены, максимальная степень т которых меньше п по х1. Рассмотрим многочлен ^(х1) = #1(х1) — у2(х1). Если ^(х1) — нулевой многочлен, то утверждение леммы следует из леммы 1. Если ^(х1) не равен тождественно нулю, то он имеет не более т корней в К1 и заведомо не более т корней в Z, а значит, и в /п. Таким образом, ^(х^ не может быть равен нулю для всех элементов /п; следовательно, Зх° Е 1п : d = 0. Но это означает, что многочлены #1(х1) и #2(х1) не эквиваленты в смысле (10), что противоречит условиям леммы.

Очевидно, что лемма 2 не применима, если степень многочлена #1(х1) больше п, так как такой многочлен может иметь п корней в /п, однако справедлива следующая лемма.

Лемма 3. Для арифметического выражения, заданного многочленом #(Х), преобразованная форма (12) которого #1(х1) имеет степень, большую или равную п, можно построить эквивалентный в Z многочлен меньшей степени.

Доказательство. Пусть #(х1) = ап+рхп+р + ап+р-1хп+р-1 +    + а0 и р > 0. Рассмотрим многочлен ^(х1), представляющий собой убывающую факториальную степень п + р по х1:

Н(х1) = х1+р = х1(х1 — 1)(х1 — 2) • • • (х\ — (п + р — 1)) =

к=1

п+р

п + р

к

где квадратные скобки означают числа Стирлинга первого рода [16].

Заметим, что к(х1) = 0 в 1п+р и Ух1 Е 1п заведомо обращается в ноль. В силу этого из (13) следует, что Ух1 Е 1п имеет место эквивалентное преобразование (преобразование понижения степени) с коэффициентами из Z:

п+р-1 ^п+р _ ( ^ } ^ ^

к=1

хп+р =

п + р к

Применяя замену (14) к д(х-\), получим многочлен д1(х1), имеющий степень не большую, чем п + р — 1. Последовательно, а именно р +1 раз, применяя аналогичное (14) преобразование, можно получить многочлен др(х1), имеющий степень меньшую п, с коэффициентами в Z.

Из лемм 1-3 следует теорема.

Теорема. Если вход X(0) является входом с потенциально устранимой особенностью для арифметического выражения, заданного полиномом д(Х), то задача построения эквивалентного арифметического выражения, возможно допускающего вход X(0), требует выполнения только двух видов преобразований — эквивалентного (11) и понижения степени (14).

Доказательство. Если после преобразования понижения степени (14) все коэффициенты др(х1) лежат в 1п, то арифметическое выражение, заданное многочленом др(х1), может допускать вход X (°). Если многочлен др(х1) не допускает вход X (°) в смысле ситуации 2 из (10), то согласно лемм 1 и 2, возможно, существует эквивалентное преобразование Ь(др(х1)) арифметического выражения д(X), допускающего вход X(0).

Следует отметить, что задача выбора эквивалентного преобразования Ь(др(х1)) построения некоторой суперпозиции операторов Ьс, Ьа, Ь^ является алгоритмически разрешимой в силу конечной символьной записи [др(х1)]з и, следовательно, конечного числа возможных преобразований, допускаемых грамматикой О и эквивалентных в смысле (11). Вполне возможно, что все варианты эквивалентного преобразования не допускают вход X(0). Тогда за конечное время устанавливаем невозможность построения эквивалентно устранимого преобразования арифметического выражения д(X) для входа X(0). Построение эффективного по трудоёмкости алгоритма выбора последовательности эквивалентных преобразований суперпозиции операторов Ьс, Ьа, Ь^ авторы рассматривают как продолжение настоящего исследования.

Заключение

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

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

Доказанная в статье теорема об эквивалентных преобразованиях полиноминально заданных арифметических выражений для входов с потенциально устранимой особенностью остается в силе и для носителя, содержащего отрицательные числа. По сути, полученный результат относится к ограниченности диапазона представления чисел, а не к конкретным границам этого диапазона. Имея исходный диапазон, можно, очевидно, путём сдвига значений отобразить его в сегмент Ln = {0,1,... ,n — 1}, а затем возвратить полученные результаты в исходный диапазон.

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

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

Список литературы

[1] Алексеев В. Е., Таланов В.А. Графы и алгоритмы. Структуры данных. Модели вычислений: Учебник. М.: БИНОМ. Лаборатория знаний, 2006. 320 с.

[2] Ульянов М.В. Ресурсно-эффективные компьютерные алгоритмы. Разработка и анализ. М.: ФИЗМАТЛИТ, 2008. 304 с.

[3] Post E.L. Finite combinatory process — formulation 1 // J. Symbolic Logic. 1936. No. 1. P. 103-105.

[4] Turing A.M. On computable numbers, with an application to the Entsheidungsproblem // Proc. London Math. Soc. 1937. Vol. 42, ser. 2. P. 230-235.

[5] Фалевич Б.Я. Теория алгоритмов: Учеб. пособие. М.: Машиностроение, 2004. 160 с.

[6] Глушков В.М., Цейтлин Г.Е., Ющенко Е.Л. Алгебра. Языки. Программирование. Киев: Наук. думка, 1978. 318 с.

[7] Горбатов В.А. Основы дискретной математики. М.: Высш. шк., 1986. 311 с.

[8] Курош А.Г. Лекции по общей алгебре. М.: Наука, 1973. 400 с.

[9] Ван дер Варден Б.Л. Алгебра. М.: Наука, 1979. 624 с.

[10] Zhang G.-Q. Closures in binary partial algebras // Electr. Notes Theor. Comput. Sci. 2009. Vol. 257. P. 3-18.

[11] Burmeister P., Rossello F., Torrens F., Valiente G. Algebraic transformation of unary partial algebras I: Double-pushout approach // Theor. Comput. Sci. 1997. Vol. 184, No. 1-2. P. 145-193.

[12] Burmeister P., Monserrat M., Rossello F., Valiente G. Algebraic transformation of unary partial algebras II: Single-pushout approach // Ibid. 1999. Vol. 216, No. 1-2. P. 311-362.

[13] Мальцев А.И. Алгебраические системы. М.: Наука, 1970.

[14] Белоусов А.И., Ткачёв С.Б. Дискретная математика: Учеб. для вузов / Под ред. В.С. Зарубина, А.П. Крищенко. М.: Изд-во МГТУ, 2001. 744 с.

[15] Михайлов Б.М., Головешкин В.А., Ульянов М.В. Модель вычислений с информационной алгеброй и предусловием выполнения элементарных операций // Вестник МГАПИ. Технические и естественные науки. 2006. Т. 3. С. 114-123.

[16] Грэхем Р., Кнут Д., Паташник О. Конкретная математика. Основание информатики. М.: Мир, 1998. 703 с.

[17] Грис Д. Конструирование компиляторов для цифровых вычислительных машин. М.: Мир, 1975. 544 с.

Поступила в 'редакцию 21 марта 2011 г., с доработки — 6 мая 2013 г.