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

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

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

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

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

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

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

С другой стороны, все кварки обладают состоянием. Таким образом в кварке объединяются закон и материя, что снимает противоречие `закон`-`материя`.

> Закон не парит над материей -- он её плоть.
>
> Материя не сводится только лишь к хаосу, но даже хаос обнаруживает законы.
>
> Закон -- устойчивая форма движения материи.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Зависит от времени и состояния системы. Параметры по умолчанию фиксированы, чтобы явно указать факт изменяемости, нужно передавать атрибут `@изм` .

```text
💡 Процесс — *не функция*, а *практика социального взаимодействия*.
```

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

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

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

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

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

```text
💡 Функция — чистое преобразование, заимствованное из логического дискурса, но вписанное в практику как инструмент.
```

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

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

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

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

Здесь:

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

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

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

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

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

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

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

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

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

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