Указанное выше свойство характерно и для программ, в которых один раз вычисленное значение выражения можно использовать неоднократно. Рассмотрим один из простейших классов программ - линейные или неветвящиеся программы. Такие программы представляют последовательности присваиваний вида:
\[ X = F(X_1, \ldots , X_k), \]где X, X1, ... , Xk - переменные, F - имя k -местной базисной функции.
В случае нашего базиса \[ B_{0}=\{ \wedge , \vee , \neg \} \] линейная программа состоит из присваиваний вида: \[ Z = X \wedge Y \] , \[ Z = X \vee Y \] и \[ Z = \neg X \] .
Линейная программа P с выделенными входными переменными X1, ... , Xn порождает для каждого набора \[ \sigma _{1}, \dots , \sigma _{n} \] значений входных переменных естественный процесс вычисления: вначале переменным X1, ... , Xn присваиваются значения \[ \sigma _{1}, \dots , \sigma _{n} \] , соответственно, а каждой из остальных переменных присваивается значение 0. Затем последовательно выполняются присваивания программы P, в результате чего каждая из переменных Z программы получит заключительное значение \[ P_{Z}(\sigma _{1}, \dots , \sigma _{n}) \] .
Определение 2.6. Скажем, что программа P со входными переменными X1, ... , Xn вычисляет в выходной переменной Z функцию F(X1, ..., Xn), если для любого набора значений входов \[ \sigma _{1}, \dots , \sigma _{n} \] после завершения работы \[ P_{Z}(\sigma _{1}, \dots , \sigma _{n})=F(\sigma _{1}, \dots , \sigma _{n}) \] .
Между схемами и линейными программами имеется тесная связь.
Теорема 2.1.
Доказательство. (1) Пусть S - схема со входами x1, ... , xn и функциональными элементами v1, ..., vm. Построим по ней линейную программу PS со входными переменными x1, ... , xn следующим образом. Упорядочим все входные и функциональные вершины S по глубине (вершины одной глубины в любом порядке): u1, ..., un+m. Программа PS будет последовательностью m присваиваний.
Упорядочение вершин по глубине гарантирует, что j <n+ i и k <n+ i. Поэтому при вычислении u_{n+i} значения аргументов уже получены и индукцией по глубине легко показать, что для каждого i=1,...,m программа PS вычисляет в переменной vi функцию \[ f_{v_i}(x_1, \dots, x_n) \] .
Доказательство пункта (2) проведите самостоятельно (см. задачу 2.1).
Пример 2.1. Применим конструкцию теоремы к схеме S1, представленной на рис.2.1. Ее вершины можно упорядочить по глубине так: x, y, z, a, b, c, d, e, f. Порождая команды по описанным выше правилам, получим следующую линейную программу P_{S1}:
\[ a = x \wedge y;\\ b = \neg z; \\ c = \neg a;\\ d = c \wedge z;\\ e =a \wedge b;\\ f =d \vee e \]Замечание. Число команд в линейной программе PS, т.е. время ее выполнения, совпадает со сложностью L(S) схемы S. Глубина схемы D(S) также имеет смысл с точки зрения времени вычисления. Именно, D(S) - это время выполнения PS на многопроцессорной системе. Действительно, все команды, соответствующие вершинам одинаковой глубины, можно выполнять параллельно на разных процессорах, так как результаты любой из них не используются в качестве аргументов другой.