@rsconcept/rstool 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,92 @@
1
+ # Выбор основания
2
+
3
+ Краткий справочник для агентов: когда вводить `X#`, `C#` или использовать встроенную ступень `Z`. Термины — [DOMAIN.md](DOMAIN.md); поля конституент — [CONSTITUENTA.md](CONSTITUENTA.md).
4
+
5
+ ## Выбор основания
6
+
7
+ | Что нужно выразить | Выбор | Почему |
8
+ | :---------------------------------------------------------------------- | :---- | :--------------------------------------------------------------------------- |
9
+ | Предметные объекты без числового смысла: люди, документы, ситуации | `X#` | Элементы задаются интерпретацией и различаются только как элементы множества |
10
+ | Конечный именованный набор, где в формулах нужны порядок или арифметика | `C#` | Элементы интерпретируются в КМ, но поддерживают сравнение и арифметику языка |
11
+ | Чистые целые: размеры, счётчики, индексы, `card`, рекурсия над числами | `Z` | Это встроенная ступень RSLang; отдельная конституента не нужна |
12
+
13
+ ```text
14
+ Нужно неопределяемое понятие?
15
+ ├─ Сущности предметной области (люди, документы, ситуации) → X#
16
+ └─ Числа / ранги / уровни
17
+ ├─ Конечный именованный набор, интерпретируется в КМ → C#
18
+ └─ Абстрактные целые, только вычисления (Z×Z, card, R{…}) → Z
19
+ ```
20
+
21
+ Практическое правило: если число является свойством объекта, не кодируй объект через `C#`. Введи объект как `X#`, связь или атрибут как `S#`, а вычислимые выборки и проверки — как `D#` / `F#` / `P#`.
22
+
23
+ ## Биективная переносимость
24
+
25
+ **Биективная переносимость** — независимость значения формального определения от биективной замены интерпретаций неопределяемых понятий: если согласованно переименовать все элементы `X1`, `C1`, `S1` (без слияний и потерь), результат вычисления зависит только от структуры, не от «имён». Семантический анализатор отсекает формулы, нарушающие переносимость; логическую непротиворечивость подтверждают отдельно — примером интерпретации в КМ.
26
+
27
+ Элементы **базисных множеств** принципиально несравнимы: нет встроенного порядка и арифметики. Допустимы только принадлежность (`ξ ∈ X1`), равенство внутри одной ступени (`a = b` при `a, b ∈ X1` — «тот же элемент», не порядок) и построения над множествами/кортежами. Запреты анализатора:
28
+
29
+ - `ξ < η` для `ξ, η ∈ X1` → `orderingNotSupported`;
30
+ - `X1 + 1`, `debool(X1) * 2` → `arithmeticNotSupported`;
31
+ - `debool(X1) = 1` → несовместимые ступени (`X1` и `Z`).
32
+
33
+ Необходимое условие переносимости — согласованная **типизация** всех идентификаторов ([TYPIFICATION.md](TYPIFICATION.md)): нарушение (`ξ ∈ X1` при `ξ : Z`, `S1 = S2` при разных ступенях) — ошибка ещё до вычисления.
34
+
35
+ Следствия для агента:
36
+
37
+ 1. Предметные объекты без числового смысла — **`X#`**; числовые ограничения на них выражай через **`S#`**, **`F#`**, **`P#`**, а не через `<` на элементах `X#`.
38
+ 2. Если формула «узнаёт» конкретные элементы базисного множества по способу, не заданному в схеме (скрытый порядок, кодирование атрибута константами) — вероятное нарушение переносимости или лишняя конституента.
39
+ 3. Перед сохранением сомнительной формулы — `analyzeExpression`.
40
+
41
+ **Иллюстрация (родство):** при `X1 = {alice, bob, carol}` биективная замена на `{p1, p2, p3}` не меняет, кто чей родитель в `S1: ℬ(X1×X1)`, если пары переименованы согласованно. Формула `∀a,b∈X1 a < b` некорректна — порядок на людях в RSLang не задан.
42
+
43
+ ## Детали по вариантам
44
+
45
+ **`X#` — базисное множество.** Формальное определение пустое; конвенция фиксирует, что считается элементом. В КМ значения задаются явным перечислением. Элементы можно проверять на принадлежность и равенство внутри одной ступени, но нельзя упорядочивать или использовать в арифметике.
46
+
47
+ **`C#` — константное множество.** Формальное определение тоже пустое; значения задаются в КМ. В формулах допустимы сравнения и арифметика языка, включая согласованное смешивание с целочисленными литералами (`C1 ∪ {1}`, `ξ + 1`, `α < β`). Используй для шкал оценок, уровней допуска, номеров фаз процесса — когда эти значения являются частью модели.
48
+
49
+ **`Z` — встроенная ступень целых.** В схеме нет записи с `alias` для целых; `Z` используется прямо в типизациях и формулах (`Z×Z`, `[α∈Z]`, `ℬ(Z)`). В КМ `Z` отдельно не заполняется.
50
+
51
+ ### `Z` и `C#`
52
+
53
+ | Вопрос | `C#` | `Z` |
54
+ | :------------------------------------- | :-------------------------------------------- | :----------------------------------------------------- |
55
+ | Есть ли конституента в списке схемы? | да | нет |
56
+ | Нужна ли интерпретация элементов в КМ? | да (`setModelValues`) | нет |
57
+ | Домен | конечный именованный набор предметной области | бесконечные целые |
58
+ | Типичная мотивация | «оценки 1–5», «уровни 0–3» как объекты модели | размеры, координаты, остатки, `card`, чистые алгоритмы |
59
+
60
+ Учебный пример **без** `X#` и `C#`: `examples/chocolate-nim/` — ширина и длина шоколадки как `Z×Z`, арифметика и `R{…}` только над `Z`.
61
+
62
+ ## Минимальные примеры
63
+
64
+ **Базисное + отношение** (родство):
65
+
66
+ ```text
67
+ X1 — люди (конвенция)
68
+ S1: ℬ(X1×X1) — родитель–ребёнок
69
+ D1 := Pr1(S1) — родители
70
+ ```
71
+
72
+ **Константное** (шкала; элементы интерпретируются в модели):
73
+
74
+ ```text
75
+ C1 — оценки 1…5 (конвенция)
76
+ P1 ::= [ξ∈C1] ξ ≥ 3
77
+ ```
78
+
79
+ **Целые без конституенты** (размеры):
80
+
81
+ ```text
82
+ S1: Z×Z — пара (ширина, длина)
83
+ D1 := pr1(S1) — ширина
84
+ F1 ::= [α∈Z] α - 1
85
+ ```
86
+
87
+ ## См. также
88
+
89
+ - [CONCEPTUAL-SCHEMA.md](CONCEPTUAL-SCHEMA.md) — независимость неопределяемых понятий, атрибуты vs отношения.
90
+ - [TYPIFICATION.md](TYPIFICATION.md) — ступени `Xi`, `Ci`, `Z`.
91
+ - [SYNTAX.md](SYNTAX.md) — арифметика и предикаты над `Z`; биективная переносимость в разделе «Корректность».
92
+ - [MODEL-TESTING.md](MODEL-TESTING.md) — проверка выбора на маленькой КМ.
@@ -9,15 +9,15 @@
9
9
  - Добавляй конституенту, если есть новый критерий выбора, роль, отношение, инвариант или правило.
10
10
  - Если одно различие постоянно переформулируется, выдели отдельную конституенту.
11
11
  - Не копируй источник дословно. Строй предметную модель.
12
- - Разработка КС ведется итеративно - вводи понятия, эксплицируй определения, формируй новый понтия, исследуй предметную область.
12
+ - Разрабатывай КС итеративно: вводи понятия, раскрывай определения, проверяй формулы и уточняй предметную область.
13
13
 
14
14
  ## Предметная редукция
15
15
 
16
16
  Концептуализация решает задачу, не переписывает весь источник.
17
17
 
18
18
  - Рассматривай только нужный аспект определения.
19
- - Нужно опускать неважные отношения.
20
- - Можно не различать предметные термины, если задача не требует различения.
19
+ - Опускай отношения, которые не влияют на задачу.
20
+ - Не различай предметные термины, если задача не требует этого различия.
21
21
  - Если различение влияет на критерий, вывод или проверку, введи его явно.
22
22
 
23
23
  ## Номиноиды и атрибутирование
@@ -30,9 +30,11 @@
30
30
 
31
31
  ## Неопределяемые понятия
32
32
 
33
- `X#`, `C#`, и `S#` — это **неопределяемые понятия** (см. [DOMAIN.md](DOMAIN.md)); их нельзя строить одно из другого и включать друг в друга как элементы или подмножества.
34
- Если такое возникает — значит есть скрытое отношение, его нужно явно оформить отдельной производной конституентой.
35
- Если интерпретации разных **базисных множеств** `X#` пересекаются или набор констант `C#` показывает атрибут, который должен быть отношением — отсутствует нужное отношение; введи `S#` или производное `D#` / `F#` / `P#`.
33
+ `X#`, `C#`, и `S#` — это **неопределяемые понятия** (см. [DOMAIN.md](DOMAIN.md)). Выбор между `X#`, `C#` и встроенным `Z` — [BASE-SELECTION.md](BASE-SELECTION.md).
34
+
35
+ Не вводи новое неопределяемое понятие, если оно однозначно выводится из уже введённых. В таком случае обычно не хватает производной конституенты `D#` / `F#` / `P#` или явно заданного отношения `S#`.
36
+
37
+ Если интерпретации разных **базисных множеств** `X#` пересекаются, проверь предметное различие: возможно, это одно множество с отношениями ролей. Если `C#` используется как код атрибута объекта (пол, цвет, статус), замени кодирование на отношение `S#` или производное понятие.
36
38
 
37
39
  Не вводи `S#` для отношения, которое предметно зависит от уже заданных структур и должно вычисляться из них. Такое отношение оформляй как `D#`, `F#` или `P#`. Если нужная операция не выражается текущим синтаксисом, фиксируй это как ограничение языка или модели, а не подменяй производное отношение новой независимой структурой.
38
40
 
@@ -50,13 +52,19 @@
50
52
 
51
53
  ## Разворачивание понятий
52
54
 
53
- При концептуализации вводи понятия по зависимостям: неопределяемые (`X#`, `C#`, независимые `S#`), аксиомы `A#`, затем производные `D#` / `P#` / `A#`. Каждый шаг опирается только на уже введённые конституенты.
55
+ Вводи понятия по зависимостям:
56
+
57
+ 1. Неопределяемые понятия: `X#`, `C#`, независимые `S#`.
58
+ 2. Производные термы и функции: `D#`, `F#`, `P#`.
59
+ 3. Ограничения и проверяемые утверждения: `A#`, `T#`.
60
+
61
+ Каждый шаг должен опираться только на уже введённые конституенты. Если аксиоме нужен промежуточный термин, сначала введи этот термин, затем аксиому.
54
62
 
55
63
  Не обязательно сводить схему к одному «центральному» отношению. Зачастую нужны разные понятия на пересечении нескольких аспектов — структур, ролей, ограничений, сценариев. Каждый аспект может дать свои `S#` и `F#`; производные термы выражают их сочетания.
56
64
 
57
- Если один сценарий естественно задаётся кортежем с ограничениями через уже введённые `F#` и `S#`, оформи его как `D#` или независимый `S#`; части кортежа именуй через `D# := Pr#(…)`.
65
+ Если сценарий вычисляется из уже введённых `F#` и `S#`, оформи его как `D#`; если он задаётся независимой интерпретацией, используй `S#`. Части кортежа именуй через `D# := Pr#(…)`.
58
66
 
59
- ## Формулировки аксиом
67
+ ## Аксиомы
60
68
 
61
69
  Для функциональности отношения предпочитай `card`:
62
70
 
@@ -80,12 +88,9 @@ card(S1) = card(Pr1,2(S1))
80
88
 
81
89
  ## Параметризованные определения и радикалы
82
90
 
83
- Терм-функция (`F#`) и предикат-функция (`P#`) могут быть **шаблонными**: одно формальное определение применяется к разным структурам через аргументы вызова.
91
+ Терм-функция (`F#`) и предикат-функция (`P#`) могут быть шаблонными: одно формальное определение применяется к разным структурам через радикалы `R#` в доменах параметров (синтаксис — [SYNTAX.md](SYNTAX.md), раздел «Радикалы»).
84
92
 
85
- В доменах параметров (`[α∈…, β∈…]`) допустимы **радикалы** `R1`, `R2`, … — шаблонные ступени, которые не объявляются как конституенты. Ступень `R#` фиксируется при вызове `F#[…]` / `P#[…]` по типизации фактических аргументов.
93
+ Правила проектирования:
86
94
 
87
- Правила:
88
-
89
- - Не добавляй в схему конституенту с `alias` `R1` (или другим `R#`) «для полноты» — это смешивает шаблон с предметной КС.
90
95
  - Если одна и та же конструкция нужна для нескольких родовых структур, предпочитай один параметризованный `F#` / `P#` с радикалами вместо дублирования определений.
91
- - Радикалы только в `[…]`; в теле после `]` — только конкретные ступени и ссылки на конституенты.
96
+ - Не добавляй в схему конституенту с `alias` `R1` (или другим `R#`) «для полноты» — это смешивает шаблон с предметной КС.
@@ -19,8 +19,8 @@
19
19
  ## `cstType`
20
20
 
21
21
  - `nominal` / `N#` — номиноид. В родоструктурной экспликации и формальных определениях не используется.
22
- - `basic` / `X#` — базисное множество; формула пустая.
23
- - `constant` / `C#` — константное множество; формула пустая.
22
+ - `basic` / `X#` — базисное множество; формула пустая. Без арифметики и порядка над элементами.
23
+ - `constant` / `C#` — константное множество; формула пустая. С арифметикой и порядком; интерпретация в КМ. См. [BASE-SELECTION.md](BASE-SELECTION.md) (отличие от `X#` и встроенного `Z`).
24
24
  - `structure` / `S#` — родовая структура; `definitionFormal` задает область определения (типизацию).
25
25
  - `term` / `D#` — терм; формальное определение задает вычисляемое значение.
26
26
  - `function` / `F#` — терм-функция.
@@ -34,6 +34,6 @@
34
34
 
35
35
  1. Префикс `alias` соответствует `cstType`.
36
36
  2. У `basic` и `constant` пустая формула, иначе `definitionNotAllowed` (`0x8862`).
37
- 3. Все глобальные ссылки на **конституенты** (`X#`, `C#`, `S#`, `D#`, `F#`, `P#`, …) уже есть в сессии. Имена `R#` в доменах параметров `function` / `predicate` — **радикалы** (шаблонные ступени), не конституенты; отдельной записи с `alias` `R1`, `R2`, … в схеме быть не должно. Подробнее — `SYNTAX.md` (раздел «Радикалы»), `TYPIFICATION.md`.
37
+ 3. Все глобальные ссылки на **конституенты** (`X#`, `C#`, `S#`, `D#`, `F#`, `P#`, …) уже есть в сессии. `R#` — радикалы, не конституенты; записи с `alias` `R1`, `R2`, … в схеме быть не должно ([SYNTAX.md](SYNTAX.md), раздел «Радикалы»).
38
38
  4. `axiom` и `statement` имеют типизацию `Logic`, иначе `expectedLogic`.
39
39
  5. Выводимая конституента с пустой формулой дает `cstEmptyDerived`.
package/docs/DOMAIN.md CHANGED
@@ -20,23 +20,29 @@
20
20
  - **Тело КС** — остальные конституенты схемы, не входящие в ядро.
21
21
  - **Конвенция** — текстовое соглашение о том, как неопределяемое понятие соотносится с сущностями предметной области. В данных схемы хранится в поле `convention` конституенты. Конвенция не заменяет формальное определение и не проходит формальную проверку RSLang. Она фиксирует предметный смысл, который нельзя вывести из формулы: что именно считается элементом множества, как читать компоненты кортежа, какой порядок в паре отношения, какие константы или операции подразумеваются. В конвенции используется предметный язык и термины, которые могут быть не выражены в концептуальной схеме.
22
22
  - **Интерпретация** — соотнесение понятий КС с сущностями предметной области. В концептуальной модели задаётся значениями неопределяемых конституент и вычислением производных.
23
+ - **Биективная переносимость** — независимость значения формального определения от биективной замены интерпретаций неопределяемых понятий. Для `X#` опирается на несравнимость элементов; анализатор RSLang отсекает формулы, нарушающие переносимость.
23
24
 
24
25
  ## Конституенты
25
26
 
26
- **Конституента** — часть КС. Главное для агента: `alias`, `cstType`, `definitionFormal`, `term`, `definitionText`, `convention`. `comment` — комментарий и пояснения разработчика схемы, полезно для контекста.
27
+ **Конституента** — часть КС. Поля и правила валидации см. в [CONSTITUENTA.md](CONSTITUENTA.md); здесь только предметные роли.
27
28
 
28
- - `N#` — **номиноид**: словарная сущность. В родоструктурной экспликации не используется.
29
- - `X#` — **базисное множество**: неопределяемое понятие, формула пустая.
30
- - `C#` — **константное множество**: неопределяемое понятие для арифметики и порядка, формула пустая.
31
- - `S#` — **родовая структура**: неопределяемое структурное понятие; формула задает типизацию.
32
- - `D#` — **терм**: определяемое понятие; формула вычисляет значение.
33
- - `F#` — **терм-функция**: параметризованный терм.
34
- - `P#` — **предикат-функция**: параметризованное логическое выражение.
35
- - `A#` — **аксиома**: логическое требование к модели.
36
- - `T#` — **высказывание**: логическое утверждение о модели.
37
- - `R#` — **радикал**: шаблонная ступень в **доменах параметров** терм-функции (`F#`) или предикат-функции (`P#`). Это не конституента: в схеме нет записи с `alias` `R1`, `R2`, … и добавлять её через правку схемы не нужно. Ступень `R#` выводится в **месте вызова** `F#[…]` / `P#[…]` по типизации аргументов.
29
+ | Обозначение | Роль |
30
+ | :---------- | :-------------------------------------------------------------------------------------- |
31
+ | `N#` | **Номиноид**: словарная сущность вне родоструктурной экспликации |
32
+ | `X#` | **Базисное множество**: неопределяемые предметные объекты без порядка и арифметики |
33
+ | `C#` | **Константное множество**: неопределяемый конечный домен с порядком и арифметикой языка |
34
+ | `S#` | **Родовая структура**: неопределяемое структурное понятие; формула задаёт типизацию |
35
+ | `D#` | **Терм**: производное понятие, вычисляемое по формуле |
36
+ | `F#` | **Терм-функция**: параметризованный терм |
37
+ | `P#` | **Предикат-функция**: параметризованное логическое выражение |
38
+ | `A#` | **Аксиома**: логическое требование к модели |
39
+ | `T#` | **Высказывание**: логическое утверждение о модели |
38
40
 
39
- Правило: `X#`, `C#`, `S#` задаются конвенцией и интерпретацией; `D#`, `F#`, `P#`, `A#`, `T#` выводятся по формуле. Поставщики должны идти раньше потребителей. Радикалы `R#` к конституентам не относятся.
41
+ `Z` — встроенная ступень целых в RSLang, **не конституента**. Для выбора между `X#`, `C#` и `Z` — [BASE-SELECTION.md](BASE-SELECTION.md).
42
+
43
+ `R#` — **радикал**, шаблонная ступень в доменах параметров `F#` / `P#`. Это тоже **не конституента**: в схеме нет записи с `alias` `R1`, `R2`, … и добавлять её не нужно ([SYNTAX.md](SYNTAX.md), раздел «Радикалы»).
44
+
45
+ Правило: `X#`, `C#`, `S#` задаются конвенцией и интерпретацией; `D#`, `F#`, `P#`, `A#`, `T#` выводятся по формуле. Поставщики должны идти раньше потребителей.
40
46
 
41
47
  Не путай `S#` и `D#`: `S1: ℬ(X1×X1)` — интерпретируемое отношение из пар; `D1 := X1×X1` — декартово произведение.
42
48
 
@@ -62,15 +68,15 @@
62
68
 
63
69
  В ответах пользователю и в конвенциях КС используй только термины из этого файла. Не вводи собственные ярлыки («базис», «базисный слой», «каркас схемы») — они не закреплены в Portal и размывают различия ниже.
64
70
 
65
- | Не используй | Используй | Почему |
66
- | :------------------------------------------------------ | :------------------------------------------------------------------------------------------ | :------------------------------------------------------- |
67
- | «базис», «базисный слой», «первый слой» (без уточнения) | **неопределяемые понятия** — `X#`, `C#`, `S#` | Общий термин для всего неопределяемого слоя |
68
- | «базис» / «базисное» про `C#` или `S#` | **константное множество** (`C#`), **родовая структура** (`S#`) | **Базисное множество** — только про `X#` |
69
- | «базисные множества» как синоним неопределяемых понятий | **базисные множества** — только несколько `X#`; для всего слоя — **неопределяемые понятия** | `C#` и `S#` базисными множествами не называются |
70
- | «ядро» = неопределяемые понятия» | **ядро КС** — неопределяемые понятия плюс аксиомы и производные, нужные для аксиом | Ядро шире, чем только `X#` / `C#` / `S#` |
71
- | теорема про `T#` | **высказывание** — производное логическое выражение `T#` | тип теорема на Portal отсутствует и вводит в заблуждение |
72
- | «пропущенная конституента `R1`» в списке схемы | **радикал** `R#` — параметр шаблона в домене `F#` / `P#` | `R#` не объявляется; при ревью КС отсутствие `R1` среди конституент — норма |
73
- | «добавить `R1` как базисное / структурное понятие» | оставить `R#` только в `[…]` у параметризованных `F#` / `P#` | иначе смешиваются шаблон и предметная КС |
71
+ | Не используй | Используй | Почему |
72
+ | :------------------------------------------------------ | :------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- |
73
+ | «базис», «базисный слой», «первый слой» (без уточнения) | **неопределяемые понятия** — `X#`, `C#`, `S#` | Общий термин для всего неопределяемого слоя |
74
+ | «базис» / «базисное» про `C#` или `S#` | **константное множество** (`C#`), **родовая структура** (`S#`) | **Базисное множество** — только про `X#` |
75
+ | «базисные множества» как синоним неопределяемых понятий | **базисные множества** — только несколько `X#`; для всего слоя — **неопределяемые понятия** | `C#` и `S#` базисными множествами не называются |
76
+ | «ядро» = неопределяемые понятия» | **ядро КС** — неопределяемые понятия плюс аксиомы и производные, нужные для аксиом | Ядро шире, чем только `X#` / `C#` / `S#` |
77
+ | теорема про `T#` | **высказывание** — производное логическое выражение `T#` | тип теорема на Portal отсутствует и вводит в заблуждение |
78
+ | «пропущенная конституента `R1`» в списке схемы | **радикал** `R#` — параметр шаблона в домене `F#` / `P#` | `R#` не объявляется; при ревью КС отсутствие `R1` среди конституент — норма |
79
+ | «добавить `R1` как базисное / структурное понятие» | оставить `R#` только в `[…]` у параметризованных `F#` / `P#` | иначе смешиваются шаблон и предметная КС |
74
80
 
75
81
  ## Статусы выражений
76
82
 
package/docs/README.md CHANGED
@@ -9,6 +9,7 @@
9
9
  - **DOMAIN.md** — термины Portal: конституента, неопределяемые и производные понятия, ядро/тело КС, интерпретация, ОСС, синтез.
10
10
  - **CONCEPTUAL-SCHEMA.md** — проектирование и ревью концептуальных схем.
11
11
  - **CONSTITUENTA.md** — структура и правила конституент.
12
+ - **BASE-SELECTION.md** — выбор основания: `X#`, `C#` или `Z`.
12
13
  - **SYNTAX.md** — синтаксис RSLang: операторы, генераторы `D{}`/`I{}`/`R{}`, кванторы, `F#`/`P#`.
13
14
  - **TYPIFICATION.md** — типизация (`AnalysisResult.type`, `valueClass`).
14
15
  - **MODEL-TESTING.md** — проверка семантики определений на маленьких концептуальных моделях.
package/docs/SYNTAX.md CHANGED
@@ -8,7 +8,8 @@
8
8
  - Радикалы: `R1`, `R2` — шаблонные ступени **только в доменах параметров** `[…]` у `F#` / `P#`; не конституенты и не путать с префиксом рекурсии `R{…}`.
9
9
  - Локальные переменные: `x`, `ξ`, `μ2`, `y1`.
10
10
  - Целые: `0`, `42`; отрицательного литерала нет, пиши `0 - 5`.
11
- - `Z` — множество целых, `∅` — пустое множество с типизацией `ℬ(R0)`.
11
+ - `Z` — встроенная ступень целых (не конституента; отдельной записи `C#` для «целых» не нужно). Сравнение с `C#` — [BASE-SELECTION.md](BASE-SELECTION.md).
12
+ - `∅` — пустое множество с типизацией `ℬ(R0)`.
12
13
  - Скобки и разделители: `()`, `[]`, `{}`, `,`, `;`, `|`.
13
14
  - Комментариев в формальных выражениях нет.
14
15
 
@@ -161,7 +162,7 @@ F2 ::= [α1∈R1×R2, α2∈R1] α2 = pr1(α1)
161
162
  ## Корректность
162
163
 
163
164
  - Анализ идет в глобальном контексте: все алиасы **конституент** (`X#`, `C#`, `S#`, `D#`, `F#`, `P#`, …) должны быть известны и типизированы. `R#` в доменах параметров — радикалы, не конституенты (см. выше).
164
- - Формальные определения должны быть биективно переносимыми (гарантируется семантическим анализатором).
165
+ - Формальные определения должны быть **биективно переносимыми** (гарантируется семантическим анализатором): значение не зависит от переименования элементов неопределяемых понятий при согласованной замене интерпретаций. Для `X#` это запрещает порядок и арифметику над элементами; подробно — [BASE-SELECTION.md](BASE-SELECTION.md).
165
166
  - Логическая непротиворечивость проверяется примером интерпретации в модели.
166
167
 
167
168
  ## Приоритеты операторов
@@ -6,8 +6,8 @@
6
6
 
7
7
  Выражение типизировано, если его значения принадлежат ступени `H`.
8
8
 
9
- - `Xi`, `Ci` — элемент базисного или константного множества.
10
- - `Z` — целое число.
9
+ - `Xi`, `Ci` — элемент базисного или константного множества (`Ci` — с арифметикой и порядком).
10
+ - `Z` — целое число (встроенная ступень, не конституента). См. [BASE-SELECTION.md](BASE-SELECTION.md).
11
11
  - `(H1 × H2 × ... × Hn)` — кортеж.
12
12
  - `ℬ(H)` — множество значений ступени `H`.
13
13
 
@@ -20,13 +20,7 @@
20
20
 
21
21
  ## Радикалы
22
22
 
23
- `R1`, `R2`, ... — шаблонные ступени в доменах параметров `F#` / `P#`. **Не конституенты:** в КС нет и не требуется записи с `alias` `R#`.
24
-
25
- - Значение `R#` выводится по аргументам в месте вызова `F#[…]` / `P#[…]`.
26
- - Все вхождения одного `R#` в одном определении должны дать одну ступень.
27
- - Разные `R#` независимы.
28
- - Радикалы можно писать только в доменах параметров (в `[…]`); в теле результата будет `radicalUsage`.
29
- - При ревью схемы отсутствие `R1` среди конституент при наличии `R1` в формулах `F#` / `P#` — ожидаемое состояние, а не пробел ядра КС.
23
+ `R1`, `R2`, ... — шаблонные ступени в доменах параметров `F#` / `P#`; **не конституенты**. Ступень `R#` выводится по аргументам в месте вызова; все вхождения одного `R#` в определении дают одну ступень, разные `R#` независимы. Правила и примеры — [SYNTAX.md](SYNTAX.md), раздел «Радикалы».
30
24
 
31
25
  ## `AnalysisResult.type`
32
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract.",
5
5
  "license": "MIT",
6
6
  "author": "IRBorisov",
@@ -16,6 +16,25 @@ const result = tool.applySchemaPatch({
16
16
  console.log(result.summary.itemCount, result.success);
17
17
  ```
18
18
 
19
+ ## `X#`, `C#` и `Z`
20
+
21
+ Выбор основания — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
22
+
23
+ ```ts
24
+ // X# + отношение
25
+ tool.applySchemaPatch({
26
+ items: [
27
+ { alias: 'X1', convention: 'люди' },
28
+ { alias: 'S1', definitionFormal: 'ℬ(X1×X1)' }
29
+ ]
30
+ });
31
+
32
+ // Z×Z (шоколадный Ним) — без X# и C#
33
+ tool.applySchemaPatch({
34
+ items: [{ alias: 'S1', definitionFormal: 'Z×Z', convention: 'ширина × длина' }]
35
+ });
36
+ ```
37
+
19
38
  ## Анализ без сохранения
20
39
 
21
40
  ```ts
@@ -27,6 +27,7 @@
27
27
  - API, методы, stdio: [REFERENCE.md](REFERENCE.md).
28
28
  - Примеры: [EXAMPLES.md](EXAMPLES.md).
29
29
  - Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
30
+ - **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md) — когда какое основание вводить.
30
31
  - Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
31
32
  - Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
32
33
  - Синтаксис родов структур: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
@@ -45,7 +46,7 @@
45
46
  Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
46
47
 
47
48
  1. Продолжи текущую сессию или вызови `ensureSession`; большинство методов создают сессию лениво.
48
- 2. Развивай схему через `applySchemaPatch`: можно опускать `id` и `cstType` для стандартных alias `X/C/S/D/A/F/P`.
49
+ 2. Развивай схему через `applySchemaPatch`: можно опускать `id` и `cstType` — они выводятся из префикса `alias` (`X/C/S/D/F/P/A/T/N`).
49
50
  3. Для пачки конституент передавай все элементы вместе — `applySchemaPatch` упорядочит поставщиков раньше потребителей.
50
51
  4. Перед patch в `applySchemaPatch` при сомнении вызывай `analyzeExpression`.
51
52
  5. Исправляй диагностики по диапазону `from` / `to` в `definitionFormal` ([DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md)).
@@ -58,29 +59,24 @@
58
59
  ### Оценка или правка КС из Portal
59
60
 
60
61
  Когда пользователь даёт UI-ссылку вида `https://portal.acconcept.ru/rsforms/:id`,
61
- не открывай SPA и не парси HTML. Преобразуй ссылку в REST API по правилам
62
- [PORTAL-API.md](../../docs/PORTAL-API.md): метаданные `GET /api/rsforms/:id`,
63
- полная КС `GET /api/rsforms/:id/details`, версия `GET /api/library/:id/versions/:version`.
64
- Если id неизвестен — контекстный поиск `GET /api/library/context-search?q=...`, затем
65
- метаданные по найденным id: `GET /api/library/by-ids?ids=...` (curl и поля поиска — в том же файле).
62
+ не открывай SPA и не парси HTML: преобразуй ссылку в REST-запрос по правилам
63
+ [PORTAL-API.md](../../docs/PORTAL-API.md) — там пути, контекстный поиск, правила доступа и curl.
66
64
 
67
65
  Portal JSON из `/details` не является форматом `exportSession`. Используй `importData(payload)` —
68
- auto определит `portal-details` или `portal-schema`. Явный kind: `'portal-details'`, `'portal-schema'`, `'session'`.
66
+ kind `auto` (default) определит `portal-details` или `portal-schema`. Явный kind: `'portal-details'`, `'portal-schema'`, `'session'`.
69
67
 
70
68
  ### Концептуализация (КС из содержания источника)
71
69
 
72
70
  Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
73
71
 
74
72
  1. Собери словарь: неопределяемые понятия, ключевые отношения, сценарий синтеза.
75
- 2. Добавь неопределяемые понятия `X#`, `C#`, `S#` с конвенциями из источника (не копируй дословно).
76
- 3. Проверь независимость неопределяемых понятий — они не выводятся друг из друга.
77
- Если отношение или множество выражается через уже введенные `X#`, `C#`, `S#`, оформляй его как `D#` / `F#` / `P#`.
78
- 4. Введи `F#` и `D#` для раскрытия проекций и функциональных связей в неопределяемых понятиях.
79
- 5. Добавь `A#` на структуры, выражающие ограничения предметной области. Возможно стоит ввести промежуточные производные термы и терм-функции.
80
- 6. Подбери промежуточные производные понятия `D#`, `F#`, `P#` так, чтобы выразить целевые понятия без использования не введенных в схеме понятий.
81
- 7. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
82
- 8. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
83
- 9. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
73
+ 2. Добавь независимые неопределяемые понятия `X#`, `C#`, `S#` с конвенциями из источника (не копируй дословно). Для выбора `X#` vs `C#` vs `Z` — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
74
+ 3. Всё, что выводится из уже введённых понятий, оформляй как `D#` / `F#` / `P#`, а не как новое `X#` / `C#` / `S#`.
75
+ 4. Вводи промежуточные `D#`, `F#`, `P#` для проекций, функциональных связей и повторяющихся фрагментов формул.
76
+ 5. Добавь `A#` и `T#` после терминов, на которые они опираются.
77
+ 6. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
78
+ 7. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
79
+ 8. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
84
80
 
85
81
  Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
86
82
 
@@ -110,12 +106,9 @@ auto определит `portal-details` или `portal-schema`. Явный kind
110
106
 
111
107
  ### Порядок объявления конституент
112
108
 
113
- 1. В начале схемы — `basic`, `constant`.
114
- 2. Родовые структуры производные и ключевые понятия, аксиомы и утверждения в произвольном порядке.
115
- 3. Конституенты в топологическом порядке.
116
- 4. Предпочитай размещать связанные с родовыми структурами конституенты вместе с этой структурой.
109
+ В начале схемы — `basic` и `constant`, затем независимые `structure`, затем производные (`term`, `function`, `predicate`, `axiom`, `statement`) в топологическом порядке. Производные при родовой структуре держи рядом с ней, если это не ломает зависимости.
117
110
 
118
- Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
111
+ Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md); разворачивание понятий при проектировании — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
119
112
 
120
113
  ## Формат ответа агента
121
114
 
@@ -160,7 +153,7 @@ auto определит `portal-details` или `portal-schema`. Явный kind
160
153
  ### Сессия и rstool
161
154
 
162
155
  - [ ] Используется текущая сессия (`getSessionState`) или явный `sessionId`, если сессий несколько.
163
- - [ ] Для стандартных alias `X/C/S/D/A/F/P` можно не указывать `cstType` в `applySchemaPatch`.
156
+ - [ ] Для стандартных `X/C/S/D/F/P/A/T/N` можно не указывать `cstType` в `applySchemaPatch`.
164
157
  - [ ] Для пачки конституент предпочитай один `applySchemaPatch` с массивом `items`.
165
158
 
166
159
  ### Перед показом, commit и export
@@ -177,6 +170,7 @@ auto определит `portal-details` или `portal-schema`. Явный kind
177
170
  - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
178
171
  - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
179
172
  - [ ] Неопределяемые понятия независимы; производные отношения вынесены в `D#` / `F#` / `P#`, а не объявлены новыми структурами.
173
+ - [ ] `X#` — только предметные сущности; `C#` — только если нужны порядок/арифметика над именованным конечным набором в КМ; чистая целочисленная математика — `Z` без лишней конституенты ([BASE-SELECTION.md](../../docs/BASE-SELECTION.md)).
180
174
  - [ ] Покрыты главные сущности, роли, отношения, утверждения.
181
175
  - [ ] В текстовых определениях используются только понятия из схемы.
182
176
  - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
@@ -22,8 +22,8 @@
22
22
  | `commitStep(message?, sessionId?)` | Ревизия |
23
23
  | `exportSession(sessionId?)` | JSON сессии |
24
24
  | `exportPortal({ kind, format? }, sessionId?)` | Portal Load from JSON |
25
- | `importData(payload, kind?)` | Импорт сессии / Portal |
26
- | `setModelValues({ set?, clear? }, sessionId?)` | Значения модели |
25
+ | `importData(payload, kind?)` | Импорт сессии / Portal (`kind` см. ниже) |
26
+ | `setModelValues({ set?, clear? }, sessionId?)` | Значения модели (async — нужен `await`) |
27
27
  | `getModelState(sessionId?)` | Состояние интерпретации |
28
28
  | `evaluate(input, sessionId?)` | Scratch или конституента |
29
29
  | `recalculateModel(sessionId?)` | Пересчёт |
@@ -38,6 +38,15 @@ tool.applySchemaPatch({
38
38
  });
39
39
  ```
40
40
 
41
+ - `items` упорядочиваются автоматически: поставщики раньше потребителей.
42
+ - `id` и `cstType` можно опускать — выводятся из префикса `alias` (`X/C/S/D/F/P/A/T/N`).
43
+ - `mode`: `'atomic'` (default; откат всей пачки при первой ошибке) или `'best_effort'` (применяются корректные элементы).
44
+ - `commitMessage` фиксирует ревизию после успешного patch.
45
+
46
+ ### `importData(payload, kind?)`
47
+
48
+ `kind`: `'auto'` (default; определяет формат по содержимому), `'session'`, `'portal-details'` (ответ `GET /api/rsforms/:id/details`), `'portal-schema'` (Portal Load from JSON). После импорта новая сессия становится текущей.
49
+
41
50
  ### Протокол stdio
42
51
 
43
52
  Плоские `params` (без `input`). Опционально: переменная окружения `RSTOOL_PERSISTENCE_DIR` — каталог для сохранения сессий между перезапусками обёртки (в library API — `new RSToolAgent({ persistenceDir })`).
@@ -55,10 +64,6 @@ tool.applySchemaPatch({
55
64
  {"id":"10","method":"importData","params":{"payload":"..."}}
56
65
  ```
57
66
 
58
- ### MCP tools
59
-
60
- 17 tools — см. `rstool-mcp/README.md`.
61
-
62
67
  ## Документация
63
68
 
64
69
  Воркфлоу: `GUIDE.md`. Примеры: `EXAMPLES.md`. Язык: `docs/*.md`.