@rsconcept/rstool 1.9.0 → 2.0.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.
- package/README.md +3 -3
- package/dist/mappers/model-adapter.d.ts +1 -2
- package/dist/mappers/schema-adapter.d.ts +1 -2
- package/dist/mappers/types.d.ts +4 -5
- package/dist/models/rstool-agent.js +1 -2
- package/dist/session/session-store.d.ts +3 -3
- package/dist/session/session-store.js +1 -2
- package/dist/wrapper/client.d.ts +3 -4
- package/docs/BRIEF.md +93 -0
- package/docs/CONCEPTUAL-SCHEMA.md +16 -1
- package/docs/CONSTRUCTIONS.md +14 -2
- package/docs/DIAGNOSTICS.md +3 -2
- package/docs/DOMAIN.md +12 -0
- package/docs/METHOD.md +208 -0
- package/docs/PORTAL-API.md +38 -285
- package/docs/PORTAL-MODELS.md +24 -0
- package/docs/PORTAL-OSS.md +56 -0
- package/docs/PORTAL-PUBLISH.md +39 -0
- package/docs/PORTAL-READ.md +301 -0
- package/docs/README.md +7 -4
- package/docs/REQUIREMENTS.md +61 -0
- package/docs/SYNTAX.md +4 -3
- package/docs/TYPIFICATION.md +1 -1
- package/docs/brief.schema.json +173 -0
- package/examples/README.md +16 -2
- package/examples/access-control/NOTES.md +23 -0
- package/examples/access-control/anti/collapsed.json +439 -0
- package/examples/access-control/anti/weakened.json +439 -0
- package/examples/access-control/brief-v1.json +231 -0
- package/examples/access-control/brief.json +310 -0
- package/examples/access-control/build-rsform.ts +151 -0
- package/examples/access-control/requirements-v1.md +9 -0
- package/examples/access-control/requirements-v2.md +4 -0
- package/examples/access-control/rsform-session-v1.json +439 -0
- package/examples/access-control/rsform-session.json +523 -0
- package/examples/audit-diagnostics.ts +9 -1
- package/examples/briefs.test.ts +126 -0
- package/examples/clinic-booking/NOTES.md +24 -0
- package/examples/clinic-booking/anti/collapsed.json +615 -0
- package/examples/clinic-booking/anti/species-as-genus.json +568 -0
- package/examples/clinic-booking/brief-v1.json +332 -0
- package/examples/clinic-booking/brief.json +405 -0
- package/examples/clinic-booking/build-rsform.ts +174 -0
- package/examples/clinic-booking/requirements-v1.md +9 -0
- package/examples/clinic-booking/requirements-v2.md +4 -0
- package/examples/clinic-booking/rsform-session-v1.json +615 -0
- package/examples/clinic-booking/rsform-session.json +700 -0
- package/examples/diagnostics-utils.ts +26 -0
- package/examples/kinship/brief.json +337 -0
- package/examples/kinship/build-rsform.ts +7 -4
- package/examples/kinship/rsform-session.json +20 -63
- package/examples/kinship/rsmodel-session.json +14 -14
- package/examples/kinship-subordination/NOTES.md +49 -0
- package/examples/kinship-subordination/brief.json +161 -0
- package/examples/kinship-subordination/build-rsform.ts +100 -0
- package/examples/kinship-subordination/rsform-session.json +795 -0
- package/examples/library-loans/NOTES.md +46 -0
- package/examples/library-loans/anti/collapsed.json +481 -0
- package/examples/library-loans/anti/species-as-genus.json +334 -0
- package/examples/library-loans/anti/uncovered.json +406 -0
- package/examples/library-loans/anti/weakened.json +464 -0
- package/examples/library-loans/brief-v1.json +340 -0
- package/examples/library-loans/brief.json +502 -0
- package/examples/library-loans/build-rsform.ts +239 -0
- package/examples/library-loans/requirements-v1.md +11 -0
- package/examples/library-loans/requirements-v2.md +5 -0
- package/examples/library-loans/rsform-session-v1.json +481 -0
- package/examples/library-loans/rsform-session.json +652 -0
- package/examples/library-loans/source-markup.md +18 -0
- package/examples/movd/brief.json +220 -0
- package/examples/movd/build-rsform.ts +5 -2
- package/examples/movd/rsform-session.json +14 -46
- package/examples/subordination/NOTES.md +59 -0
- package/examples/subordination/anti/collapsed.json +556 -0
- package/examples/subordination/anti/single-relation.json +125 -0
- package/examples/subordination/anti/transitive.json +573 -0
- package/examples/subordination/anti/weakened.json +539 -0
- package/examples/subordination/brief.json +386 -0
- package/examples/subordination/build-rsform.ts +63 -0
- package/examples/subordination/constants.ts +115 -0
- package/examples/subordination/rsform-session.json +556 -0
- package/examples/subordination/source-markup.md +19 -0
- package/examples/subordination/source.md +40 -0
- package/package.json +18 -10
- package/skills/INSTALL.md +28 -29
- package/skills/README.md +25 -10
- package/skills/rs-core/SKILL.md +56 -0
- package/skills/rs-explain/SKILL.md +28 -0
- package/skills/rs-explicate/SKILL.md +71 -0
- package/skills/rs-interpret/SKILL.md +67 -0
- package/skills/rs-portal/SKILL.md +51 -0
- package/skills/rs-review/SKILL.md +79 -0
- package/skills/rs-scope/SKILL.md +67 -0
- package/skills/rs-synthesis/SKILL.md +52 -0
- package/skills/rstool/SKILL.md +70 -0
- package/skills/rstool-helper/GUIDE.md +18 -299
- package/skills/rstool-helper/SKILL.md +8 -58
- package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +16 -12
- package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +7 -5
- package/skills/rstool-runtime/SKILL.md +96 -0
- package/skills/scripts/brief-check.test.ts +165 -0
- package/skills/scripts/brief-check.ts +826 -0
- package/skills/scripts/check-brief.ts +94 -0
- package/skills/scripts/rstool-skills.mjs +119 -0
- package/skills/scripts/skill-stubs.test.ts +48 -0
package/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Agent-facing library for **incremental RSForm construction**, **RSLang expression analysis**, **diagnostics**, **modeling**, and **evaluation**. It wraps [`@rsconcept/domain`](https://www.npmjs.com/package/@rsconcept/domain) with a deterministic session contract and a stdio JSON wrapper for LLM agents. MCP hosts can use it through [`@rsconcept/rstool-mcp`](https://www.npmjs.com/package/@rsconcept/rstool-mcp).
|
|
4
4
|
|
|
5
|
-
**Contract version:** `3.3.0` — see [skills/rstool-
|
|
5
|
+
**Contract version:** `3.3.0` — see [skills/rstool-runtime/REFERENCE.md](./skills/rstool-runtime/REFERENCE.md) for the full v3 API.
|
|
6
6
|
|
|
7
7
|
## Agent skill
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Agents build conceptual schemas that answer the user's request, not just pass the analyzer. The router skill `skills/rstool/` picks the scenario and names the stage skills (`skills/rs-scope`, `rs-core`, `rs-explicate`, `rs-interpret`, `rs-review`, `rs-synthesis`, `rs-explain`, `rs-portal`, `rstool-runtime`). The method is in `docs/METHOD.md`; a schema brief (`docs/BRIEF.md`) holds the expressiveness requirements, decisions and labelled scenarios, checked by `skills/scripts/check-brief.ts`. Only a **stub** of the router is installed into the project; see [Installing the agent skill](#installing-the-agent-skill) below.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
@@ -26,7 +26,7 @@ The agent should read and follow:
|
|
|
26
26
|
|
|
27
27
|
`node_modules/@rsconcept/rstool/skills/INSTALL.md`
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
The procedure is agent-neutral: the agent adds a routing line to the project `AGENTS.md` (or the instructions file its host loads) and, if its host loads a project skills folder, a stub `rstool/SKILL.md` there (name, description and a path into `node_modules`; `npx rstool-skills install --dir <skills-dir>`). The skills and `docs/*.md` stay in the package and are read from `node_modules` when needed, so nothing is re-copied after an update.
|
|
30
30
|
|
|
31
31
|
Details: `skills/README.md`.
|
|
32
32
|
|
|
@@ -5,7 +5,7 @@ import "../models/index.js";
|
|
|
5
5
|
import { CstType } from "@rsconcept/domain/library/rsform";
|
|
6
6
|
import { RSEngine } from "@rsconcept/domain/library/rsengine";
|
|
7
7
|
//#region src/mappers/model-adapter.d.ts
|
|
8
|
-
declare class ModelAdapter {
|
|
8
|
+
export declare class ModelAdapter {
|
|
9
9
|
setConstituentaValue(session: SessionState, input: SetConstituentaValueInput): Promise<SessionModelState>;
|
|
10
10
|
setConstituentaValues(session: SessionState, input: {
|
|
11
11
|
items: SetConstituentaValueInput[];
|
|
@@ -23,5 +23,4 @@ declare class ModelAdapter {
|
|
|
23
23
|
private validateSetInput;
|
|
24
24
|
}
|
|
25
25
|
//#endregion
|
|
26
|
-
export { ModelAdapter };
|
|
27
26
|
//# sourceMappingURL=model-adapter.d.ts.map
|
|
@@ -6,7 +6,7 @@ import "../models/index.js";
|
|
|
6
6
|
import { RSForm } from "@rsconcept/domain/library/rsform";
|
|
7
7
|
import { RSLangAnalyzer } from "@rsconcept/domain/rslang";
|
|
8
8
|
//#region src/mappers/schema-adapter.d.ts
|
|
9
|
-
declare class SchemaAdapter {
|
|
9
|
+
export declare class SchemaAdapter {
|
|
10
10
|
analyzeAgainstSession(session: SessionState, draft: ConstituentaDraft): {
|
|
11
11
|
result: AnalysisResult;
|
|
12
12
|
diagnostics: Diagnostic[];
|
|
@@ -20,5 +20,4 @@ declare class SchemaAdapter {
|
|
|
20
20
|
private toAnalysisSchema;
|
|
21
21
|
}
|
|
22
22
|
//#endregion
|
|
23
|
-
export { SchemaAdapter };
|
|
24
23
|
//# sourceMappingURL=schema-adapter.d.ts.map
|
package/dist/mappers/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import "../models/index.js";
|
|
|
4
4
|
import { RSErrorDescription, ValueClass } from "@rsconcept/domain/rslang";
|
|
5
5
|
//#region src/mappers/types.d.ts
|
|
6
6
|
/** Minimal domain error shape before mapping to {@link Diagnostic}. */
|
|
7
|
-
interface DomainErrorLike {
|
|
7
|
+
export interface DomainErrorLike {
|
|
8
8
|
code: number;
|
|
9
9
|
from: number;
|
|
10
10
|
to: number;
|
|
@@ -12,16 +12,15 @@ interface DomainErrorLike {
|
|
|
12
12
|
stack?: RSErrorDescription['stack'];
|
|
13
13
|
}
|
|
14
14
|
/** Minimal domain analysis shape before mapping to {@link AnalysisResult}. */
|
|
15
|
-
interface DomainAnalysisLike {
|
|
15
|
+
export interface DomainAnalysisLike {
|
|
16
16
|
success: boolean;
|
|
17
17
|
type: Record<string, unknown> | null;
|
|
18
18
|
valueClass: ValueClass | null;
|
|
19
19
|
errors: DomainErrorLike[];
|
|
20
20
|
}
|
|
21
21
|
/** Map a domain parser/semantic error to the public diagnostic shape. */
|
|
22
|
-
declare function toDiagnostic(error: DomainErrorLike, expression: string, target?: DiagnosticTarget): Diagnostic;
|
|
22
|
+
export declare function toDiagnostic(error: DomainErrorLike, expression: string, target?: DiagnosticTarget): Diagnostic;
|
|
23
23
|
/** Map a domain analysis result to the public {@link AnalysisResult} shape. */
|
|
24
|
-
declare function toPublicAnalysis(analysis: DomainAnalysisLike, expression: string, target?: DiagnosticTarget): AnalysisResult;
|
|
24
|
+
export declare function toPublicAnalysis(analysis: DomainAnalysisLike, expression: string, target?: DiagnosticTarget): AnalysisResult;
|
|
25
25
|
//#endregion
|
|
26
|
-
export { DomainAnalysisLike, DomainErrorLike, toDiagnostic, toPublicAnalysis };
|
|
27
26
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { RSToolAgent };
|
|
1
|
+
export { t as RSToolAgent } from "../models-D06g8LId.js";
|
|
@@ -2,14 +2,14 @@ import { a as Diagnostic, r as ListDiagnosticsFilters } from "../diagnostic-CtxX
|
|
|
2
2
|
import { n as SessionRevision, r as SessionState, t as SessionHandle } from "../session-OaLqLq0H.js";
|
|
3
3
|
import "../models/index.js";
|
|
4
4
|
//#region src/session/session-store.d.ts
|
|
5
|
-
interface SessionStoreOptions {
|
|
5
|
+
export interface SessionStoreOptions {
|
|
6
6
|
persistenceDir?: string;
|
|
7
7
|
}
|
|
8
8
|
interface SessionEnvelope {
|
|
9
9
|
state: SessionState;
|
|
10
10
|
diagnostics: Diagnostic[];
|
|
11
11
|
}
|
|
12
|
-
declare class SessionStore {
|
|
12
|
+
export declare class SessionStore {
|
|
13
13
|
private sessions;
|
|
14
14
|
private readonly persistence;
|
|
15
15
|
constructor(options?: SessionStoreOptions);
|
|
@@ -30,5 +30,5 @@ declare class SessionStore {
|
|
|
30
30
|
private persist;
|
|
31
31
|
}
|
|
32
32
|
//#endregion
|
|
33
|
-
export {
|
|
33
|
+
export {};
|
|
34
34
|
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { SessionStore };
|
|
1
|
+
export { n as SessionStore } from "../models-D06g8LId.js";
|
package/dist/wrapper/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/wrapper/client.d.ts
|
|
2
2
|
/** One JSON line emitted by the stdio wrapper (request response or ready event). */
|
|
3
|
-
interface WrapperResponse<T = unknown> {
|
|
3
|
+
export interface WrapperResponse<T = unknown> {
|
|
4
4
|
id: string | number | null;
|
|
5
5
|
ok: boolean;
|
|
6
6
|
result?: T;
|
|
@@ -11,7 +11,7 @@ interface WrapperResponse<T = unknown> {
|
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
/** Options for spawning the `rstool-wrapper` child process. */
|
|
14
|
-
interface RSToolWrapperClientOptions {
|
|
14
|
+
export interface RSToolWrapperClientOptions {
|
|
15
15
|
/** Executable to spawn. Default: `npm`. Passed as argv, not a shell string. */
|
|
16
16
|
command?: string;
|
|
17
17
|
/** Arguments passed to `command`. Default: `['run', 'wrapper']`. */
|
|
@@ -24,7 +24,7 @@ interface RSToolWrapperClientOptions {
|
|
|
24
24
|
*
|
|
25
25
|
* Sends one JSON request per line on stdin and reads one JSON response per line from stdout.
|
|
26
26
|
*/
|
|
27
|
-
declare class RSToolWrapperClient {
|
|
27
|
+
export declare class RSToolWrapperClient {
|
|
28
28
|
private process;
|
|
29
29
|
private input;
|
|
30
30
|
private pending;
|
|
@@ -58,5 +58,4 @@ declare class RSToolWrapperClient {
|
|
|
58
58
|
private handleLine;
|
|
59
59
|
}
|
|
60
60
|
//#endregion
|
|
61
|
-
export { RSToolWrapperClient, RSToolWrapperClientOptions, WrapperResponse };
|
|
62
61
|
//# sourceMappingURL=client.d.ts.map
|
package/docs/BRIEF.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Бриф схемы
|
|
2
|
+
|
|
3
|
+
Бриф — постановка задачи концептуализации, журнал решений и исполнимые сценарии в одном JSON. Метод, который за ним стоит, — [METHOD.md](METHOD.md). JSON-схема — [brief.schema.json](brief.schema.json).
|
|
4
|
+
|
|
5
|
+
Пока бриф хранится файлом `brief.json` в папке задачи, рядом с сессией (не в пакете rstool). Проверка схемы по брифу — скрипт `skills/scripts/check-brief.ts` (см. «Проверка»). В rstool 4.0 бриф переедет в сессию, а на Portal — в блок «Задание» паспорта схемы.
|
|
6
|
+
|
|
7
|
+
## Поля
|
|
8
|
+
|
|
9
|
+
| Поле | Этап | Что записать |
|
|
10
|
+
| :--------------- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
11
|
+
| `status` | 1 | `draft` — составляется; `confirmed` — пользователь подтвердил; `assumed` — спросить нельзя, ответы в `assumptions` |
|
|
12
|
+
| `approach` | 1 | `research` — экспликация; `education` — обучение; `project` — основа для ПО / ОСС |
|
|
13
|
+
| `object`, `task` | 1 | объект исследования; задача и точка зрения — по одной-две фразы |
|
|
14
|
+
| `source` | 1 | документ и разделы, ссылка на схему Portal |
|
|
15
|
+
| `restrictions` | 1 | что исключено (`excludes`) и что из-за этого невыразимо (`inexpressible`) |
|
|
16
|
+
| `expressiveness` | 1–3 | требования к выразительным средствам: `concept`, `ref` в источнике; `via` (этап 2) — как выразится через ядро; `constituent` (этап 3) — имя конституенты или `null` |
|
|
17
|
+
| `distinctions` | 1, 4 | пары `between` (id требований `E#` или имена конституент) и `witness` — сценарий, где они различаются |
|
|
18
|
+
| `invariants` | 1, 3–4 | правило `text`, аксиома `constituent`, сценарии `positive` и `negative` |
|
|
19
|
+
| `decisions` | 2–3 | журнал: `topic`, `alternatives`, `choice`, `rationale`; `supersedes` — какое решение отменено |
|
|
20
|
+
| `scenarios` | 1–4 | маленькие интерпретации с ожиданиями (ниже) |
|
|
21
|
+
| `questions` | 1–2 | вопросы раундов 1–2: `text`, `proposed`, `consequence`, `answer` |
|
|
22
|
+
| `assumptions` | 1–2 | то, что не спросили или не смогли спросить |
|
|
23
|
+
| `openQuestions` | любой | что осталось нерешённым, в том числе то, что ЯРЭ не выражает |
|
|
24
|
+
|
|
25
|
+
Идентификаторы: `L#` ограничения, `E#` требования, `V#` различения, `I#` инварианты, `DC#` решения, `SC#` сценарии. Идентификатор не переиспользуется после удаления.
|
|
26
|
+
|
|
27
|
+
Ссылки на конституенты — по имени (`D3`). При перенумерации (`restoreOrder`, синтез) обнови ссылки. Брифы аргументов синтеза в результат не переносятся: у синтезированной схемы свой бриф по итоговым именам (`skills/rs-synthesis`). Конвенции и текстовые определения не ссылаются на `DC#`: бриф не уходит вместе со схемой.
|
|
28
|
+
|
|
29
|
+
## Сценарии
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"id": "SC2",
|
|
34
|
+
"title": "Двойная выдача e1",
|
|
35
|
+
"base": "SC1",
|
|
36
|
+
"values": {
|
|
37
|
+
"S1": [
|
|
38
|
+
["ann", "e1", 3],
|
|
39
|
+
["bob", "e1", 4]
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"expect": [
|
|
43
|
+
{ "of": "A1", "holds": false },
|
|
44
|
+
{ "of": "D2", "contains": ["e2"], "excludes": ["e1"] },
|
|
45
|
+
{ "of": "F1", "args": ["ann"], "value": ["e1"] },
|
|
46
|
+
{ "expr": "card(D1)", "value": 1 }
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- `values` — значения неопределяемых понятий **подписями**: `X#` / `C#` — массив подписей элементов; `S#` — по типизации: множество — массив, кортеж — массив компонент, элементы `Z` — числа. Индексы и `TUPLE_ID` не нужны.
|
|
52
|
+
- Понятия, не перечисленные в `values`, пусты. `base` наследует значения другого сценария; перечисленные здесь заменяют унаследованные целиком.
|
|
53
|
+
- `expect` — ожидания:
|
|
54
|
+
- `of` — конституента: `D#` (значение), `A#` / `T#` (`holds`), `F#` / `P#` с `args` (аргументы подписями);
|
|
55
|
+
- `expr` — выражение ЯРЭ над схемой (`card(D1)`, `D2⊆D1` с `holds`);
|
|
56
|
+
- `value` — точное значение; `contains` / `excludes` — элементы, которые должны входить / не входить; `holds` — истинность.
|
|
57
|
+
- Порядок элементов в множествах не важен.
|
|
58
|
+
|
|
59
|
+
## Проверка
|
|
60
|
+
|
|
61
|
+
Из корня пакета rstool (в workspace Portal — `rsconcept/rstool`, в npm-проекте — `node_modules/@rsconcept/rstool`):
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npx tsx skills/scripts/check-brief.ts --session <abs>/session.json --brief <abs>/brief.json [--base <abs>/v1-session.json] [--json]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
В workspace Portal: `pnpm --filter @rsconcept/rstool exec tsx skills/scripts/check-brief.ts …`. Сессия — файл `exportSession`. Сценарии выполняются на копии сессии; сама сессия не меняется.
|
|
68
|
+
|
|
69
|
+
`--review` — режим ревью чужой схемы: блокеры — находки отчёта, следующий шаг — `rs-review`, а не правка.
|
|
70
|
+
|
|
71
|
+
Скрипт печатает этап, покрытие, матрицу приёмки «сценарий × ожидание → факт», блокеры, предупреждения и следующий шаг. Код выхода `0` — блокеров нет, `1` — есть.
|
|
72
|
+
|
|
73
|
+
| Проверка | Блокер когда |
|
|
74
|
+
| :-------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- |
|
|
75
|
+
| статус брифа | `draft` |
|
|
76
|
+
| требование без `via` | всегда (этап 2 не пройден) |
|
|
77
|
+
| требование без конституенты | всегда; причина — не хватает исходного понятия, понятие не выведено или нужен синтез |
|
|
78
|
+
| инвариант без аксиомы | всегда |
|
|
79
|
+
| инвариант без позитива / негатива | `project`; иначе предупреждение |
|
|
80
|
+
| сценарий не прошёл | всегда |
|
|
81
|
+
| различение не подтверждено сценарием | `research`; иначе предупреждение |
|
|
82
|
+
| пустая конвенция `X#` / `C#` / `S#` | всегда |
|
|
83
|
+
| диагностики с `severity: error` | всегда |
|
|
84
|
+
| «сироты» — вне путей к требованиям и аксиомам | `project`; иначе предупреждение |
|
|
85
|
+
| с `--base`: аксиома или конституента брифа удалена, производное стало неопределяемым, формула стала тривиальной | если имени нет в журнале решений |
|
|
86
|
+
| требование выражено `S#` без решения | предупреждение |
|
|
87
|
+
| описание схемы пусто; конвенции или текстовые определения ссылаются на `DC#` | предупреждение: бриф не уходит ни в Portal, ни в результат синтеза — решения пишутся словами |
|
|
88
|
+
|
|
89
|
+
Чистый вывод не доказывает смысл схемы: он показывает только то, что записано в брифе. Полнота брифа — ответственность этапов 1–2.
|
|
90
|
+
|
|
91
|
+
## Лёгкий бриф
|
|
92
|
+
|
|
93
|
+
Для точечной правки (одна формула, одно понятие) достаточно: `status`, `approach`, `object`, `task`, одно требование с `via` и `constituent` и один сценарий. Объяснение формулы и вопросы по синтаксису обходятся без брифа.
|
|
@@ -73,7 +73,21 @@ card(S1) = card(Pr1,2(S1))
|
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Это заменяет длинные `∀d1,d2∈S1 ...`.
|
|
76
|
-
Оставляй `∀` / `∃`, только если выражение нельзя задать через множества, проекции, фильтры, `card`.
|
|
76
|
+
Оставляй `∀` / `∃`, только если выражение нельзя задать через множества, проекции, фильтры, сравнение с `∅` или `card`.
|
|
77
|
+
|
|
78
|
+
## Пустота и мощность
|
|
79
|
+
|
|
80
|
+
(Не)пустота множества — сравнение с пустым множеством, не арифметика мощности.
|
|
81
|
+
|
|
82
|
+
| Нужно | Пиши | Не пиши |
|
|
83
|
+
| :----------------------- | :---------------------- | :------------------------------ |
|
|
84
|
+
| непусто | `S ≠ ∅` | `card(S) > 0`, `card(S) ≥ 1` |
|
|
85
|
+
| пусто | `S = ∅` | `card(S) = 0` |
|
|
86
|
+
| пересечение непусто | `A ∩ B ≠ ∅` | `card(A ∩ B) > 0` |
|
|
87
|
+
| ровно один элемент | `card(S) = 1` | — |
|
|
88
|
+
| сравнение численностей | `card(S1) = card(S2)` | — |
|
|
89
|
+
|
|
90
|
+
`∅` в `=` / `≠` подстраивается под ступень сравниваемого множества. Не используй `∅` как нейтральный элемент операций (`X1 ∪ ∅` → `invalidEmptySetUsage`).
|
|
77
91
|
|
|
78
92
|
## Производные понятия
|
|
79
93
|
|
|
@@ -82,6 +96,7 @@ card(S1) = card(Pr1,2(S1))
|
|
|
82
96
|
- `Prk(…)` / `Pri,j(…)`;
|
|
83
97
|
- `Fi*k[{…}](…)`;
|
|
84
98
|
- `D{ξ∈… | F[ξ] = …}`;
|
|
99
|
+
- `S ≠ ∅` / `A ∩ B ≠ ∅`;
|
|
85
100
|
- `card(F[ξ]) = 1`.
|
|
86
101
|
|
|
87
102
|
Перед `D{x∈… | ∃d1∈… ∃d2∈…}` проверь, нельзя ли взять `Pr` от уже введенного отношения.
|
package/docs/CONSTRUCTIONS.md
CHANGED
|
@@ -355,13 +355,25 @@ Pr2(Fi1[{ξ}](S1))
|
|
|
355
355
|
|
|
356
356
|
**Антипаттерн.** `red` по множеству, элементы которого не множества (`invalidReduce`).
|
|
357
357
|
|
|
358
|
+
### Пустое множество (`∅`)
|
|
359
|
+
|
|
360
|
+
**Запись.** `∅`. Сравнение: `S = ∅`, `S ≠ ∅`.
|
|
361
|
+
|
|
362
|
+
**Что считается.** Пустое множество. В равенстве и неравенстве типизация `ℬ(R0)` подстраивается под сравниваемое множество.
|
|
363
|
+
|
|
364
|
+
**Как сказать.** «S пусто» / «S непусто».
|
|
365
|
+
|
|
366
|
+
**Пример.** `F1[a] ∩ F1[b] ≠ ∅` — пересечение непусто.
|
|
367
|
+
|
|
368
|
+
**Антипаттерн.** `card(S) > 0` или `card(S) = 0` вместо сравнения с `∅`. `X1 ∪ ∅` — бессмысленная операция (`invalidEmptySetUsage`).
|
|
369
|
+
|
|
358
370
|
### Мощность (`card`)
|
|
359
371
|
|
|
360
372
|
**Как сказать.** «сколько элементов в конечном множестве S» (мощность `card(S)`). Результат — целое (`Z`).
|
|
361
373
|
|
|
362
|
-
**Пример.** `card(X1) > 5` — логическое сравнение мощности.
|
|
374
|
+
**Пример.** `card(X1) > 5` — логическое сравнение мощности. `card(S) = 1` — ровно один элемент.
|
|
363
375
|
|
|
364
|
-
**Не сосед.** `card` не заменяет [квантор](#кванторы) «для всех». Арифметика `+` `-` `*` и порядок `<` только на `Z` или `C#`, не на элементах `X#` ([BASE-SELECTION.md](BASE-SELECTION.md)).
|
|
376
|
+
**Не сосед.** (Не)пустота — карточка «Пустое множество» выше. `card` не заменяет [квантор](#кванторы) «для всех». Арифметика `+` `-` `*` и порядок `<` только на `Z` или `C#`, не на элементах `X#` ([BASE-SELECTION.md](BASE-SELECTION.md)).
|
|
365
377
|
|
|
366
378
|
## Ссылка на справку Portal
|
|
367
379
|
|
package/docs/DIAGNOSTICS.md
CHANGED
|
@@ -178,6 +178,7 @@ runtime-ошибки в теле `F#`/`P#`) диагностика несёт `s
|
|
|
178
178
|
| `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
|
|
179
179
|
| `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
|
|
180
180
|
| `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
|
|
181
|
+
| `0x880C` | `globalDeleted` | `[name]` | Ссылка на удаленную конституенту: при удалении в формулах зависимых конституент обозначение заменяется на `DEL`. Подставь действующее обозначение или перепиши формулу. Синтаксические ошибки в такой формуле не сообщаются. |
|
|
181
182
|
| `0x8830` | `projectionSetArgumentNotSet` | `[operator, actual]` | `Pr*` применяется к множеству; аргумент не типизирован как `ℬ(H)`. |
|
|
182
183
|
| `0x8831` | `projectionSetArgumentNotTupleSet` | `[operator, actual]` | `Pr*` требует множество кортежей `ℬ(H1×…×Hn)`; аргумент — множество не-кортежей, напр. `ℬ(X1)`. |
|
|
183
184
|
| `0x8832` | `projectionSetIndexOutOfRange` | `[operator, index, arity, actual]` | Индекс проекции `index` превышает размерность `arity` кортежа аргумента `actual`. |
|
|
@@ -186,7 +187,7 @@ runtime-ошибки в теле `F#`/`P#`) диагностика несёт `s
|
|
|
186
187
|
| `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` ≠ `b`). |
|
|
187
188
|
| `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа ≠ размерности `×` (напр. `∀(a,b)∈X1`). |
|
|
188
189
|
| `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` — тип элемента, `c` — тип множества. |
|
|
189
|
-
| `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` (напр. `X1∪∅`).
|
|
190
|
+
| `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` как нейтрального элемента операций (напр. `X1∪∅`). Сравнение `S=∅` / `S≠∅` допустимо. |
|
|
190
191
|
| `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` ≠ `actual`). |
|
|
191
192
|
| `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
|
|
192
193
|
| `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
|
|
@@ -233,4 +234,4 @@ runtime-ошибки в теле `F#`/`P#`) диагностика несёт `s
|
|
|
233
234
|
|
|
234
235
|
## Цикл исправления
|
|
235
236
|
|
|
236
|
-
Пошаговый цикл — в `../skills/
|
|
237
|
+
Пошаговый цикл — в `../skills/rs-explicate/SKILL.md`, раздел «Цикл диагностик». Здесь — справочник кодов.
|
package/docs/DOMAIN.md
CHANGED
|
@@ -22,6 +22,18 @@
|
|
|
22
22
|
- **Интерпретация** — соотнесение понятий КС с сущностями предметной области. В концептуальной модели задаётся значениями неопределяемых конституент и вычислением производных.
|
|
23
23
|
- **Биективная переносимость** — независимость значения формального определения от биективной замены интерпретаций неопределяемых понятий. Для `X#` опирается на несравнимость элементов; анализатор ЯРЭ отсекает формулы, нарушающие переносимость.
|
|
24
24
|
|
|
25
|
+
## Термины метода
|
|
26
|
+
|
|
27
|
+
Процесс концептуализации — [METHOD.md](METHOD.md); бриф — [BRIEF.md](BRIEF.md).
|
|
28
|
+
|
|
29
|
+
- **Требования к выразительным средствам** — понятия, которые КС обязана выразить: то, ради чего её строят. В брифе — `expressiveness`.
|
|
30
|
+
- **Ограничения предметной области** — что сознательно исключено из рассмотрения (время, история, процедуры…) вместе с перечнем понятий, которые из-за этого **невыразимы**. В брифе — `restrictions`.
|
|
31
|
+
- **Различение** — пара понятий, которые схема должна развести, хотя в источнике они смешаны или легко склеиваются.
|
|
32
|
+
- **Журнал решений** — записанные решения о ядре: альтернативы, выбор, обоснование; отсутствие аксиомы — тоже решение. Изменить решение можно только новым решением (`supersedes`).
|
|
33
|
+
- **Сценарий** — маленькая интерпретация неопределяемых понятий подписями элементов с ожидаемыми значениями производных понятий и истинностью аксиом: пример или контрпример.
|
|
34
|
+
- **Микротеория** — небольшая КС одного аспекта (3–6 отношений, 2–4 уровня конкретизации); сложная предметная область собирается из микротеорий синтезом.
|
|
35
|
+
- **Ранг терма** — глубина терма в графе термов от ядра: термы первого ранга строятся непосредственно из неопределяемых понятий.
|
|
36
|
+
|
|
25
37
|
## Конституенты
|
|
26
38
|
|
|
27
39
|
**Конституента** — часть КС. Поля и правила валидации см. в [CONSTITUENTA.md](CONSTITUENTA.md); здесь только предметные роли.
|
package/docs/METHOD.md
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# Метод концептуализации
|
|
2
|
+
|
|
3
|
+
Как строить КС, которая отвечает запросу пользователя, а не только проходит анализатор. Структура метода взята из учебника З. А. Кучкарова (далее Т1, Т2 — тома 1 и 2), определения и обозначения — из Portal ([DOMAIN.md](DOMAIN.md), корневой `CONTEXT.md`). Книга агенту не справочник: её буквы и устаревшие формулировки сюда уже переведены.
|
|
4
|
+
|
|
5
|
+
Цитаты приводятся по изданию: З. А. Кучкаров. Методы концептуального анализа и синтеза в теоретическом исследовании и проектировании социально-экономических систем. Т. 1–2. 3-е изд. М.: Концепт, 2008. Права на текст принадлежат организации-издателю.
|
|
6
|
+
|
|
7
|
+
## Основная мысль
|
|
8
|
+
|
|
9
|
+
КС ценна не числом конституент и не отсутствием диагностик, а тем, что **выражает нужные понятия и различения**. Поэтому работа начинается с задачи и требований к схеме, а не со словаря источника, и каждое решение о ядре записывается.
|
|
10
|
+
|
|
11
|
+
Готово = выполнены требования к выразительным средствам, различения разведены, инварианты выражены аксиомами, это подтверждено сценариями на КМ, и диагностики чисты. Чистые диагностики — необходимое, но не достаточное условие.
|
|
12
|
+
|
|
13
|
+
## Таблица соответствия: книга → Portal
|
|
14
|
+
|
|
15
|
+
| В книге | На Portal |
|
|
16
|
+
| :------------------------------------------------------------- | :--------------------------------------------------------------- |
|
|
17
|
+
| `D` — родовая структура | `S#` — родовая структура |
|
|
18
|
+
| `T` — терм | `D#` — терм; `F#` / `P#` — терм- и предикат-функции |
|
|
19
|
+
| `A` — аксиома | `A#` — аксиома |
|
|
20
|
+
| «теорема» | `T#` — высказывание (типа «теорема» на Portal нет) |
|
|
21
|
+
| основные множества | базисные множества `X#`; константные `C#`; ступень `Z` |
|
|
22
|
+
| ступени, шкала множеств (Бурбаки) | типизация ЯРЭ ([TYPIFICATION.md](TYPIFICATION.md)) |
|
|
23
|
+
| атрибутивная → теоретико-множественная → родоструктурная формы | одна запись на ЯРЭ; атрибутивная проверка — строка `via` в брифе |
|
|
24
|
+
| документация на теорию | бриф и журнал решений ([BRIEF.md](BRIEF.md)) |
|
|
25
|
+
| интерпретация в конце цикла | сценарии на КМ с начала работы («сначала тест») |
|
|
26
|
+
|
|
27
|
+
Не переноси буквы книги в схему: книжный `D1` — это наш `S1`, книжный `T1` — наш `D1`.
|
|
28
|
+
|
|
29
|
+
Журнал решений — прямое продолжение требования книги:
|
|
30
|
+
|
|
31
|
+
> «Решение каждый раз фиксируется, и если оно меняется, то это должно отражаться в документации на теорию. Если теория, как и компьютерная программа, документируется плохо, то “модулей” становится очень много, вследствие этого теория становится неудерживаемой и неконтролируемой» — Т1 §1.2.7.
|
|
32
|
+
|
|
33
|
+
## Подход: исследовательский и проектный
|
|
34
|
+
|
|
35
|
+
Назначение схемы задаёт строгость проверок (поле `approach` брифа).
|
|
36
|
+
|
|
37
|
+
| `approach` | Что считается ответом на запрос | Строгость |
|
|
38
|
+
| :---------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- |
|
|
39
|
+
| `research` | Термины источника получили точные определения; смешанное в тексте разведено; противоречия и пробелы источника названы | Различения обязательны. Элементы базисных множеств могут быть условными. «Сироты» — предупреждение |
|
|
40
|
+
| `education` | Схема минимальна, каждое определение объяснимо, решения по ядру видны | Сценарий на каждое требование |
|
|
41
|
+
| `project` | Покрыты сущности, роли, состояния и бизнес-правила; ядро пригодно для синтеза | Позитивный и негативный сценарий у каждого инварианта; конвенции обязательны; «сироты» — ошибка |
|
|
42
|
+
|
|
43
|
+
При проектном подходе (ПО, ОСС) каждый элемент базисного множества должен быть дан фактически: в сценариях — реальные объекты. При исследовательском интерпретируются производные понятия; элементы базисных множеств могут быть условными.
|
|
44
|
+
|
|
45
|
+
> «При проектном подходе мы должны реализовать то, что положили в схеме, каждый элемент схемы должен материализоваться… множество исходных понятий должно быть дано фактически. При исследовательском подходе… схемы получают интерпретацию только в части своих производных понятий» — Т1 §1.5.2.4.
|
|
46
|
+
|
|
47
|
+
## Роли: методник и предметник
|
|
48
|
+
|
|
49
|
+
Агент — **методник**: знает метод и язык, предлагает варианты. Пользователь — **предметник**: знает предметную область и решает спорное. Показанная предметнику гипотеза ядра порождает у него вопросы, которые он сам бы не задал («схемное увеличение»). Отсюда два раунда вопросов: до формализации и после гипотезы ядра.
|
|
50
|
+
|
|
51
|
+
> «Нередко предметник-профессионал с удивлением обнаруживает, что на вопросы, возникшие из логики синтеза, они не знают ответа, что такие вопросы ранее у них не возникали… всегда возникает некое “схемное увеличение”, позволяющее рассмотреть подробнее детали» — Т1 §1.6.2.1.
|
|
52
|
+
|
|
53
|
+
Правила вопросов:
|
|
54
|
+
|
|
55
|
+
- раунд 1 — не больше 5 вопросов, раунд 2 — не больше 4;
|
|
56
|
+
- у каждого вопроса — предложенный ответ и следствие для выразимости, чтобы пользователь мог просто подтвердить;
|
|
57
|
+
- пользователь подтверждает бриф целиком; новый вопрос — только при появлении нового различения или требования;
|
|
58
|
+
- если спросить нельзя (фоновый агент) — ответы записываются в `assumptions`, статус брифа `assumed`.
|
|
59
|
+
|
|
60
|
+
## Этапы
|
|
61
|
+
|
|
62
|
+
Маршрут по умолчанию, а не ритуал. Последовательность не алгоритмична: возврат к любому этапу разрешён, и инструмент проверки брифа подсказывает, куда вернуться. Для точечной правки этапы 1–2 сводятся к одной строке брифа.
|
|
63
|
+
|
|
64
|
+
> «…определенной алгоритмической последовательности их применения в настоящее время нет… не надо воспринимать методные возможности как догму» — Т1 §1.2.1.1.
|
|
65
|
+
|
|
66
|
+
### Этап 1. Постановка
|
|
67
|
+
|
|
68
|
+
**Выделение предметной области** — через задачу и точку зрения. Объект исследования (`object`) и задача (`task`) пишутся одной-двумя фразами. Предметная область задаётся в основном **отрицательно**: что исключено (время, история, процедуры, психология, оплата…). У каждого ограничения — перечень понятий, которые из-за него станут **невыразимыми** (`restrictions[].inexpressible`). Пользователь видит цену ограничения до формализации.
|
|
69
|
+
|
|
70
|
+
> «Определение может носить отрицательный характер, т.е. не прямо определять предмет концептуализации, а исключать то, что концептуализации подлежать не будет, “высекая”, таким образом, предметную область из неограниченного содержания» — Т1 §1.2.2.
|
|
71
|
+
>
|
|
72
|
+
> «…не будут различаться “бывшие”, “настоящие” и “будущие” отношения “начальник – подчиненный”. Таким образом, понятие “мой подчиненный, который является моим бывшим начальником” – невыразимо в этой теории» — Т2 §4.2.1.2.
|
|
73
|
+
|
|
74
|
+
**Расчистка источника** — две сетки разметки текста:
|
|
75
|
+
|
|
76
|
+
1. по статусу утверждения: определение; правило (ограничение); пример; термин без определения; оценочное или нерелевантное;
|
|
77
|
+
2. по смысловым блокам: о чём фрагмент (сущность, роль, отношение, состояние, правило).
|
|
78
|
+
|
|
79
|
+
Нерелевантное и оценочное («интерфейс должен быть удобным») в схему не идёт; исключённое по задаче — в `restrictions`. Расчистка — главное средство против пересказа источника.
|
|
80
|
+
|
|
81
|
+
> «…необходимы разметка содержания по статусам и группировка частей по понятийным блокам. Для этого строятся две сетки: первая – по статусу, вторая – по основным содержательным блокам» — Т1 §1.2.3.
|
|
82
|
+
|
|
83
|
+
**Требования к выразительным средствам** (`expressiveness`) — понятия, которые схема обязана выразить. Это то, ради чего схему просили. Каждое требование проверяемо: для него можно написать пример или контрпример. Ориентир из инженерии онтологий — competency questions.
|
|
84
|
+
|
|
85
|
+
> «Исследователь должен знать, каковы будут выразительные возможности теории, с помощью которой он намерен решить выдвинутую им задачу» — Т1 §1.2.4.
|
|
86
|
+
|
|
87
|
+
**Различения** (`distinctions`) — пары понятий, которые в запросе смешаны или легко смешиваются: «назначенный» и «написавший», «активная» и «просроченная выдача». Разнообразие различений — главная ценность схемы: она должна вскрыть различение там, где в запросе было одно неразличённое понятие.
|
|
88
|
+
|
|
89
|
+
> «Основной целью концептуализации является вскрытие разнообразия там, где имеет место единственное, не различенное» — Т1 §1.2.17.
|
|
90
|
+
|
|
91
|
+
**Инварианты** (`invariants`) — правила, которые схема должна выражать аксиомами.
|
|
92
|
+
|
|
93
|
+
**Классификация** в требованиях (статусы, категории): одно основание, полнота, непересекаемость. Она даёт пару аксиом разбиения (`S2∪S3=X1 & S2∩S3=∅`), а не коды в `C#`.
|
|
94
|
+
|
|
95
|
+
> «– на протяжении деления должно удерживаться одно основание; – результаты деления совокупности на классы должны полностью исчерпывать совокупность признаков; – классы… не должны иметь общих элементов… Аксиома 1. Каждый объект принадлежит какому-нибудь классу. Аксиома 2. Каждый объект попадает только в один класс» — Т1 §1.2.29.
|
|
96
|
+
|
|
97
|
+
Гейт: задача, ограничения и невыразимое записаны; каждое требование и инвариант проверяемы; раунд 1 вопросов пройден, остальное — в допущениях; бриф `confirmed` или `assumed`.
|
|
98
|
+
|
|
99
|
+
### Этап 2. Ядро
|
|
100
|
+
|
|
101
|
+
Ядро выбирается **под требования**, а не под словарь, и проверяется на них **до формул**.
|
|
102
|
+
|
|
103
|
+
**Исходные понятия как гипотеза.** Каждое кандидат-неопределяемое понятие проверяется: не являются ли два кандидата видами одного рода? Вопрос «может ли начальник быть подчинённым?» ведёт к более высокой абстракции «люди» с отношением подчинения вместо двух базисных множеств. Признак: интерпретации двух `X#` пересекаются, или требование связывает их элементы как одно и то же лицо.
|
|
104
|
+
|
|
105
|
+
> «Эту гипотезу нужно проверить следующим образом: могут ли начальники сами быть подчиненными по отношению к другим, и, наоборот, подчиненные сами быть начальниками? Известное содержание однозначно говорит, что могут… существует более высокая абстракция, чем начальник – подчиненный» — Т2 §4.2.1.4.
|
|
106
|
+
|
|
107
|
+
**Родовое, а не видовое.** Если положить вид вместо рода, теряются остальные виды. Пример: однозначная функция там, где нужно отношение; симметричное отношение там, где в тексте «считает». Два понятия с общей частью — признак того, что ни одно не родовое.
|
|
108
|
+
|
|
109
|
+
> «Наличие двух понятий, имеющих общую часть, указывает на то, что каждое из них не является родовым… если вместо родового отношения используется видовое, то исследователи теряют другие виды» — Т1 §1.2.18.
|
|
110
|
+
|
|
111
|
+
**Не удваивать сущности.** Выводимое не вводится как исходное: производное — `D#`/`F#`/`P#`, а не новое `S#`. Неопределяемые понятия равноуровневы: ни одно не выражается через другие.
|
|
112
|
+
|
|
113
|
+
> «Если мы вводим то, что выводимо, повторно, как исходное понятие, то это и будет удвоение сущности… надо гарантировать (или стремиться к тому), чтобы эти абстракции были одного уровня» — Т1 §1.2.12.
|
|
114
|
+
|
|
115
|
+
**Альтернативные гипотезы основного отношения.** Для основного отношения рассматриваются 2–3 варианта (единичное / множественное / оба; читатель × экземпляр или читатель × издание; кортеж или сущность с отношениями). Варианты сравниваются по выразительной силе: «избыточно» или «недостаточно» для требований. Выбор записывается в журнал решений.
|
|
116
|
+
|
|
117
|
+
> «Постулируя одно из двух или оба отношения, мы либо делаем теорию избыточной (выразительных средств гораздо больше, чем нужно), либо недостаточной» — Т2 §4.2.1.5.1.
|
|
118
|
+
|
|
119
|
+
**Свойства отношения как решения.** Для каждой родовой структуры проходится стандартный перечень:
|
|
120
|
+
|
|
121
|
+
| Свойство | Пример аксиомы |
|
|
122
|
+
| :---------------------------------- | :------------------------------------- |
|
|
123
|
+
| рефлексивность / антирефлексивность | `∀ξ∈X1 (ξ,ξ)∉S1` |
|
|
124
|
+
| симметричность / асимметричность | `∀(α,β)∈S1 (β,α)∉S1` |
|
|
125
|
+
| транзитивность; ацикличность | через замыкание `R{}`: `∀ξ∈X1 ξ∉F2[ξ]` |
|
|
126
|
+
| однозначность (функциональность) | `card(S1)=card(Pr1(S1))` |
|
|
127
|
+
| всюду определённость | `Pr1(S1)=X1` |
|
|
128
|
+
| несовместимость с другой структурой | `S1∩S2=∅` |
|
|
129
|
+
|
|
130
|
+
Свойства не переносятся по привычке: «Аксиомы логически вытекают из ограничения предметной области» (Т2 §4.2.1.5.3). В разборе подчинения книга не запрещает ни симметричность, ни циклы — подчинение многоаспектно, и главнокомандующий может быть подчинён генштабу, которым руководит. По каждому свойству — решение с обоснованием. **Отсутствие аксиомы — тоже решение** и записывается в журнал (`choice: "без аксиомы"`). Спорные свойства выносятся на раунд 2 вопросов.
|
|
131
|
+
|
|
132
|
+
> «…мы не вводим аксиому, требующую, чтобы отношение было определено на всем множестве людей. На этом примере подчеркнем, что отсутствие аксиом – тоже решение, т.к. это соответствует содержанию» — Т2 §4.2.1.5.3.
|
|
133
|
+
|
|
134
|
+
**Проверка выразительных возможностей ядра** — до экспликации. Для каждого требования одна строка: как оно выразится через ядро (поле `via`: «`Pr2` выдач», «дополнение к E1 в `X2`», «замыкание блокировок»). Не выражается — меняется гипотеза ядра, а не формула. Это дешёвый гейт против непокрытого запроса.
|
|
135
|
+
|
|
136
|
+
> «Составляется список понятий, которые мы хотим выразить, но уже в понятиях теории, введенных на предыдущих этапах… это отношение не дает понятия “коллективного руководства”. Следовательно, можно сделать вывод, что этот вариант отношений предметную область не отражает» — Т2 §4.2.1.7. Отсюда смена гипотезы: от единичного отношения к множественному.
|
|
137
|
+
|
|
138
|
+
**Ограниченное исследование.** Термы первого ранга от ядра (проекции, дополнения вида `X1\Pr1(S1)`, пересечения однотипных структур) полезно перечислить и показать пользователю как «разнообразие» — источник вопросов раунда 2. В схему целиком они не добавляются.
|
|
139
|
+
|
|
140
|
+
**Размер микротеории:** 3–6 отношений и 2–4 уровня конкретизации. Если требований больше, схема делится на микротеории, которые собираются синтезом (ОСС).
|
|
141
|
+
|
|
142
|
+
> «Получающиеся при этом концептуальные схемы содержат, как правило, до 3–6 отношений (“элементарных теорий”) и 2–4 уровня конкретизации. Такие схемы мы относим к классу “микротеорий”» — Т1, предисловие.
|
|
143
|
+
|
|
144
|
+
Гейт: каждое требование имеет `via`; решения по основному отношению и свойствам записаны; раунд 2 пройден; размер в пределах микротеории или есть план синтеза.
|
|
145
|
+
|
|
146
|
+
### Этап 3. Экспликация
|
|
147
|
+
|
|
148
|
+
Развёртывание **от требований**: выводятся только нужные понятия и их поставщики, через раскрытие структуры (`Pr`, `red`) и обособление (`F#`/`P#` для выражений со свободными переменными) — см. `CONTEXT.md`. Формально-дедуктивное развёртывание всех термов по рангам не нужно: число термов растёт комбинаторно.
|
|
149
|
+
|
|
150
|
+
Правила проектирования формул — [CONCEPTUAL-SCHEMA.md](CONCEPTUAL-SCHEMA.md); синтаксис — [SYNTAX.md](SYNTAX.md); диагностики — [DIAGNOSTICS.md](DIAGNOSTICS.md).
|
|
151
|
+
|
|
152
|
+
**Смысл важнее «зелёного».** Исправление диагностики не меняет смысл. Нельзя ради чистых диагностик:
|
|
153
|
+
|
|
154
|
+
- удалять или ослаблять аксиому, связанную с инвариантом брифа, без нового решения в журнале;
|
|
155
|
+
- превращать производное понятие (`D#`/`F#`/`P#`) в `S#`, `X#` или `C#`;
|
|
156
|
+
- заменять формулу тривиальной (`∅`, голая ссылка `D5 := X1`, тавтология);
|
|
157
|
+
- удалять конституенту, на которую ссылается бриф, или оставлять непустой `failed` после `best_effort`;
|
|
158
|
+
- оставлять пустую конвенцию у неопределяемого понятия.
|
|
159
|
+
|
|
160
|
+
Если смысл не удаётся выразить — вернись к ядру (другая гипотеза, промежуточные `D#`/`F#`) и запиши решение. Если ЯРЭ этого не выражает — запиши `openQuestions` и честно скажи «готово частично».
|
|
161
|
+
|
|
162
|
+
Гейт: диагностики чисты; ни одно требование не ослаблено; `failed` пуст.
|
|
163
|
+
|
|
164
|
+
### Этап 4. Интерпретация
|
|
165
|
+
|
|
166
|
+
Сценарии брифа (`scenarios`) — маленькие интерпретации с ожиданиями: примеры и контрпримеры. Пишутся **в бриф до формул** (этап 1–2) и прогоняются на КМ непрерывно. Значения задаются подписями элементов. Ориентир — приёмочные тесты.
|
|
167
|
+
|
|
168
|
+
- У каждого инварианта — позитивный (аксиома истинна) и негативный (ложна) сценарий.
|
|
169
|
+
- У каждого различения — сценарий-свидетель, на котором значения понятий различаются.
|
|
170
|
+
- При развитии схемы старые сценарии — регрессия.
|
|
171
|
+
|
|
172
|
+
**Гипотетико-дедуктивный цикл:** гипотеза → вывод → интерпретация → пересмотр гипотезы. Провалился сценарий — сначала спроси, верна ли гипотеза ядра, и только потом правь формулу. Подгонка формулы под сценарий без пересмотра смысла — то же «озеленение».
|
|
173
|
+
|
|
174
|
+
> «Затем производные понятия переносятся в предметную область, интерпретируются и на основе сравнения пересматриваются исходные предположения. Цикл “гипотеза-дедукция-интерпретация” замыкается» — Т1 §1.2.8.
|
|
175
|
+
|
|
176
|
+
Гейт: все сценарии проходят; у каждого инварианта есть позитив и негатив; каждое различение подтверждено.
|
|
177
|
+
|
|
178
|
+
### Этап 5. Ревью и сдача
|
|
179
|
+
|
|
180
|
+
Ревью в два прохода: сначала **соответствие брифу** (требования, различения, инварианты, невыразимое, решения), затем форма ЯРЭ. Отчёт начинается с таблицы «требование → конституента → доказательство (сценарий)».
|
|
181
|
+
|
|
182
|
+
**Когда КС закончена.** Когда выведенными понятиями объясняется всё зафиксированное содержание. Если требование не покрыто, причина — одна из трёх: утеряна абстракция (не хватает исходного понятия), понятие не выведено, или не реализована комбинация синтеза (нужна другая микротеория). Отчёт называет причину и следующий шаг.
|
|
183
|
+
|
|
184
|
+
> «Если же остались какие-то необъяснимые части содержания, то можно предположить, что: – либо одна из абстракций утеряна, – либо она еще не выражена в имеющейся теории, – либо имеется нереализованная комбинация синтеза» — Т1 §1.2.18.
|
|
185
|
+
|
|
186
|
+
## Синтез микротеорий
|
|
187
|
+
|
|
188
|
+
Сложная предметная область — несколько микротеорий, объединённых синтезом через таблицу отождествлений ([DOMAIN.md](DOMAIN.md) «Синтез», [PORTAL-OSS.md](PORTAL-OSS.md)).
|
|
189
|
+
|
|
190
|
+
Правила отождествления: исходное с исходным — можно; исходное одной схемы с производным другой — можно, при этом понятие становится конкретнее; производное с производным — только при полном совпадении структуры. Синтетическая аксиома связывает понятия разных микротеорий (пример: «прямой родственник не может быть в прямом подчинении»).
|
|
191
|
+
|
|
192
|
+
**Бриф синтеза.** У каждой схемы ОСС свой бриф; брифы аргументов в результат не переносятся. Бриф результата описывает то, что даёт сам синтез: отождествления и новые отношения (решения), новые выводимые понятия (требования), синтетические аксиомы (инварианты). Синтез без нового — лишний.
|
|
193
|
+
|
|
194
|
+
**Имена после синтеза.** Встроенные конституенты получают новые номера (rstool — следующие свободные по типу; синтез в ОСС на Portal перенумеровывает все имена подряд). Формулы, типизация и ссылки в терминах и текстовых определениях перенумеровываются автоматически, конвенции — нет. Поэтому в конвенциях только предметный смысл: без имён конституент и без номеров решений брифа.
|
|
195
|
+
|
|
196
|
+
> «Не запрещено отождествлять производное понятие одной теории с исходным понятием другой… уровень абстракции этого понятия повышается… Запрещается отождествлять производные понятия с производными, за исключением очень незначительного числа совпадений, которые заключаются в полном совпадении структуры понятий» — Т1 §1.2.18.
|
|
197
|
+
|
|
198
|
+
## Современные ориентиры
|
|
199
|
+
|
|
200
|
+
Для агента, не для текста пользователю: требования к выразительным средствам ≈ competency questions; сценарии ≈ приёмочные тесты; расчистка ≈ разметка требований; микротеория ≈ модуль онтологии; синтез ≈ слияние онтологий с таблицей соответствий; журнал решений ≈ ADR.
|
|
201
|
+
|
|
202
|
+
## Учебные примеры
|
|
203
|
+
|
|
204
|
+
| Пример | Что показывает |
|
|
205
|
+
| :---------------------------------------------------------------------- | :--------------------------------------------------------------------------- |
|
|
206
|
+
| [`examples/subordination/`](../examples/subordination/) | этапы 1–2 целиком: ограничения, альтернативы, свойства как решения |
|
|
207
|
+
| [`examples/kinship/`](../examples/kinship/) | родовое отношение «быть ребёнком» и выведенное разнообразие; бриф «обучение» |
|
|
208
|
+
| [`examples/kinship-subordination/`](../examples/kinship-subordination/) | синтез двух микротеорий и синтетическая аксиома |
|