Update help topics

This commit is contained in:
IRBorisov 2024-05-16 16:05:39 +03:00
parent 62e30d474b
commit 31bbf0ab84
13 changed files with 202 additions and 111 deletions

View File

@ -124,10 +124,13 @@
"viewsets",
"wordform",
"Wordforms",
"Биективная",
"биективной",
"Булеан",
"Бурбаки",
"Версионирование",
"Десинглетон",
"интерпретируемости",
"интерпретируемость",
"компаратив",
"конституент",

View File

@ -7,7 +7,10 @@ function HelpConceptSystem() {
return (
<div>
<h1>Концептуализация</h1>
<p>TBD</p>
<p>Сложные предметные области требуют применения специальных подходов к их пониманию и описанию. <b>Системный подход</b> заключается в установлении границы системы, выделении отдельных подсистем и установления связей между ними. Подсистемы описываются раздельно. Далее их описания синтезируются с учетом установленных связей. Таким образом формируется описания системы в целом через описания ее частей</p>
<p><b>Концептуализация</b> заключается в дедуктивном построении концептуальных схем (систем определений), описывающих содержательные отношения в рамках каждой подсистемы. Концептуальные схемы могут быть синтезированы для получения общей системы определений в выбранной предметной области.</p>
<p>Концептуализация применяется в условиях поставленной задачи в рамках предметной области. Решаемая прикладная проблема позволяет определить границы концептуализации и разумно распределить ресурсы.</p>
<p>в ходе многократной концептуализации и решения с помощью построенных концептуальных схем прикладных задач формируется навык <b>Концептуального мышления</b>. Это особый способ мышления, при котором строго контролируются используемые определения и предположения, в которых происходит описание предметного содержания.</p>
<Subtopics headTopic={HelpTopic.CONCEPTUAL} />
</div>);

View File

@ -1,10 +1,38 @@
import { HelpTopic } from '@/models/miscellaneous';
import LinkTopic from '../ui/LinkTopic';
function HelpRSLangCorrect() {
// prettier-ignore
return (
<div>
<h1>Переносимость и корректность</h1>
<p>TBD</p>
</div>);
<div className='text-justify'>
<h1>Переносимость и корректность</h1>
<p>
<b>Биективная переносимость выражений</b> заключается в независимости значений определений от биективной замены
интерпретаций неопределяемых понятий. Она основана на принципиальной не сравнимости элементов базисных множеств.
</p>
<p>
Проверка выражений, содержащих глобальные идентификаторы проводится в заданном глобальном контексте (известны
типизации и биективная переносимость, информация об аргументах функций). Все неизвестные идентификаторы
считаются некорректными.
</p>
<p>
Правила проверки теоретико-множественных выражений выводятся из условия биективной переносимости предиката
принадлежности элемент должен соответствовать множеству, для которого проверяется принадлежность. Необходимым
условием биективной переносимости является выполнение{' '}
<LinkTopic text='соотношения типизации' topic={HelpTopic.RSL_TYPES} /> для всех локальных и глобальных
идентификаторов.
</p>
<p>
Логическая корректность (непротиворечивость) выражений в общем случае не может быть автоматически проверена.
Однако наличие примера интерпретации на объектах предметной области является основанием утверждения о
непротиворечивости накладываемых аксиом.
</p>
<p>
Редактор выражений на Портале оснащен инструментами проверки выражений и вычисления их типизации. Найденные
ошибки диагностируются и выводится соответствующее сообщение об ошибке.
</p>
</div>
);
}
export default HelpRSLangCorrect;

View File

@ -1,10 +1,42 @@
import { HelpTopic } from '@/models/miscellaneous';
import LinkTopic from '../ui/LinkTopic';
function HelpRSLangInterpret() {
// prettier-ignore
return (
<div>
<h1>Интерпретируемость</h1>
<p>TBD</p>
</div>);
<div className='text-justify'>
<h1>Интерпретируемость</h1>
<p>
Практическое применение концептуальным схем основано на <b>интерпретации</b> - соотнесении предметного
содержания и схемных терминов и определений. Для этого в соответствии с{' '}
<LinkTopic text='конвенциями' topic={HelpTopic.CC_CONSTITUENTA} /> вводятся списки объектов предметной области,
соответствующих неопределяемым понятиям. При этом обеспечивается корректность отношений{' '}
<LinkTopic text='типизации' topic={HelpTopic.RSL_TYPES} /> для родовых структур.
</p>
<p>
Интерпретация производных понятий может быть задана внешними методами либо автоматически вычислена с помощью
формальных определений. При этом не всякое выражение, содержащее перебор элементов множеств, может быть
вычислено за приемлемое время. Например, интерпретация утверждения {'"∀α∈Z α>0"'} приводит к перебору
бесконечного множества целых чисел.
</p>
<p>
<b>Интерпретируемыми</b> будем считать выражения, которые можно вычислить за полиномиальное время относительно
мощностей интерпретаций глобальных идентификаторов, используемых в этом выражении. По аналогии с{' '}
<LinkTopic text='биективной переносимостью' topic={HelpTopic.RSL_CORRECT} /> условия интерпретируемости могут
быть выведены из утверждения {'выражения "Z, (α)" не интерпретируемы'}.
</p>
<p>
Также вводится категория выражений, задающих множества, которым можно принадлежность за полиномиальное время, но
нельзя вычислить полный список элемент. Например, {'"Z, D{ξ∈ℬ(X1×X1) | Pr1(ξ)=Pr2(ξ)}"'}. Конституенты, чьи
выражения удовлетворяет этому свойству, называются <b>Неразмерными</b>. Их можно использовать в интерпретируемых
выражениях только в конструкциях, не требующих перебора их элементах.
</p>
<p>
Конституенты, чьи выражения не позволяют проверить принадлежность за полиномиальное время, называются{' '}
<b>Невычислимыми</b>.
</p>
</div>
);
}
export default HelpRSLangInterpret;

View File

@ -1,10 +1,23 @@
import { HelpTopic } from '@/models/miscellaneous';
import { IconTemplates } from '../Icons';
import LinkTopic from '../ui/LinkTopic';
function HelpRSLangOperations() {
// prettier-ignore
return (
<div>
<h1>Операции над концептуальными схемами</h1>
<p>TBD</p>
</div>);
<div>
<h1>Операции над концептуальными схемами</h1>
<p>В данном разделе поясняются различные операции над концептуальными схемами</p>
<h2>
<IconTemplates size='1.25rem' className='inline-icon' /> Генерация из шаблона
</h2>
<p>
Данная операция позволяет вставить конституенту из{' '}
<LinkTopic text='шаблона выражения' topic={HelpTopic.RSL_TEMPLATES} />.
</p>
</div>
);
}
export default HelpRSLangOperations;

View File

@ -1,10 +1,45 @@
function HelpRSLangTypes() {
// prettier-ignore
return (
<div>
<h1>Система типов</h1>
<p>TBD</p>
</div>);
<div>
<h1>Типизация</h1>
<p>
Родоструктурное выражение <b>ξ</b> обладает типизацией (структурой), если выполнено ξH,
<br />
где <b>H</b> корректное выражение <b>ступени</b>, задаваемой следующими правилами:
<li>
Xi, Ci ступень, называемая <b>элемент</b>;
</li>
<li>
Z ступень, называемая <b>целое число</b>;
</li>
<li>
(H1×...×Hn) ступень, называемая <b>кортеж арности n</b>;
</li>
<li>
(H) ступень, называемая <b>множеством</b>.
</li>
</p>
<p>Пустое множество имеет типизацию (R0) множество с произвольной структурой элемента</p>
<p>
Для обобщения понятия типизация на логические и параметризованные выражения вводится ряд дополнительных
обозначений
</p>
<p>
Логические выражения (аксиомы, теоремы), принимающие значения ИСТИНА или ЛОЖЬ относятся к типизации <b>Logic</b>
</p>
<p>
Параметризованные выражения (терм-функции, предикат-функции) относятся к типизации <br />
Hr 🠔 [H1, H2, ... Hi],
<br />
где Hr типизация результата, H1, ... Hi типизации аргументов
</p>
<p></p>
<p>
Шаблонные параметризованные выражения могут содержать обозначения R1, ... Ri, соответствующие произвольным
ступеням, определяемым исходя из типизации аргументов по месту использования выражения.
</p>
</div>
);
}
export default HelpRSLangTypes;

View File

@ -62,8 +62,8 @@ export enum HelpTopic {
RSL_TYPES = 'rslang-types',
RSL_CORRECT = 'rslang-correctness',
RSL_INTERPRET = 'rslang-interpretation',
RSL_TEMPLATES = 'rslang-templates',
RSL_OPERATIONS = 'rslang-operations',
RSL_TEMPLATES = 'rslang-templates',
TERM_CONTROL = 'terminology-control',
VERSIONS = 'versions',
@ -96,8 +96,8 @@ export const topicParent: Map<HelpTopic, HelpTopic> = new Map([
[HelpTopic.RSL_TYPES, HelpTopic.RSLANG],
[HelpTopic.RSL_CORRECT, HelpTopic.RSLANG],
[HelpTopic.RSL_INTERPRET, HelpTopic.RSLANG],
[HelpTopic.RSL_TEMPLATES, HelpTopic.RSLANG],
[HelpTopic.RSL_OPERATIONS, HelpTopic.RSLANG],
[HelpTopic.RSL_TEMPLATES, HelpTopic.RSLANG],
[HelpTopic.TERM_CONTROL, HelpTopic.TERM_CONTROL],
[HelpTopic.VERSIONS, HelpTopic.VERSIONS],

View File

@ -1,12 +1,12 @@
'use client';
import { useCallback, useState } from 'react';
import { useCallback } from 'react';
import { urls } from '@/app/urls';
import { useConceptNavigation } from '@/context/NavigationContext';
import { useConceptOptions } from '@/context/OptionsContext';
import useQueryStrings from '@/hooks/useQueryStrings';
import { HelpTopic, topicParent } from '@/models/miscellaneous';
import { HelpTopic } from '@/models/miscellaneous';
import TopicsList from './TopicsList';
import ViewTopic from './ViewTopic';
@ -15,45 +15,8 @@ function ManualsPage() {
const router = useConceptNavigation();
const query = useQueryStrings();
const activeTopic = (query.get('topic') || HelpTopic.MAIN) as HelpTopic;
const [topicFolded, setFolded] = useState<Map<HelpTopic, boolean>>(
new Map(
Object.values(HelpTopic).map(value => {
const topic = value as HelpTopic;
return [
topic,
topicParent.get(activeTopic) !== topic && topicParent.get(topicParent.get(activeTopic)!) !== topic
];
})
)
);
const { mainHeight } = useConceptOptions();
const onFoldTopic = useCallback(
(target: HelpTopic, showChildren: boolean) => {
if (topicFolded.get(target) === !showChildren) {
return;
}
setFolded(
new Map(
Object.values(HelpTopic).map(value => {
const topic = value as HelpTopic;
if (topic === target) {
return [topic, !showChildren];
}
if (
!showChildren &&
(topicParent.get(topic) === target || topicParent.get(topicParent.get(topic)!) === target)
) {
return [topic, true];
}
const oldValue = topicFolded.get(topic)!;
return [topic, oldValue];
})
)
);
},
[topicFolded]
);
const onSelectTopic = useCallback(
(newTopic: HelpTopic) => {
@ -64,12 +27,7 @@ function ManualsPage() {
return (
<div className='flex w-full gap-2' style={{ minHeight: mainHeight }}>
<TopicsList
activeTopic={activeTopic}
onChangeTopic={topic => onSelectTopic(topic)}
topicFolded={topicFolded}
onFoldTopic={onFoldTopic}
/>
<TopicsList activeTopic={activeTopic} onChangeTopic={topic => onSelectTopic(topic)} />
<ViewTopic topic={activeTopic} />
</div>
);

View File

@ -15,12 +15,10 @@ import TopicsTree from './TopicsTree';
interface TopicsDropdownProps {
activeTopic: HelpTopic;
topicFolded: Map<HelpTopic, boolean>;
onChangeTopic: (newTopic: HelpTopic) => void;
onFoldTopic: (target: HelpTopic, showChildren: boolean) => void;
}
function TopicsDropdown({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: TopicsDropdownProps) {
function TopicsDropdown({ activeTopic, onChangeTopic }: TopicsDropdownProps) {
const menu = useDropdown();
const { noNavigation, calculateHeight } = useConceptOptions();
@ -67,12 +65,7 @@ function TopicsDropdown({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }
animate={menu.isOpen ? 'open' : 'closed'}
variants={animateSlideLeft}
>
<TopicsTree
activeTopic={activeTopic}
onChangeTopic={selectTheme}
topicFolded={topicFolded}
onFoldTopic={onFoldTopic}
/>
<TopicsTree activeTopic={activeTopic} onChangeTopic={selectTheme} />
</motion.div>
</div>
);

View File

@ -8,32 +8,16 @@ import TopicsStatic from './TopicsStatic';
interface TopicsListProps {
activeTopic: HelpTopic;
topicFolded: Map<HelpTopic, boolean>;
onChangeTopic: (newTopic: HelpTopic) => void;
onFoldTopic: (target: HelpTopic, showChildren: boolean) => void;
}
function TopicsList({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: TopicsListProps) {
function TopicsList({ activeTopic, onChangeTopic }: TopicsListProps) {
const size = useWindowSize();
if (!size.isSmall) {
return (
<TopicsStatic
activeTopic={activeTopic}
onChangeTopic={onChangeTopic}
topicFolded={topicFolded}
onFoldTopic={onFoldTopic}
/>
);
return <TopicsStatic activeTopic={activeTopic} onChangeTopic={onChangeTopic} />;
} else {
return (
<TopicsDropdown
activeTopic={activeTopic}
onChangeTopic={onChangeTopic}
topicFolded={topicFolded}
onFoldTopic={onFoldTopic}
/>
);
return <TopicsDropdown activeTopic={activeTopic} onChangeTopic={onChangeTopic} />;
}
}

View File

@ -7,12 +7,10 @@ import TopicsTree from './TopicsTree';
interface TopicsStaticProps {
activeTopic: HelpTopic;
topicFolded: Map<HelpTopic, boolean>;
onChangeTopic: (newTopic: HelpTopic) => void;
onFoldTopic: (target: HelpTopic, showChildren: boolean) => void;
}
function TopicsStatic({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: TopicsStaticProps) {
function TopicsStatic({ activeTopic, onChangeTopic }: TopicsStaticProps) {
const { calculateHeight } = useConceptOptions();
return (
<div
@ -27,12 +25,7 @@ function TopicsStatic({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }:
)}
style={{ maxHeight: calculateHeight('2.25rem + 2px') }}
>
<TopicsTree
activeTopic={activeTopic}
onChangeTopic={onChangeTopic}
topicFolded={topicFolded}
onFoldTopic={onFoldTopic}
/>
<TopicsTree activeTopic={activeTopic} onChangeTopic={onChangeTopic} />
</div>
);
}

View File

@ -2,7 +2,7 @@
import clsx from 'clsx';
import { AnimatePresence, motion } from 'framer-motion';
import { useCallback } from 'react';
import { useCallback, useLayoutEffect, useState } from 'react';
import { IconDropArrow, IconPageRight } from '@/components/Icons';
import { CProps } from '@/components/props';
@ -15,12 +15,60 @@ import { describeHelpTopic, labelHelpTopic } from '@/utils/labels';
interface TopicsTreeProps {
activeTopic: HelpTopic;
topicFolded: Map<HelpTopic, boolean>;
onChangeTopic: (newTopic: HelpTopic) => void;
onFoldTopic: (target: HelpTopic, showChildren: boolean) => void;
}
function TopicsTree({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: TopicsTreeProps) {
function TopicsTree({ activeTopic, onChangeTopic }: TopicsTreeProps) {
const [topicFolded, setFolded] = useState<Map<HelpTopic, boolean>>(
new Map(
Object.values(HelpTopic).map(value => {
const topic = value as HelpTopic;
return [topic, true];
})
)
);
useLayoutEffect(() => {
setFolded(
new Map(
Object.values(HelpTopic).map(value => {
const topic = value as HelpTopic;
return [
topic,
topicParent.get(activeTopic) !== topic && topicParent.get(topicParent.get(activeTopic)!) !== topic
];
})
)
);
}, [activeTopic]);
const onFoldTopic = useCallback(
(target: HelpTopic, showChildren: boolean) => {
if (topicFolded.get(target) === !showChildren) {
return;
}
setFolded(
new Map(
Object.values(HelpTopic).map(value => {
const topic = value as HelpTopic;
if (topic === target) {
return [topic, !showChildren];
}
if (
!showChildren &&
(topicParent.get(topic) === target || topicParent.get(topicParent.get(topic)!) === target)
) {
return [topic, true];
}
const oldValue = topicFolded.get(topic)!;
return [topic, oldValue];
})
)
);
},
[topicFolded]
);
const handleClickFold = useCallback(
(event: CProps.EventMouse, topic: HelpTopic, showChildren: boolean) => {
event.preventDefault();
@ -29,6 +77,7 @@ function TopicsTree({ activeTopic, topicFolded, onChangeTopic, onFoldTopic }: To
},
[onFoldTopic]
);
return (
<AnimatePresence initial={false}>
{Object.values(HelpTopic).map((topic, index) => {

View File

@ -378,8 +378,8 @@ export function labelHelpTopic(topic: HelpTopic): string {
case HelpTopic.RSL_TYPES: return 'Типизация';
case HelpTopic.RSL_CORRECT: return 'Переносимость';
case HelpTopic.RSL_INTERPRET: return 'Интерпретируемость';
case HelpTopic.RSL_TEMPLATES: return 'Шаблоны выражений';
case HelpTopic.RSL_OPERATIONS: return 'Операции';
case HelpTopic.RSL_TEMPLATES: return 'Шаблоны выражений';
case HelpTopic.TERM_CONTROL: return 'Терминологизация';
case HelpTopic.VERSIONS: return 'Версионирование';
@ -415,8 +415,8 @@ export function describeHelpTopic(topic: HelpTopic): string {
case HelpTopic.RSL_TYPES: return 'система типов в родоструктурной экспликации';
case HelpTopic.RSL_CORRECT: return 'корректность и переносимость определений';
case HelpTopic.RSL_INTERPRET: return 'интерпретация формальных определений';
case HelpTopic.RSL_TEMPLATES: return 'работа с шаблонными выражениями';
case HelpTopic.RSL_OPERATIONS: return 'операции над концептуальными схемами';
case HelpTopic.RSL_TEMPLATES: return 'работа с шаблонными выражениями';
case HelpTopic.TERM_CONTROL: return 'справка по контролю терминов и текстовым отсылкам';
case HelpTopic.VERSIONS: return 'справка по управлению версиями схем';