@rsconcept/rstool 0.7.1 → 0.8.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.
Files changed (35) hide show
  1. package/README.md +1 -1
  2. package/docs/CONSTITUENTA.md +1 -1
  3. package/docs/DIAGNOSTICS.md +3 -0
  4. package/docs/MODEL-TESTING.md +1 -1
  5. package/examples/README.md +52 -29
  6. package/examples/build-chocolate-nim-rsform.ts +311 -0
  7. package/examples/chocolate-nim/build-rsform.ts +311 -0
  8. package/examples/chocolate-nim/build-rsmodel.ts +100 -0
  9. package/examples/chocolate-nim/constants.ts +10 -0
  10. package/examples/chocolate-nim/rsform-session.json +778 -0
  11. package/examples/chocolate-nim/rsmodel-session.json +802 -0
  12. package/examples/expression-bank/bank-constituents.ts +370 -0
  13. package/examples/expression-bank/build-rsform.ts +59 -0
  14. package/examples/expression-bank/constants.ts +1 -0
  15. package/examples/expression-bank/rsform-session.json +4006 -0
  16. package/examples/{build-kinship-rsform.ts → kinship/build-rsform.ts} +276 -54
  17. package/examples/{build-kinship-rsmodel.ts → kinship/build-rsmodel.ts} +18 -7
  18. package/examples/kinship/constants.ts +5 -3
  19. package/examples/{kinship-rsmodel-session.json → kinship/rsform-session.json} +614 -92
  20. package/examples/{kinship-rsform-session.json → kinship/rsmodel-session.json} +704 -50
  21. package/examples/kinship/x1-actions.test.ts +2 -1
  22. package/examples/movd/build-rsform.ts +325 -0
  23. package/examples/movd/build-rsmodel.ts +159 -0
  24. package/examples/movd/constants.ts +18 -0
  25. package/examples/movd/rsform-session.json +738 -0
  26. package/examples/movd/rsmodel-session.json +832 -0
  27. package/examples/{build-sample-rsform.ts → sample/build-rsform.ts} +2 -2
  28. package/examples/{build-sample-rsmodel.ts → sample/build-rsmodel.ts} +3 -4
  29. package/examples/template-apply/build-rsform.ts +236 -0
  30. package/examples/template-apply/constants.ts +13 -0
  31. package/examples/template-apply/rsform-session.json +333 -0
  32. package/package.json +14 -8
  33. package/skills/rstool-helper/EXAMPLES.md +2 -2
  34. /package/examples/{sample-rsform-session.json → sample/rsform-session.json} +0 -0
  35. /package/examples/{sample-rsmodel-session.json → sample/rsmodel-session.json} +0 -0
@@ -1,7 +1,9 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { resolve } from 'node:path';
3
3
 
4
- import { CstType, RSToolWrapperClient, type AddOrUpdateConstituentaInput } from '../src';
4
+ import { CstType, RSToolWrapperClient, type AddOrUpdateConstituentaInput } from '../../src';
5
+
6
+ import { DEFAULT_RSFORM_SESSION_PATH } from './constants';
5
7
 
6
8
  async function run() {
7
9
  const client = new RSToolWrapperClient({
@@ -30,8 +32,7 @@ async function run() {
30
32
  cstType: CstType.STRUCTURED,
31
33
  definitionFormal: 'ℬ(X1×X1)',
32
34
  term: 'родитель-ребенок',
33
- convention:
34
- 'Элементы — пары (p, c): p — родитель, c — ребёнок; p, c ∈ X1. Отношение задаётся конвенцией на предметной области.'
35
+ convention: 'Множество пар: родитель и его ребёнок. Порядок в паре задаётся конвенцией на предметной области.'
35
36
  }
36
37
  },
37
38
  {
@@ -51,8 +52,7 @@ async function run() {
51
52
  cstType: CstType.FUNCTION,
52
53
  definitionFormal: '[ξ∈X1] Pr1(Fi2[{ξ}](S1))',
53
54
  term: 'родители данного человека',
54
- definitionText:
55
- 'Для человека ξ — множество его родителей (первая проекция пар из S1, у которых вторая проекция равна ξ).'
55
+ definitionText: ''
56
56
  }
57
57
  },
58
58
  {
@@ -62,8 +62,7 @@ async function run() {
62
62
  cstType: CstType.FUNCTION,
63
63
  definitionFormal: '[σ∈ℬ(X1)] Pr2(Fi1[σ](S1))',
64
64
  term: 'дети',
65
- definitionText:
66
- 'Прямые дети людей из σ: вторая проекция пар из S1, у которых родитель (первая проекция) лежит в σ. Для одного человека ξ используют F6[{ξ}].'
65
+ definitionText: 'Совокупность детей людей, одним из родителей которых является человек из данной группы людей'
67
66
  }
68
67
  },
69
68
  {
@@ -73,8 +72,7 @@ async function run() {
73
72
  cstType: CstType.TERM,
74
73
  definitionFormal: 'Pr2(S1)',
75
74
  term: 'потомки',
76
- definitionText:
77
- 'Множество людей, выступающих ребёнком хотя бы в одной паре из S1 (симметрично терму «родители»).'
75
+ definitionText: 'Люди, являющиеся ребёнком хотя бы в одном отношении родитель — ребёнок'
78
76
  }
79
77
  },
80
78
  {
@@ -84,8 +82,7 @@ async function run() {
84
82
  cstType: CstType.FUNCTION,
85
83
  definitionFormal: '[ξ∈X1] R{ρ:=F6[{ξ}] | ρ≠∅ | ρ∪F6[ρ]}',
86
84
  term: 'потомки данного человека',
87
- definitionText:
88
- 'Для человека ξ — транзитивное замыкание отношения «ребёнок»: прямые дети, внуки и все последующие поколения.'
85
+ definitionText: 'Дети людей данного человека или дети людей его потомков'
89
86
  }
90
87
  },
91
88
  {
@@ -93,10 +90,9 @@ async function run() {
93
90
  id: 7,
94
91
  alias: 'F3',
95
92
  cstType: CstType.FUNCTION,
96
- definitionFormal: '[ξ∈X1] D{μ∈X1 | ∃p∈F1[ξ] μ∈F1[p] & μ≠ξ}',
93
+ definitionFormal: '[ξ∈X1] Pr2(Fi1[F1[ξ]](S1))\\{ξ}',
97
94
  term: 'братья и сестры данного человека',
98
- definitionText:
99
- 'Люди μ ≠ ξ, у которых есть общий с ξ родитель (в т.ч. сводные братья и сестры при одном общем родителе).'
95
+ definitionText: 'Дети людей родителей данного человека за исключением его самого'
100
96
  }
101
97
  },
102
98
  {
@@ -106,7 +102,7 @@ async function run() {
106
102
  cstType: CstType.FUNCTION,
107
103
  definitionFormal: '[ξ∈X1] D{κ∈X1 | ∃μ∈F3[ξ] κ∈F6[{μ}] & κ∉F2[ξ]}',
108
104
  term: 'племянники данного человека',
109
- definitionText: 'Прямые дети братьев и сестёр ξ, не входящие в множество потомков самого ξ.'
105
+ definitionText: 'Прямые дети братьев и сестёр данного человека, не являющиеся его потомками'
110
106
  }
111
107
  },
112
108
  {
@@ -116,8 +112,7 @@ async function run() {
116
112
  cstType: CstType.FUNCTION,
117
113
  definitionFormal: '[ξ∈X1] D{ν∈X1 | ∃κ∈F4[ξ] ν∈F6[{κ}]}',
118
114
  term: 'внучатые племянники данного человека',
119
- definitionText:
120
- 'Прямые дети племянников ξ: потомки братьев/сестёр на два поколения ниже (ребёнок племянника или племянницы).'
115
+ definitionText: 'Прямые дети племянников и племянниц данного человека'
121
116
  }
122
117
  },
123
118
  {
@@ -125,10 +120,9 @@ async function run() {
125
120
  id: 11,
126
121
  alias: 'D3',
127
122
  cstType: CstType.TERM,
128
- definitionFormal: 'D{ν∈X1 | ∃ξ∈X1 ν∈F5[ξ]}',
123
+ definitionFormal: 'I{ν | ξ:∈X1; ν:∈F5[ξ]}',
129
124
  term: 'внучатые племянники',
130
- definitionText:
131
- 'Множество людей, являющихся внучатыми племянниками или племянницами хотя бы одного человека из X1 (объединение значений F5 по всем ξ).'
125
+ definitionText: 'Люди, являющиеся внучатыми племянниками или племянницами хотя бы одного человека'
132
126
  }
133
127
  },
134
128
  {
@@ -138,8 +132,7 @@ async function run() {
138
132
  cstType: CstType.STRUCTURED,
139
133
  definitionFormal: 'ℬ(X1)',
140
134
  term: 'мужчины',
141
- convention:
142
- 'Пол устанавливается по документам; каждый индивид из X1 входит ровно в одно из множеств S2 или S3.'
135
+ convention: 'Пол человека устанавливается в соответствии с документами'
143
136
  }
144
137
  },
145
138
  {
@@ -149,8 +142,7 @@ async function run() {
149
142
  cstType: CstType.STRUCTURED,
150
143
  definitionFormal: 'ℬ(X1)',
151
144
  term: 'женщины',
152
- convention:
153
- 'Пол устанавливается по документам; каждый индивид из X1 входит ровно в одно из множеств S2 или S3.'
145
+ convention: 'Пол человека устанавливается в соответствии с документами'
154
146
  }
155
147
  },
156
148
  {
@@ -160,7 +152,167 @@ async function run() {
160
152
  cstType: CstType.AXIOM,
161
153
  definitionFormal: 'S2∪S3=X1 & S2∩S3=∅',
162
154
  term: 'разбиение людей по полу',
163
- definitionText: 'Каждый человек мужчина или женщина, но не оба сразу: S2 и S3 образуют разбиение X1.'
155
+ definitionText: 'Каждый человек является либо мужчиной, либо женщиной'
156
+ }
157
+ },
158
+ {
159
+ draft: {
160
+ id: 41,
161
+ alias: 'S4',
162
+ cstType: CstType.STRUCTURED,
163
+ definitionFormal: 'ℬ(S2×S3)',
164
+ term: 'браки',
165
+ convention: 'Действующие браки'
166
+ }
167
+ },
168
+ {
169
+ draft: {
170
+ id: 42,
171
+ alias: 'D4',
172
+ cstType: CstType.TERM,
173
+ definitionFormal: 'Pr1(S4)',
174
+ term: 'мужья',
175
+ definitionText: 'Мужчины, состоящие в браке'
176
+ }
177
+ },
178
+ {
179
+ draft: {
180
+ id: 43,
181
+ alias: 'D5',
182
+ cstType: CstType.TERM,
183
+ definitionFormal: 'Pr2(S4)',
184
+ term: 'жены',
185
+ definitionText: 'Женщины, состоящие в браке'
186
+ }
187
+ },
188
+ {
189
+ draft: {
190
+ id: 44,
191
+ alias: 'D6',
192
+ cstType: CstType.TERM,
193
+ definitionFormal: 'Pr1(S4)∪Pr2(S4)',
194
+ term: 'супруги',
195
+ definitionText: 'Люди, состоящие в браке'
196
+ }
197
+ },
198
+ {
199
+ draft: {
200
+ id: 45,
201
+ alias: 'F31',
202
+ cstType: CstType.FUNCTION,
203
+ definitionFormal: '[σ∈ℬ(X1)] Pr1(Fi2[σ](S4))',
204
+ term: 'мужья группы людей',
205
+ definitionText: 'Мужья людей из данной группы людей'
206
+ }
207
+ },
208
+ {
209
+ draft: {
210
+ id: 46,
211
+ alias: 'F32',
212
+ cstType: CstType.FUNCTION,
213
+ definitionFormal: '[σ∈ℬ(X1)] Pr2(Fi1[σ](S4))',
214
+ term: 'жены группы людей',
215
+ definitionText: 'Жёны людей из данной группы людей'
216
+ }
217
+ },
218
+ {
219
+ draft: {
220
+ id: 47,
221
+ alias: 'F33',
222
+ cstType: CstType.FUNCTION,
223
+ definitionFormal: '[σ∈ℬ(X1)] F31[σ]∪F32[σ]',
224
+ term: 'супруги группы людей',
225
+ definitionText: 'Супруги людей из данной группы людей'
226
+ }
227
+ },
228
+ {
229
+ draft: {
230
+ id: 48,
231
+ alias: 'F34',
232
+ cstType: CstType.FUNCTION,
233
+ definitionFormal: '[α∈D5] debool(F31[{α}])',
234
+ term: 'муж жены',
235
+ definitionText: ''
236
+ }
237
+ },
238
+ {
239
+ draft: {
240
+ id: 49,
241
+ alias: 'F35',
242
+ cstType: CstType.FUNCTION,
243
+ definitionFormal: '[α∈D4] debool(F32[{α}])',
244
+ term: 'жена мужа',
245
+ definitionText: ''
246
+ }
247
+ },
248
+ {
249
+ draft: {
250
+ id: 50,
251
+ alias: 'A4',
252
+ cstType: CstType.AXIOM,
253
+ definitionFormal: 'card(S4)=card(D4) & card(S4)=card(D5)',
254
+ term: 'единственность браков',
255
+ definitionText: 'Каждый человек может состоять только в одном браке'
256
+ }
257
+ },
258
+ {
259
+ draft: {
260
+ id: 51,
261
+ alias: 'D7',
262
+ cstType: CstType.TERM,
263
+ definitionFormal: 'D{ξ∈X1 | card(F33[{ξ}]\\{ξ})>1}',
264
+ term: 'люди в нескольких браках',
265
+ definitionText: 'Люди, у которых больше одного супруга'
266
+ }
267
+ },
268
+ {
269
+ draft: {
270
+ id: 55,
271
+ alias: 'D10',
272
+ cstType: CstType.TERM,
273
+ definitionFormal: 'D{ξ∈D2 | F33[F1[ξ]]=F1[ξ]}',
274
+ term: 'законные дети',
275
+ definitionText: 'Дети людей, родители которых состоят в браке'
276
+ }
277
+ },
278
+ {
279
+ draft: {
280
+ id: 56,
281
+ alias: 'D11',
282
+ cstType: CstType.TERM,
283
+ definitionFormal: 'D2\\D10',
284
+ term: 'бастарды',
285
+ definitionText: 'Дети людей, родители которых не состоят в браке'
286
+ }
287
+ },
288
+ {
289
+ draft: {
290
+ id: 54,
291
+ alias: 'D9',
292
+ cstType: CstType.TERM,
293
+ definitionFormal: 'I{(σ, γ) | σ:∈D4; γ:=F35[σ]}',
294
+ term: 'пары муж — жена',
295
+ definitionText: 'Множество пар, состоящих из мужа и его жены'
296
+ }
297
+ },
298
+ {
299
+ draft: {
300
+ id: 53,
301
+ alias: 'D8',
302
+ cstType: CstType.TERM,
303
+ definitionFormal: 'X1\\D2',
304
+ term: 'бездетные люди',
305
+ definitionText: 'Люди, не являющиеся детьми людей'
306
+ }
307
+ },
308
+ {
309
+ draft: {
310
+ id: 52,
311
+ alias: 'A5',
312
+ cstType: CstType.AXIOM,
313
+ definitionFormal: '∀ξ∈X1 ξ∉F2[ξ]',
314
+ term: 'ацикличность родства',
315
+ definitionText: 'Человек не может быть своим потомком'
164
316
  }
165
317
  },
166
318
  {
@@ -170,7 +322,7 @@ async function run() {
170
322
  cstType: CstType.FUNCTION,
171
323
  definitionFormal: '[ξ∈X1] F1[ξ]∩S2',
172
324
  term: 'отцы данного человека',
173
- definitionText: 'Родители ξ, являющиеся мужчинами.'
325
+ definitionText: ''
174
326
  }
175
327
  },
176
328
  {
@@ -180,7 +332,7 @@ async function run() {
180
332
  cstType: CstType.FUNCTION,
181
333
  definitionFormal: '[ξ∈X1] F1[ξ]∩S3',
182
334
  term: 'матери данного человека',
183
- definitionText: 'Родители ξ, являющиеся женщинами.'
335
+ definitionText: ''
184
336
  }
185
337
  },
186
338
  {
@@ -190,7 +342,7 @@ async function run() {
190
342
  cstType: CstType.AXIOM,
191
343
  definitionFormal: '∀ξ∈X1 (card(F7[ξ])≤1 & card(F8[ξ])≤1)',
192
344
  term: 'не более одного отца и одной матери',
193
- definitionText: 'У каждого человека не более одного отца и не более одной матери.'
345
+ definitionText: 'У ребёнка людей может быть максимум один отец и одна мать'
194
346
  }
195
347
  },
196
348
  {
@@ -200,7 +352,7 @@ async function run() {
200
352
  cstType: CstType.FUNCTION,
201
353
  definitionFormal: '[ξ∈X1] F3[ξ]∩S2',
202
354
  term: 'братья данного человека',
203
- definitionText: 'Братья и сёстры ξ (F3), являющиеся мужчинами.'
355
+ definitionText: 'Братья и сёстры данного человека, являющиеся мужчинами'
204
356
  }
205
357
  },
206
358
  {
@@ -210,7 +362,7 @@ async function run() {
210
362
  cstType: CstType.FUNCTION,
211
363
  definitionFormal: '[ξ∈X1] F3[ξ]∩S3',
212
364
  term: 'сёстры данного человека',
213
- definitionText: 'Братья и сёстры ξ (F3), являющиеся женщинами.'
365
+ definitionText: 'Братья и сёстры данного человека, являющиеся женщинами'
214
366
  }
215
367
  },
216
368
  {
@@ -220,7 +372,7 @@ async function run() {
220
372
  cstType: CstType.FUNCTION,
221
373
  definitionFormal: '[ξ∈X1] D{μ∈F3[ξ] | F1[ξ]=F1[μ]}',
222
374
  term: 'полнородные братья и сёстры',
223
- definitionText: 'Сиблинги с полностью совпадающими множествами родителей.'
375
+ definitionText: 'Сиблинги данного человека, родители которых полностью совпадают с его родителями'
224
376
  }
225
377
  },
226
378
  {
@@ -230,7 +382,7 @@ async function run() {
230
382
  cstType: CstType.FUNCTION,
231
383
  definitionFormal: '[ξ∈X1] F11[ξ]∩S2',
232
384
  term: 'полнородные братья',
233
- definitionText: 'Полнородные сиблинги ξ, являющиеся мужчинами.'
385
+ definitionText: 'Полнородные сиблинги данного человека, являющиеся мужчинами'
234
386
  }
235
387
  },
236
388
  {
@@ -240,7 +392,7 @@ async function run() {
240
392
  cstType: CstType.FUNCTION,
241
393
  definitionFormal: '[ξ∈X1] F11[ξ]∩S3',
242
394
  term: 'полнородные сёстры',
243
- definitionText: 'Полнородные сиблинги ξ, являющиеся женщинами.'
395
+ definitionText: 'Полнородные сиблинги данного человека, являющиеся женщинами'
244
396
  }
245
397
  },
246
398
  {
@@ -250,7 +402,7 @@ async function run() {
250
402
  cstType: CstType.FUNCTION,
251
403
  definitionFormal: '[ξ∈X1] D{μ∈F3[ξ] | F7[ξ]=F7[μ] & F8[ξ]≠F8[μ]}',
252
404
  term: 'единокровные братья и сёстры',
253
- definitionText: 'Сиблинги с общим отцом и разными матерями.'
405
+ definitionText: 'Сиблинги, у которых общий отец, но разные матери'
254
406
  }
255
407
  },
256
408
  {
@@ -260,7 +412,7 @@ async function run() {
260
412
  cstType: CstType.FUNCTION,
261
413
  definitionFormal: '[ξ∈X1] F14[ξ]∩S2',
262
414
  term: 'единокровные братья',
263
- definitionText: 'Единокровные сиблинги ξ, являющиеся мужчинами.'
415
+ definitionText: 'Единокровные сиблинги данного человека, являющиеся мужчинами'
264
416
  }
265
417
  },
266
418
  {
@@ -270,7 +422,7 @@ async function run() {
270
422
  cstType: CstType.FUNCTION,
271
423
  definitionFormal: '[ξ∈X1] F14[ξ]∩S3',
272
424
  term: 'единокровные сёстры',
273
- definitionText: 'Единокровные сиблинги ξ, являющиеся женщинами.'
425
+ definitionText: 'Единокровные сиблинги данного человека, являющиеся женщинами'
274
426
  }
275
427
  },
276
428
  {
@@ -280,7 +432,7 @@ async function run() {
280
432
  cstType: CstType.FUNCTION,
281
433
  definitionFormal: '[ξ∈X1] D{μ∈F3[ξ] | F7[ξ]≠F7[μ] & F8[ξ]=F8[μ]}',
282
434
  term: 'единоутробные братья и сёстры',
283
- definitionText: 'Сиблинги с общей матерью и разными отцами.'
435
+ definitionText: 'Сиблинги, у которых общая мать, но разные отцы'
284
436
  }
285
437
  },
286
438
  {
@@ -290,7 +442,7 @@ async function run() {
290
442
  cstType: CstType.FUNCTION,
291
443
  definitionFormal: '[ξ∈X1] F17[ξ]∩S2',
292
444
  term: 'единоутробные братья',
293
- definitionText: 'Единоутробные сиблинги ξ, являющиеся мужчинами.'
445
+ definitionText: 'Единоутробные сиблинги данного человека, являющиеся мужчинами'
294
446
  }
295
447
  },
296
448
  {
@@ -300,7 +452,7 @@ async function run() {
300
452
  cstType: CstType.FUNCTION,
301
453
  definitionFormal: '[ξ∈X1] F17[ξ]∩S3',
302
454
  term: 'единоутробные сёстры',
303
- definitionText: 'Единоутробные сиблинги ξ, являющиеся женщинами.'
455
+ definitionText: 'Единоутробные сиблинги данного человека, являющиеся женщинами'
304
456
  }
305
457
  },
306
458
  {
@@ -310,7 +462,7 @@ async function run() {
310
462
  cstType: CstType.FUNCTION,
311
463
  definitionFormal: '[ξ∈X1] F6[{ξ}]∩S2',
312
464
  term: 'сыновья данного человека',
313
- definitionText: 'Прямые дети ξ, являющиеся мужчинами.'
465
+ definitionText: 'Дети людей данного человека, являющиеся мужчинами'
314
466
  }
315
467
  },
316
468
  {
@@ -320,7 +472,7 @@ async function run() {
320
472
  cstType: CstType.FUNCTION,
321
473
  definitionFormal: '[ξ∈X1] F6[{ξ}]∩S3',
322
474
  term: 'дочери данного человека',
323
- definitionText: 'Прямые дети ξ, являющиеся женщинами.'
475
+ definitionText: 'Дети людей данного человека, являющиеся женщинами'
324
476
  }
325
477
  },
326
478
  {
@@ -330,7 +482,7 @@ async function run() {
330
482
  cstType: CstType.FUNCTION,
331
483
  definitionFormal: '[ξ∈X1] F6[F6[{ξ}]]∩S2',
332
484
  term: 'внуки данного человека',
333
- definitionText: 'Внуки-мужчины: мужчины среди детей детей ξ.'
485
+ definitionText: 'Сыновья детей данного человека'
334
486
  }
335
487
  },
336
488
  {
@@ -338,9 +490,9 @@ async function run() {
338
490
  id: 33,
339
491
  alias: 'F23',
340
492
  cstType: CstType.FUNCTION,
341
- definitionFormal: '[ξ∈X1] F6[F6[{ξ}]]∩S3',
493
+ definitionFormal: '[ξ∈X1] F6[F6[bool(ξ)]]∩S3',
342
494
  term: 'внучки данного человека',
343
- definitionText: 'Внучки: женщины среди детей детей ξ.'
495
+ definitionText: 'Дочери детей данного человека'
344
496
  }
345
497
  },
346
498
  {
@@ -350,7 +502,7 @@ async function run() {
350
502
  cstType: CstType.FUNCTION,
351
503
  definitionFormal: '[ξ∈X1] D{μ∈X1 | ∃p∈F1[ξ] μ∈F7[p]}',
352
504
  term: 'дедушки данного человека',
353
- definitionText: 'Отцы родителей ξ.'
505
+ definitionText: 'Отцы родителей данного человека'
354
506
  }
355
507
  },
356
508
  {
@@ -360,7 +512,7 @@ async function run() {
360
512
  cstType: CstType.FUNCTION,
361
513
  definitionFormal: '[ξ∈X1] D{μ∈X1 | ∃p∈F1[ξ] μ∈F8[p]}',
362
514
  term: 'бабушки данного человека',
363
- definitionText: 'Матери родителей ξ.'
515
+ definitionText: 'Матери родителей данного человека'
364
516
  }
365
517
  },
366
518
  {
@@ -370,7 +522,7 @@ async function run() {
370
522
  cstType: CstType.FUNCTION,
371
523
  definitionFormal: '[ξ∈X1] F4[ξ]∩S2',
372
524
  term: 'племянники данного человека (мужчины)',
373
- definitionText: 'Племянники ξ (F4), являющиеся мужчинами.'
525
+ definitionText: 'Племянники данного человека, являющиеся мужчинами'
374
526
  }
375
527
  },
376
528
  {
@@ -380,7 +532,7 @@ async function run() {
380
532
  cstType: CstType.FUNCTION,
381
533
  definitionFormal: '[ξ∈X1] F4[ξ]∩S3',
382
534
  term: 'племянницы данного человека',
383
- definitionText: 'Племянники ξ (F4), являющиеся женщинами.'
535
+ definitionText: 'Племянницы данного человека'
384
536
  }
385
537
  },
386
538
  {
@@ -390,7 +542,7 @@ async function run() {
390
542
  cstType: CstType.FUNCTION,
391
543
  definitionFormal: '[ξ∈X1] D{ν∈X1 | ∃p∈F1[ξ] ∃κ∈F3[p] ν∈F6[{κ}]}',
392
544
  term: 'двоюродные братья и сёстры',
393
- definitionText: 'Дети братьев и сестёр родителей ξ.'
545
+ definitionText: 'Дети людей сиблингов родителей данного человека'
394
546
  }
395
547
  },
396
548
  {
@@ -400,7 +552,7 @@ async function run() {
400
552
  cstType: CstType.FUNCTION,
401
553
  definitionFormal: '[ξ∈X1] F28[ξ]∩S2',
402
554
  term: 'двоюродные братья',
403
- definitionText: 'Двоюродные сиблинги ξ, являющиеся мужчинами.'
555
+ definitionText: 'Двоюродные сиблинги данного человека, являющиеся мужчинами'
404
556
  }
405
557
  },
406
558
  {
@@ -410,7 +562,77 @@ async function run() {
410
562
  cstType: CstType.FUNCTION,
411
563
  definitionFormal: '[ξ∈X1] F28[ξ]∩S3',
412
564
  term: 'двоюродные сёстры',
413
- definitionText: 'Двоюродные сиблинги ξ, являющиеся женщинами.'
565
+ definitionText: 'Двоюродные сиблинги данного человека, являющиеся женщинами'
566
+ }
567
+ },
568
+ {
569
+ draft: {
570
+ id: 57,
571
+ alias: 'D12',
572
+ cstType: CstType.TERM,
573
+ definitionFormal: 'S2∆S3',
574
+ term: 'люди',
575
+ definitionText: 'Совокупность мужчин и женщин как симметрическая разность разбиения по полу'
576
+ }
577
+ },
578
+ {
579
+ draft: {
580
+ id: 58,
581
+ alias: 'F36',
582
+ cstType: CstType.FUNCTION,
583
+ definitionFormal: '[ξ∈X1] red({F7[ξ], F8[ξ]})',
584
+ term: 'родители данного человека (через red)',
585
+ definitionText: 'Объединение множеств отца и матери данного человека'
586
+ }
587
+ },
588
+ {
589
+ draft: {
590
+ id: 59,
591
+ alias: 'D13',
592
+ cstType: CstType.TERM,
593
+ definitionFormal: 'Pr2,1(S1)',
594
+ term: 'пары ребёнок — родитель',
595
+ definitionText: 'Все отношения ребёнок — родитель как пары людей'
596
+ }
597
+ },
598
+ {
599
+ draft: {
600
+ id: 64,
601
+ alias: 'A6',
602
+ cstType: CstType.AXIOM,
603
+ definitionFormal: '(S2⊆X1 & S3⊆X1 & S2∩S3=∅) ⇔ S2∪S3=X1',
604
+ term: 'эквивалентность разбиения по полу',
605
+ definitionText: 'Мужчины и женщины образуют разбиение множества людей'
606
+ }
607
+ },
608
+ {
609
+ draft: {
610
+ id: 65,
611
+ alias: 'A7',
612
+ cstType: CstType.AXIOM,
613
+ definitionFormal: '∀ξ∈X1 (ξ∈S2 ∨ ξ∈S3)',
614
+ term: 'каждый человек — мужчина или женщина',
615
+ definitionText: ''
616
+ }
617
+ },
618
+ {
619
+ draft: {
620
+ id: 67,
621
+ alias: 'T1',
622
+ cstType: CstType.STATEMENT,
623
+ definitionFormal: '∀(μ,ν)∈S1 μ∉F2[ν]',
624
+ term: 'родитель не потомок ребёнка',
625
+ definitionText: 'В каждой паре родитель — ребёнок родитель не является потомком ребёнка'
626
+ }
627
+ },
628
+ {
629
+ draft: {
630
+ id: 69,
631
+ alias: 'T2',
632
+ cstType: CstType.STATEMENT,
633
+ definitionFormal: 'S2⊄S3',
634
+ term: 'не все мужчины — женщины',
635
+ definitionText: 'Множество мужчин не содержится в множестве женщин'
414
636
  }
415
637
  },
416
638
  {
@@ -420,7 +642,7 @@ async function run() {
420
642
  cstType: CstType.AXIOM,
421
643
  definitionFormal: 'card(X1)≤10',
422
644
  term: 'не более десяти человек',
423
- definitionText: 'В предметной области не более десяти человек: мощность X1 не превышает 10.'
645
+ definitionText: 'В предметной области не более десяти человек'
424
646
  }
425
647
  }
426
648
  ];
@@ -446,13 +668,13 @@ async function run() {
446
668
  await client.call('commitStep', {
447
669
  sessionId: session.sessionId,
448
670
  message:
449
- 'КС «родственные отношения»: пол (S2/S3), отцы/матери, разновидности сиблингов, внуки, дедушки/бабушки, двоюродные'
671
+ 'КС «родственные отношения»: браки, пол, сиблинги; ∨ ⇒ ⇔ bool red Pr1,2 Fi1,2 pr1,2, упакованные кванторы'
450
672
  });
451
673
 
452
674
  const exported = await client.call<string>('exportSession', {
453
675
  sessionId: session.sessionId
454
676
  });
455
- const outputPath = resolve(process.cwd(), 'examples', 'kinship-rsform-session.json');
677
+ const outputPath = resolve(process.cwd(), DEFAULT_RSFORM_SESSION_PATH);
456
678
  await writeFile(outputPath, exported, 'utf8');
457
679
  console.log(`Exported: ${outputPath}`);
458
680
  } finally {
@@ -1,12 +1,19 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
2
  import { resolve } from 'node:path';
3
3
 
4
- import { EvalStatus, RSToolWrapperClient } from '../src';
4
+ import { TUPLE_ID } from '@rsconcept/domain';
5
5
 
6
- import { A1_ID, D3_ID, S2_ID, S3_ID } from './kinship/constants';
6
+ import { EvalStatus, RSToolWrapperClient } from '../../src';
7
7
 
8
- /** Tuple marker in structured values. */
9
- const TUPLE_ID = -111;
8
+ import {
9
+ A1_ID,
10
+ D3_ID,
11
+ DEFAULT_RSFORM_SESSION_PATH,
12
+ DEFAULT_RSMODEL_SESSION_PATH,
13
+ S2_ID,
14
+ S3_ID,
15
+ S4_ID
16
+ } from './constants';
10
17
 
11
18
  /**
12
19
  * Minimal family so D3 (внучатые племянники) is non-empty:
@@ -37,6 +44,9 @@ const S1_VALUE = [
37
44
  [TUPLE_ID, 5, 6]
38
45
  ] as const;
39
46
 
47
+ /** S4: браки (муж, жена) — Иван (0) и Мария (1). */
48
+ const S4_VALUE = [[TUPLE_ID, 0, 1]] as const;
49
+
40
50
  /** Indices of men and women in the sample family (Иван, Пётр, Олег, Семён — м; остальные — ж). */
41
51
  const S2_VALUE = [0, 2, 4, 6] as const;
42
52
  const S3_VALUE = [1, 3, 5] as const;
@@ -48,7 +58,7 @@ async function run() {
48
58
 
49
59
  try {
50
60
  await client.waitUntilReady();
51
- const kinshipPath = resolve(process.cwd(), 'examples', 'kinship-rsform-session.json');
61
+ const kinshipPath = resolve(process.cwd(), DEFAULT_RSFORM_SESSION_PATH);
52
62
  const kinshipJson = await readFile(kinshipPath, 'utf8');
53
63
 
54
64
  const imported = await client.call<{ sessionId: string }>('importSession', {
@@ -62,7 +72,8 @@ async function run() {
62
72
  { target: 1, value: X1_BINDING },
63
73
  { target: 2, value: S1_VALUE },
64
74
  { target: S2_ID, value: S2_VALUE },
65
- { target: S3_ID, value: S3_VALUE }
75
+ { target: S3_ID, value: S3_VALUE },
76
+ { target: S4_ID, value: S4_VALUE }
66
77
  ]
67
78
  }
68
79
  });
@@ -111,7 +122,7 @@ async function run() {
111
122
  const exported = await client.call<string>('exportSession', {
112
123
  sessionId: imported.sessionId
113
124
  });
114
- const outputPath = resolve(process.cwd(), 'examples', 'kinship-rsmodel-session.json');
125
+ const outputPath = resolve(process.cwd(), DEFAULT_RSMODEL_SESSION_PATH);
115
126
  await writeFile(outputPath, exported, 'utf8');
116
127
  console.log(`Exported: ${outputPath}`);
117
128
  } finally {