# Диалектика изменяющего и трансформирующего действия

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

Первое -- может приводить к разным результатам при одном порядке действий.

Второе -- имеет всегда одно и то же завершение при одних и тех же входных данных (чистая функция).

Введение чёткого онтологического различия между двумя формами действия в языке **prolet** позволяет добиться следующих диалектических эффектов:

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

Это — не просто синтаксическое различие.

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

## ✅ Принятое положение

В коде на языке **prolet** различаются два типа тэгов-действий :

- `(прц ...)` — материальный процесс, зависящий от внешних условий, времени, состояния системы.
- `(фн ...)` — чистое преобразование, не имеющее побочных эффектов, детерминированное, отвечающее критерию математической функции.

## 🔁 Диалектическое различие

КАТЕГОРИЯ |  ПРОЦЕСС | ФУНКЦИЯ
---|---|---
Природа |  Материальный, исторически обусловленный | Формальный, логически детерминированный
Зависимость от времени |   Да: каждый запуск — новый момент  | Нет: время не влияет
Побочные эффекты |   Допустимы (запись, отправка, изменение)|  Запрещены
Детерминированность |  Нет: может зависеть от шлюзов, состояния |  Да: одинаковые входы → одинаковые выходы
Онтологический статус|Практика, действие, изменение|Закон преобразования
Аналог в реальности|Работа завода, регистрация пользователя|Формула: f(x) = x²

💬 Процесс — это диалектика материи в движении.
Функция — это закон, выделенный из практики.

## ✅ Форма объявления: процесс

```prolet
(прц ОтправитьУведомление
    (пользователь @фикс Пользователь сообщение @фикс Сообщение)
                                            -> @фикс Результат КодОшибки

    (если (ПроверитьАктивность пользователь)
        тогда ((ПодготовитьСообщение сообщение)
                (ОтправитьЧерезПочту (ПолучитьПочту пользователь) сообщение)
                (ЗаписатьЖурнал "Уведомление отправлено"))
    )
)
```

### Семантика процесса

Может возвращать разные результаты при одинаковых `пользователь` и `сообщение`:

- почта упала,
- email изменился,
- пользователь деактивирован.

Имеет побочные эффекты:

- запись в журнал,
- отправка.

Зависит от времени и состояния системы.

❗ Это — _не функция_, а _практика социального взаимодействия_.

## ✅ Форма объявления: функция

```prolet
(фн ПолучитьКвадрат (x @фикс Число) -> @фикс Число)
    (Умножить x x))

(фн ФорматироватьИмя (имя @фикс Имя фамилия @фикс Фамилия) -> @фикс Текст)
    (Соединить фамилия " " имя))
```

### Семантика функции

- При одинаковых `x` всегда вернёт одинаковый результат.
- Нет побочных эффектов: не пишет, не отправляет, не изменяет.
- Не зависит от времени, состояния, внешних условий.
- Может быть вычислена в любой момент, _даже заранее_.

✅ Это — чистое преобразование, заимствованное из логического дискурса, но вписанное в практику как инструмент.

## 📜 Онтологические правила `prolet`

ПРАВИЛО|ФОРМУЛИРОВКА
---|---
1|процесс -- действие, зависящее от материи и времени, может давать разные результаты
2|функция -- чистое преобразование, всегда одинаковый результат при одинаковых входах
3|функция не может вызывать процесс (иначе — не чистая)
4|процесс может использовать функцию (как инструмент преобразования)
5|функция не имеет побочных эффектов
6|процесс может иметь побочные эффекты (запись, отправка, изменение)
7|функция может быть встроена в процесс, но не наоборот

## 🔄 Пример: процесс, использующий функцию

```prolet
(прц ОбновитьПрофиль (пользователь @мут Пользователь
                    имя_новое @фикс Имя
                    фамилия_новая @фикс Фамилия) -> Результат
    (если (ПроверитьПрава пользователь)
    тогда (
        ((ФорматироватьИмя имя_новое фамилия_новая) -> полноеИмя @фикс)
        (СохранитьБаза пользователь полноеИмя))
    )
)
```

Здесь:

- ФорматироватьИмя — функция, чистая, детерминированная.
- ОбновитьПрофиль — процесс, зависит от прав, состояния базы, времени.

## 💡 Философское обоснование

Нотация следует духу диалектического материализма:

- Материя первична — процесс отражает её движение.
- Форма вторична — функция — идеализация, выделенная из практики.
- Но форма может служить практике — функция используется внутри процесса.
- Но не наоборот — практика не может быть сведена к форме.

## 💬 «Функция — как формула в голове инженера

- Процесс — как работа завода.
- Формула помогает управлять заводом,
- но завод не сводится к формуле.

## 🏁 Заключение

В этой части установлено ключевое онтологическое различие:

- функция — закон преобразования, выделенный из практики, но не зависящий от неё.
- процесс — реализация практики, зависящая от материи, времени, случайностей.

`prolet` больше не смешивает форму и содержание.

Он разделяет их — чтобы соединить на высшем уровне.
