Я, пожалуй, тоже как-то более по теме выскажусь.
Интерактивные программы, и современные ОС как частный случай, не покрываются понятием вычислимой функции. Потому что они получают вход и выдают результат не "в одно действие".
Однако если отвлечься от некоторых деталей, их можно описать в рамках формализма теории рекурсии, в частности, формализма машин Тьюринга.
Во-первых, можно просто сказать, что когда порция выходных данных получена, мы просто запускаем машину еще раз с другими данными(которые могут зависеть от полученных). Получится игра с МТ в качестве игрока.
Во-вторых, если это удобно, то можно дать отдельное определение в духе интерактивной МТ. Например, так:
Имеется алфавит состояний машины
![$Q$ $Q$](https://dxdy-02.korotkov.co.uk/f/1/a/f/1afcdb0f704394b16fe85fb40c45ca7a82.png)
, алфавит ленты
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
, алфавит входных воздействий
![$I$ $I$](https://dxdy-03.korotkov.co.uk/f/2/1/f/21fd4e8eecd6bdf1a4d3d6bd1fb8d73382.png)
, алфавит выходных воздействий
![$O$ $O$](https://dxdy-02.korotkov.co.uk/f/9/a/f/9afe6a256a9817c76b579e6f5db9a57882.png)
. У машины имеется головка с состоянием
![$q\in Q$ $q\in Q$](https://dxdy-04.korotkov.co.uk/f/f/e/d/fed153c3fd21ec785277d762e0478c7082.png)
, лента с ячейками с состояниями
![$a_i\in A$ $a_i\in A$](https://dxdy-01.korotkov.co.uk/f/8/b/6/8b6f83b0a124e653406eac2acaaab0d282.png)
, регистр входа с состоянием
![$i\in I$ $i\in I$](https://dxdy-01.korotkov.co.uk/f/4/5/e/45e305ccd8d4c3e2958b2f2fbcd7f7f082.png)
Программа - это последовательность команд вида
![$(i, a, q) \mapsto (q', c)$ $(i, a, q) \mapsto (q', c)$](https://dxdy-01.korotkov.co.uk/f/4/e/1/4e167a7ed920fb7a036f85c982d68d0382.png)
,
![$i\in I$ $i\in I$](https://dxdy-01.korotkov.co.uk/f/4/5/e/45e305ccd8d4c3e2958b2f2fbcd7f7f082.png)
,
![$a\in A$ $a\in A$](https://dxdy-04.korotkov.co.uk/f/3/d/3/3d30144612407b91059a5e0ee32bbd9982.png)
,
![$q\in Q$ $q\in Q$](https://dxdy-04.korotkov.co.uk/f/f/e/d/fed153c3fd21ec785277d762e0478c7082.png)
,
![$c\in A\cup O\cup \{L, R\}$ $c\in A\cup O\cup \{L, R\}$](https://dxdy-04.korotkov.co.uk/f/7/b/4/7b474d23e51dff8cdd9c55bb7ff143a082.png)
.
Действия
![$L, R$ $L, R$](https://dxdy-03.korotkov.co.uk/f/a/3/b/a3b0b28213eb1daaba39befaa52bc2a482.png)
двигают головку ленты, действия из
![$A$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.png)
печатают символ на текущей позиции, как обычно. Если же действие
![$c$ $c$](https://dxdy-04.korotkov.co.uk/f/3/e/1/3e18a4a28fdee1744e5e3f79d13b9ff682.png)
было из алфавита
![$O$ $O$](https://dxdy-02.korotkov.co.uk/f/9/a/f/9afe6a256a9817c76b579e6f5db9a57882.png)
, то она выдает некоторое выходное воздействие и принимает новое входное, которое записывается в регистр.
Добавив еще немного очевидных формальностей, можно определить, каким образом программа для такой машины реализует функцию
![$I^{*}\to O^{*}$ $I^{*}\to O^{*}$](https://dxdy-03.korotkov.co.uk/f/6/0/f/60fa62828dbc582621b91694683bec1e82.png)
или
![$I^{\omega}\to O^{\omega}$ $I^{\omega}\to O^{\omega}$](https://dxdy-04.korotkov.co.uk/f/3/2/a/32a218d05e2cb184930d1ec42f97ccd782.png)
, т.е. переводит последовательности (сколь угодно длинные или бесконечные, как нам больше нравится) входных воздействий в последовательности выходных.
Естественно, эта модель не учитывает многого, что в компьютере есть, но при определенных предположениях разумно описывает общее поведение, скажем, интерактивного commandline интерфейса, да и графического, наверное, тоже. Если хочется, можно добавить случайные числа и недетерминированность.
-- Чт авг 30, 2012 18:07:28 --Если хочется подчеркнуть интерактивность, то даже лучше рассматривать не
![$I^{\omega}\to O^{\omega}$ $I^{\omega}\to O^{\omega}$](https://dxdy-04.korotkov.co.uk/f/3/2/a/32a218d05e2cb184930d1ec42f97ccd782.png)
, а
![$(O^{*}\to I)\to O^{\omega}$ $(O^{*}\to I)\to O^{\omega}$](https://dxdy-02.korotkov.co.uk/f/5/f/9/5f9a5e5b25e2fbb389c780b324c1ac4782.png)