Россия, Сургут, Сургутский Государственный Университет, 2017 |
Азы (nuts and bolts) классических вычислении
Выполнение компьютерной программы сводится к последовательности выполнения команд - базисных операций, выполняемых процессором компьютера. Сегодняшние процессоры компьютера мощные и могут выполнять достаточно сложные команды. Для нашего анализа разумно вернуться к корням компьютерных вычислений и обсудить простейшие базисные операции, достаточные для построения компьютера. Таких операций три: АND, ОR, NОТ. Первые две - бинарные операции над двумя аргументами, операция NОТ - унарная, у нее один аргумент.
Логика является источником этих операций. Значения бита интерпретируются как True/Fa1se, где х = 1 интерпретируется как "х истинно" (Тrue), а х = 0 означает "х - ложно" (Fa1se). Тогда х АND у означает "х и у оба истинны", х ОR у означает "или х - истинно, или у - истинно, или х и у оба истинны". Эти операции называются булевыми операциями, названными так в честь Джорджа нуля - математика 19-го столетия, положившего начало оснований символической логики.
Приведем следующие истинностные таблицы этих логических операций:
Далее будем использовать более короткую нотацию " " для " х AND у", " " для "х ОR у" и "" для "NОТ х". Функция АND называется также конъюнкцией, ОR - дизъюнкцией.
Утверждение. Операции Булевой логики удовлетворяют следующим свойствам - законам логики:
(1) ,
(2) ,
(З) ,
(4) ,
(5) .
Доказательство этих свойств оставляем в качестве упражнения.
При вычисления логических выражений важен порядок выполнения операций. Полагается, что AND выполняется раньше, чем OR, также как в арифметических выражениях умножение имеет более высокий приоритет чем сложение. Так что выражение понимается как , а выражение эквивалентно .
Пример. Давайте выразим функцию х = у через функции базиса. По определению эквивалентности (равенства), либо оба х и у имеют значение Тruе, либо оба - Fa1se. Это можно выразить так:
Пример. Давайте выразим функциями базиса отношение между числами: 2-битное целое больше чем 2-битное целое . Построенная логическая функция должна давать 1, если и 0 в противном случае. Неравенство выполняется, если либо и Неравенство "" означает, что и . Выражение для равенства было приведено в предыдущем примере. Комбинируя, получим формулу булевой алгебры, вычисляющую эту функцию:
Как ранее отмечалось, любое классическое вычисление может рассматриваться как функция . Такая функция может быть заменена k функциями , где каждая функция определена на и производит вывод в . Функция вычисляет первый бит функции f, функция вычисляет второй бит функции f , и так далее. По этой причине сосредоточим наше внимание на вычисления функция
Мы утверждаем, что любую булеву функцию можно выразить через элементарные функции {АND, OR, NOT}. В электронике булевы функции реализуются электрическими схемами, где присутствие напряжения в проводе представляет 1, а отсутствие - О. Представьте себе, что у нас есть набор ящичков, реализующих элементарные функции {АND, OR, NОТ}. Ящичек для АND имеет два провода на входе и один на выходе. Следствием нашего утверждения является то, что, используя элементарные ящички - стандартные схемные элементы (gates - "стандартный элемент"), можно построить процессор компьютера. Фактически так и строятся компьютеры сегодня за тем исключением, что вместо использования отдельных стандартных элементов для каждой элементарной булл
Покажем теперь на примере, как можно, используя элементарные функции {АND, OR, NОТ} выразить функцию , заданную следующей таблицей истинности:
Рассмотрим вторую строку таблицы, которая говорит, что функция имеет значение 1, когда х = 0, у = 0, z = 1. Если построить конъюнкцию: , то она также будет иметь значение 1 на этом наборе переменных и будет иметь значение 0 на всех остальных наборах значений х, у, z. Рассмотрим и все другие строки таблицы, где функция f имеет значение 1. Это происходит, когда (х = 0, у = 1, z = 1) и (х = 1, у = 0, z = 0). Конъюнкции, которые генерируют 1 для этих наборов переменных, имеют вид: и