@rsconcept/rstool 1.2.1 → 1.2.2

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.
@@ -77,3 +77,15 @@ card(S1) = card(Pr1,2(S1))
77
77
  - `card(F[ξ]) = 1`.
78
78
 
79
79
  Перед `D{x∈… | ∃d1∈… ∃d2∈…}` проверь, нельзя ли взять `Pr` от уже введенного отношения.
80
+
81
+ ## Параметризованные определения и радикалы
82
+
83
+ Терм-функция (`F#`) и предикат-функция (`P#`) могут быть **шаблонными**: одно формальное определение применяется к разным структурам через аргументы вызова.
84
+
85
+ В доменах параметров (`[α∈…, β∈…]`) допустимы **радикалы** `R1`, `R2`, … — шаблонные ступени, которые не объявляются как конституенты. Ступень `R#` фиксируется при вызове `F#[…]` / `P#[…]` по типизации фактических аргументов.
86
+
87
+ Правила:
88
+
89
+ - Не добавляй в схему конституенту с `alias` `R1` (или другим `R#`) «для полноты» — это смешивает шаблон с предметной КС.
90
+ - Если одна и та же конструкция нужна для нескольких родовых структур, предпочитай один параметризованный `F#` / `P#` с радикалами вместо дублирования определений.
91
+ - Радикалы только в `[…]`; в теле после `]` — только конкретные ступени и ссылки на конституенты.
@@ -34,6 +34,6 @@
34
34
 
35
35
  1. Префикс `alias` соответствует `cstType`.
36
36
  2. У `basic` и `constant` пустая формула, иначе `definitionNotAllowed` (`0x8862`).
37
- 3. Все глобальные ссылки уже есть в сессии.
37
+ 3. Все глобальные ссылки на **конституенты** (`X#`, `C#`, `S#`, `D#`, `F#`, `P#`, …) уже есть в сессии. Имена `R#` в доменах параметров `function` / `predicate` — **радикалы** (шаблонные ступени), не конституенты; отдельной записи с `alias` `R1`, `R2`, … в схеме быть не должно. Подробнее — `SYNTAX.md` (раздел «Радикалы»), `TYPIFICATION.md`.
38
38
  4. `axiom` и `statement` имеют типизацию `Logic`, иначе `expectedLogic`.
39
39
  5. Выводимая конституента с пустой формулой дает `cstEmptyDerived`.
@@ -80,37 +80,37 @@
80
80
 
81
81
  ## Типизация и структура
82
82
 
83
- | Код | Имя | `params` | Исправление |
84
- | -------- | ---------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
85
- | `0x880A` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` ≠ `b`). |
86
- | `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
87
- | `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
88
- | `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
89
- | `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
90
- | `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
91
- | `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
92
- | `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
93
- | `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
94
- | `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
95
- | `0x8830` | `projectionSetArgumentNotSet` | `[operator, actual]` | `Pr*` применяется к множеству; аргумент не типизирован как `ℬ(H)`. |
96
- | `0x8831` | `projectionSetArgumentNotTupleSet` | `[operator, actual]` | `Pr*` требует множество кортежей `ℬ(H1×…×Hn)`; аргумент — множество не-кортежей, напр. `ℬ(X1)`. |
97
- | `0x8832` | `projectionSetIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс проекции `index` превышает размерность `arity` кортежа аргумента `actual`. |
98
- | `0x8833` | `projectionTupleArgumentNotTuple` | `[operator, actual]` | `pr*` применяется к кортежу `H1×…×Hn`; получен другой тип. |
99
- | `0x8834` | `projectionTupleIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс `index` превышает размерность `arity` кортежа `actual`. |
100
- | `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` ≠ `b`). |
101
- | `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа ≠ размерности `×` (напр. `∀(a,b)∈X1`). |
102
- | `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` — тип элемента, `c` — тип множества. |
103
- | `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` (напр. `X1∪∅`). |
104
- | `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` ≠ `actual`). |
105
- | `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
106
- | `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
107
- | `0x8821` | `radicalUsage` | `[name]` | Радикал `name` допустим только внутри аргумента функции. |
108
- | `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
109
- | `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
110
- | `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
111
- | `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
112
- | `0x8829` | `invalidArgumentCortegeDeclare` | — | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
113
- | `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
83
+ | Код | Имя | `params` | Исправление |
84
+ | -------- | ---------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
85
+ | `0x880A` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` ≠ `b`). |
86
+ | `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
87
+ | `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
88
+ | `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
89
+ | `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
90
+ | `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
91
+ | `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
92
+ | `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
93
+ | `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
94
+ | `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
95
+ | `0x8830` | `projectionSetArgumentNotSet` | `[operator, actual]` | `Pr*` применяется к множеству; аргумент не типизирован как `ℬ(H)`. |
96
+ | `0x8831` | `projectionSetArgumentNotTupleSet` | `[operator, actual]` | `Pr*` требует множество кортежей `ℬ(H1×…×Hn)`; аргумент — множество не-кортежей, напр. `ℬ(X1)`. |
97
+ | `0x8832` | `projectionSetIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс проекции `index` превышает размерность `arity` кортежа аргумента `actual`. |
98
+ | `0x8833` | `projectionTupleArgumentNotTuple` | `[operator, actual]` | `pr*` применяется к кортежу `H1×…×Hn`; получен другой тип. |
99
+ | `0x8834` | `projectionTupleIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс `index` превышает размерность `arity` кортежа `actual`. |
100
+ | `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` ≠ `b`). |
101
+ | `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа ≠ размерности `×` (напр. `∀(a,b)∈X1`). |
102
+ | `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` — тип элемента, `c` — тип множества. |
103
+ | `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` (напр. `X1∪∅`). |
104
+ | `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` ≠ `actual`). |
105
+ | `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
106
+ | `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
107
+ | `0x8821` | `radicalUsage` | `[name]` | Радикал `name` (`R#`) допустим только в домене параметра `[…]` у `F#` / `P#`, не в теле формулы. `R#` не объявляется конституентой — см. `SYNTAX.md`. |
108
+ | `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
109
+ | `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
110
+ | `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
111
+ | `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
112
+ | `0x8829` | `invalidArgumentCortegeDeclare` | — | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
113
+ | `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
114
114
 
115
115
  ## Фильтр `Fi`
116
116
 
package/docs/DOMAIN.md CHANGED
@@ -34,9 +34,9 @@
34
34
  - `P#` — **предикат-функция**: параметризованное логическое выражение.
35
35
  - `A#` — **аксиома**: логическое требование к модели.
36
36
  - `T#` — **высказывание**: логическое утверждение о модели.
37
- - `R#` — **радикал**: шаблонная ступень в параметрах.
37
+ - `R#` — **радикал**: шаблонная ступень в **доменах параметров** терм-функции (`F#`) или предикат-функции (`P#`). Это не конституента: в схеме нет записи с `alias` `R1`, `R2`, … и добавлять её через правку схемы не нужно. Ступень `R#` выводится в **месте вызова** `F#[…]` / `P#[…]` по типизации аргументов.
38
38
 
39
- Правило: `X#`, `C#`, `S#` задаются конвенцией и интерпретацией; `D#`, `F#`, `P#`, `A#`, `T#` выводятся по формуле. Поставщики должны идти раньше потребителей.
39
+ Правило: `X#`, `C#`, `S#` задаются конвенцией и интерпретацией; `D#`, `F#`, `P#`, `A#`, `T#` выводятся по формуле. Поставщики должны идти раньше потребителей. Радикалы `R#` к конституентам не относятся.
40
40
 
41
41
  Не путай `S#` и `D#`: `S1: ℬ(X1×X1)` — интерпретируемое отношение из пар; `D1 := X1×X1` — декартово произведение.
42
42
 
@@ -69,6 +69,8 @@
69
69
  | «базисные множества» как синоним неопределяемых понятий | **базисные множества** — только несколько `X#`; для всего слоя — **неопределяемые понятия** | `C#` и `S#` базисными множествами не называются |
70
70
  | «ядро» = неопределяемые понятия» | **ядро КС** — неопределяемые понятия плюс аксиомы и производные, нужные для аксиом | Ядро шире, чем только `X#` / `C#` / `S#` |
71
71
  | теорема про `T#` | **высказывание** — производное логическое выражение `T#` | тип теорема на Portal отсутствует и вводит в заблуждение |
72
+ | «пропущенная конституента `R1`» в списке схемы | **радикал** `R#` — параметр шаблона в домене `F#` / `P#` | `R#` не объявляется; при ревью КС отсутствие `R1` среди конституент — норма |
73
+ | «добавить `R1` как базисное / структурное понятие» | оставить `R#` только в `[…]` у параметризованных `F#` / `P#` | иначе смешиваются шаблон и предметная КС |
72
74
 
73
75
  ## Статусы выражений
74
76
 
package/docs/SYNTAX.md CHANGED
@@ -5,7 +5,7 @@
5
5
  ## Имена и литералы
6
6
 
7
7
  - Глобальные алиасы: `X1`, `C2`, `S3`, `D11`, `F7`, `P4`, `A6`, `T9`; буква совпадает с ролью конституенты.
8
- - Радикалы: `R1`, `R2` — шаблонные ступени в параметрах. Не путать с префиксом рекурсии `R{…}`.
8
+ - Радикалы: `R1`, `R2` — шаблонные ступени **только в доменах параметров** `[…]` у `F#` / `P#`; не конституенты и не путать с префиксом рекурсии `R{…}`.
9
9
  - Локальные переменные: `x`, `ξ`, `μ2`, `y1`.
10
10
  - Целые: `0`, `42`; отрицательного литерала нет, пиши `0 - 5`.
11
11
  - `Z` — множество целых, `∅` — пустое множество с типизацией `ℬ(R0)`.
@@ -139,9 +139,12 @@ P1 ::= [α1∈STE1, α2∈STE2(α1)] LE(α1, α2)
139
139
  F2 ::= [α1∈R1×R2, α2∈R1] α2 = pr1(α1)
140
140
  ```
141
141
 
142
- - `R#` выводится по типизациям аргументов в месте вызова.
143
- - Все вхождения одного `R#` должны совпасть.
144
- - Радикалы допустимы только в доменах параметров.
142
+ - `R#` — **не** глобальный алиас конституенты. В Portal и в JSON схемы нет (и не должно быть) элемента с `alias` `R1`, `R2`, …
143
+ - `R#` пишется только в квадратных скобках `[…]` у терм-функции (`F#`) или предикат-функции (`P#`) — в домене параметра после `∈`.
144
+ - Ступень `R#` выводится по типизациям **аргументов в месте вызова** `F#[…]` / `P#[…]`.
145
+ - Все вхождения одного `R#` в одном определении должны дать одну ступень.
146
+ - В **теле** результата (после `]`) радикалы недопустимы — будет `radicalUsage`.
147
+ - Один и тот же `F#` / `P#` с радикалами можно применять к разным структурам: например, `F5[σ]` для `σ∈S2` и `σ∈S4`, если аргументы согласуют ступень `R1`.
145
148
 
146
149
  ## Примеры
147
150
 
@@ -157,7 +160,7 @@ F2 ::= [α1∈R1×R2, α2∈R1] α2 = pr1(α1)
157
160
 
158
161
  ## Корректность
159
162
 
160
- - Анализ идет в глобальном контексте: все алиасы должны быть известны и типизированы.
163
+ - Анализ идет в глобальном контексте: все алиасы **конституент** (`X#`, `C#`, `S#`, `D#`, `F#`, `P#`, …) должны быть известны и типизированы. `R#` в доменах параметров — радикалы, не конституенты (см. выше).
161
164
  - Формальные определения должны быть биективно переносимыми (гарантируется семантическим анализатором).
162
165
  - Логическая непротиворечивость проверяется примером интерпретации в модели.
163
166
 
@@ -20,12 +20,13 @@
20
20
 
21
21
  ## Радикалы
22
22
 
23
- `R1`, `R2`, ... — шаблонные ступени.
23
+ `R1`, `R2`, ... — шаблонные ступени в доменах параметров `F#` / `P#`. **Не конституенты:** в КС нет и не требуется записи с `alias` `R#`.
24
24
 
25
- - Значение `R#` выводится по аргументам в месте вызова.
26
- - Все вхождения одного `R#` должны дать одну ступень.
25
+ - Значение `R#` выводится по аргументам в месте вызова `F#[…]` / `P#[…]`.
26
+ - Все вхождения одного `R#` в одном определении должны дать одну ступень.
27
27
  - Разные `R#` независимы.
28
- - Радикалы можно писать только в доменах параметров; в теле результата будет `radicalUsage`.
28
+ - Радикалы можно писать только в доменах параметров (в `[…]`); в теле результата будет `radicalUsage`.
29
+ - При ревью схемы отсутствие `R1` среди конституент при наличии `R1` в формулах `F#` / `P#` — ожидаемое состояние, а не пробел ядра КС.
29
30
 
30
31
  ## `AnalysisResult.type`
31
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
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",
@@ -180,4 +180,5 @@ auto определит `portal-details` или `portal-schema`. Явный kind
180
180
  - [ ] Покрыты главные сущности, роли, отношения, утверждения.
181
181
  - [ ] В текстовых определениях используются только понятия из схемы.
182
182
  - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
183
+ - [ ] `R#` в `[…]` у `F#` / `P#` не считается пропущенной конституентой; радикалы не добавляют в схему как `X#` / `S#` / `D#`.
183
184
  - [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.