mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-11-15 17:21:38 +03:00
124 lines
5.9 KiB
TypeScript
124 lines
5.9 KiB
TypeScript
import { LinkTopic } from '../../components/link-topic';
|
||
import { HelpTopic } from '../../models/help-topic';
|
||
|
||
export function HelpRSLangExpressionStructure() {
|
||
return (
|
||
<div>
|
||
<h1>Структурные выражения</h1>
|
||
<p>
|
||
Структурные выражения в языке родов структур используются для преобразований, меняющий{' '}
|
||
<LinkTopic topic={HelpTopic.RSL_TYPIFICATION} text='типизацию' /> аргументов, позволяя порождать структурно
|
||
зависимые или структурно новые понятия.
|
||
</p>
|
||
|
||
<h2>Порождение структур</h2>
|
||
<ul>
|
||
<li>
|
||
<b>Булеан / Множество подмножеств</b>: <code>ℬ(X1)</code> — множество всех подмножеств <code>X1</code>.
|
||
</li>
|
||
<li>
|
||
<b>Декартово произведение</b>: <code>X1×X2</code> — множество всех пар элементов из <code>X1</code> и{' '}
|
||
<code>X2</code>.
|
||
</li>
|
||
<li>
|
||
<b>Кортеж</b>: <code>(a, b, c)</code> — упорядоченная n-ка (n ≥ 2).
|
||
</li>
|
||
<li>
|
||
<b>Перечисление</b>: <code>{'{a, b, c}'}</code> — неупорядоченная n-ка (n ≥ 1).
|
||
</li>
|
||
<li>
|
||
<b>Синглетон / буль</b>: <code>bool(a)</code> = <code>{`{a}`}</code> — множество, состоящее из одного
|
||
элемента.
|
||
</li>
|
||
</ul>
|
||
|
||
<h2>Производные структуры</h2>
|
||
|
||
<ul>
|
||
<li>
|
||
<b>Множество-сумма</b>: <code>red(S1)</code> — объединение элементов всех множеств в <code>S1</code>. Операция
|
||
применима только к множествам, состоящим из множеств.
|
||
</li>
|
||
<li>
|
||
<b>Десинглетон / дебуль</b>: <code>debool({`{a}`})</code> = <code>a</code> — извлечение единственного элемента
|
||
из множества. Операция применима только к множествам с одним элементом.
|
||
</li>
|
||
<li>
|
||
<b>Малая проекция</b>: <code>pr1((a1, …, an))</code> = <code>a1</code>.
|
||
</li>
|
||
<li>
|
||
<b>Большая проекция</b>: <code>Pr1(S1)</code> — множество первых компонентов всех кортежей из <code>S1</code>.
|
||
</li>
|
||
</ul>
|
||
<p>
|
||
Индексы у операций над кортежами для упрощения отображаются равными 1, но их можно заменить на другие
|
||
натуральные числа или их последовательность, разделенная запятой.
|
||
</p>
|
||
|
||
<h2>Мультииндексы</h2>
|
||
<p>
|
||
Вместо одного индекса можно использовать <b>мультииндекс</b> — последовательность натуральных чисел через
|
||
запятую. В этом случае проекция или фильтр возвращает сразу несколько позиций кортежа.
|
||
</p>
|
||
<ul>
|
||
<li>
|
||
<code>pr1,3((a1, a2, a3, a4)) = (a1, a3)</code>
|
||
</li>
|
||
<li>
|
||
<code>Pr2,4(S1)</code> — множество пар, составленных из второй и четвёртой компонент кортежей из{' '}
|
||
<code>S1</code>.
|
||
</li>
|
||
</ul>
|
||
|
||
<h2>Фильтр</h2>
|
||
<ul>
|
||
<li>
|
||
<b>Фильтр</b>: <code>Fi1[D1](S1)</code> — подмножество <code>S1</code>, в котором для каждого элемента первая
|
||
проекция принадлежит <code>D1</code>.
|
||
</li>
|
||
<li>
|
||
К фильтру применим <b>мультииндексы</b>, тогда нужно указывать столько же параметров в квадратных скобках.
|
||
</li>
|
||
<li>
|
||
Допустимо использование мультииндексов в фильтре с одним параметром. Тогда проверяется принадлежность
|
||
параметру кортежа, составленного из соответствующих проекций элементов фильтруемого множества.
|
||
</li>
|
||
<li>
|
||
<b>Мультифильтр</b>: <code>Fi1,2[D1](S1)</code> отличается от фильтра с мультииндексом{' '}
|
||
<code>Fi1,2[Pr1(D1), Pr2(D2)](S1)</code> тем, что в первом случае проверяется принадлежность парам из D1, а во
|
||
втором — полному декартову произведению проекций D1
|
||
</li>
|
||
</ul>
|
||
|
||
<h2>Примеры</h2>
|
||
<ul>
|
||
<li>
|
||
<code>{`ℬ(2) = {{}, {1}, {2}, {1, 2}}`}</code>
|
||
</li>
|
||
<li>
|
||
<code>(1,2,3)</code> — кортеж из трёх чисел
|
||
</li>
|
||
<li>
|
||
<code>pr2((5, 4, 3, 2, 1)) = 4</code>
|
||
</li>
|
||
<li>
|
||
<code>
|
||
Pr3({`{(1, 2, 3),(4, 5, 6)}`}) = {`{3, 6}`}
|
||
</code>
|
||
</li>
|
||
<li>
|
||
<code>
|
||
red({`{{1, 2, 3},{3, 4}}`}) = {`{1, 2, 3, 4}`}
|
||
</code>
|
||
</li>
|
||
<li>
|
||
<code>bool(1) = {`{1}`}</code>, <code>debool({`{1}`}) = 1</code>
|
||
</li>
|
||
<li>
|
||
<code>{`Fi2[{2, 4}]({((1, 2), (3, 4), (5, 6))}) = {((1, 2), (3, 4))}`}</code>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
);
|
||
}
|