From 31bbf0ab848afbe2a19277b3fb5505502c7d9b17 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Thu, 16 May 2024 16:05:39 +0300 Subject: [PATCH] Update help topics --- .vscode/settings.json | 3 + .../src/components/man/HelpConcept.tsx | 5 +- .../src/components/man/HelpRSLangCorrect.tsx | 38 +++++++++++-- .../components/man/HelpRSLangInterpret.tsx | 42 ++++++++++++-- .../components/man/HelpRSLangOperations.tsx | 23 ++++++-- .../src/components/man/HelpRSLangTypes.tsx | 45 +++++++++++++-- .../frontend/src/models/miscellaneous.ts | 4 +- .../src/pages/ManualsPage/ManualsPage.tsx | 48 +--------------- .../src/pages/ManualsPage/TopicsDropdown.tsx | 11 +--- .../src/pages/ManualsPage/TopicsList.tsx | 22 +------ .../src/pages/ManualsPage/TopicsStatic.tsx | 11 +--- .../src/pages/ManualsPage/TopicsTree.tsx | 57 +++++++++++++++++-- rsconcept/frontend/src/utils/labels.ts | 4 +- 13 files changed, 202 insertions(+), 111 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index ac0882c3..52203096 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -124,10 +124,13 @@ "viewsets", "wordform", "Wordforms", + "Биективная", + "биективной", "Булеан", "Бурбаки", "Версионирование", "Десинглетон", + "интерпретируемости", "интерпретируемость", "компаратив", "конституент", diff --git a/rsconcept/frontend/src/components/man/HelpConcept.tsx b/rsconcept/frontend/src/components/man/HelpConcept.tsx index 057da580..a1f31f17 100644 --- a/rsconcept/frontend/src/components/man/HelpConcept.tsx +++ b/rsconcept/frontend/src/components/man/HelpConcept.tsx @@ -7,7 +7,10 @@ function HelpConceptSystem() { return (

Концептуализация

-

TBD

+

Сложные предметные области требуют применения специальных подходов к их пониманию и описанию. Системный подход заключается в установлении границы системы, выделении отдельных подсистем и установления связей между ними. Подсистемы описываются раздельно. Далее их описания синтезируются с учетом установленных связей. Таким образом формируется описания системы в целом через описания ее частей

+

Концептуализация заключается в дедуктивном построении концептуальных схем (систем определений), описывающих содержательные отношения в рамках каждой подсистемы. Концептуальные схемы могут быть синтезированы для получения общей системы определений в выбранной предметной области.

+

Концептуализация применяется в условиях поставленной задачи в рамках предметной области. Решаемая прикладная проблема позволяет определить границы концептуализации и разумно распределить ресурсы.

+

в ходе многократной концептуализации и решения с помощью построенных концептуальных схем прикладных задач формируется навык Концептуального мышления. Это особый способ мышления, при котором строго контролируются используемые определения и предположения, в которых происходит описание предметного содержания.

); diff --git a/rsconcept/frontend/src/components/man/HelpRSLangCorrect.tsx b/rsconcept/frontend/src/components/man/HelpRSLangCorrect.tsx index e5b1ee57..cf2d69f5 100644 --- a/rsconcept/frontend/src/components/man/HelpRSLangCorrect.tsx +++ b/rsconcept/frontend/src/components/man/HelpRSLangCorrect.tsx @@ -1,10 +1,38 @@ +import { HelpTopic } from '@/models/miscellaneous'; + +import LinkTopic from '../ui/LinkTopic'; + function HelpRSLangCorrect() { - // prettier-ignore return ( -
-

Переносимость и корректность

-

TBD

-
); +
+

Переносимость и корректность

+

+ Биективная переносимость выражений заключается в независимости значений определений от биективной замены + интерпретаций неопределяемых понятий. Она основана на принципиальной не сравнимости элементов базисных множеств. +

+

+ Проверка выражений, содержащих глобальные идентификаторы проводится в заданном глобальном контексте (известны + типизации и биективная переносимость, информация об аргументах функций). Все неизвестные идентификаторы + считаются некорректными. +

+

+ Правила проверки теоретико-множественных выражений выводятся из условия биективной переносимости предиката + принадлежности – элемент должен соответствовать множеству, для которого проверяется принадлежность. Необходимым + условием биективной переносимости является выполнение{' '} + для всех локальных и глобальных + идентификаторов. +

+

+ Логическая корректность (непротиворечивость) выражений в общем случае не может быть автоматически проверена. + Однако наличие примера интерпретации на объектах предметной области является основанием утверждения о + непротиворечивости накладываемых аксиом. +

+

+ Редактор выражений на Портале оснащен инструментами проверки выражений и вычисления их типизации. Найденные + ошибки диагностируются и выводится соответствующее сообщение об ошибке. +

+
+ ); } export default HelpRSLangCorrect; diff --git a/rsconcept/frontend/src/components/man/HelpRSLangInterpret.tsx b/rsconcept/frontend/src/components/man/HelpRSLangInterpret.tsx index e3e5bafc..1f5944e6 100644 --- a/rsconcept/frontend/src/components/man/HelpRSLangInterpret.tsx +++ b/rsconcept/frontend/src/components/man/HelpRSLangInterpret.tsx @@ -1,10 +1,42 @@ +import { HelpTopic } from '@/models/miscellaneous'; + +import LinkTopic from '../ui/LinkTopic'; + function HelpRSLangInterpret() { - // prettier-ignore return ( -
-

Интерпретируемость

-

TBD

-
); +
+

Интерпретируемость

+

+ Практическое применение концептуальным схем основано на интерпретации - соотнесении предметного + содержания и схемных терминов и определений. Для этого в соответствии с{' '} + вводятся списки объектов предметной области, + соответствующих неопределяемым понятиям. При этом обеспечивается корректность отношений{' '} + для родовых структур. +

+

+ Интерпретация производных понятий может быть задана внешними методами либо автоматически вычислена с помощью + формальных определений. При этом не всякое выражение, содержащее перебор элементов множеств, может быть + вычислено за приемлемое время. Например, интерпретация утверждения {'"∀α∈Z α>0"'} приводит к перебору + бесконечного множества целых чисел. +

+

+ Интерпретируемыми будем считать выражения, которые можно вычислить за полиномиальное время относительно + мощностей интерпретаций глобальных идентификаторов, используемых в этом выражении. По аналогии с{' '} + условия интерпретируемости могут + быть выведены из утверждения {'выражения "Z, ℬ(α)" не интерпретируемы'}. +

+

+ Также вводится категория выражений, задающих множества, которым можно принадлежность за полиномиальное время, но + нельзя вычислить полный список элемент. Например, {'"Z, D{ξ∈ℬ(X1×X1) | Pr1(ξ)=Pr2(ξ)}"'}. Конституенты, чьи + выражения удовлетворяет этому свойству, называются Неразмерными. Их можно использовать в интерпретируемых + выражениях только в конструкциях, не требующих перебора их элементах. +

+

+ Конституенты, чьи выражения не позволяют проверить принадлежность за полиномиальное время, называются{' '} + Невычислимыми. +

+
+ ); } export default HelpRSLangInterpret; diff --git a/rsconcept/frontend/src/components/man/HelpRSLangOperations.tsx b/rsconcept/frontend/src/components/man/HelpRSLangOperations.tsx index 558092d6..bc7d338f 100644 --- a/rsconcept/frontend/src/components/man/HelpRSLangOperations.tsx +++ b/rsconcept/frontend/src/components/man/HelpRSLangOperations.tsx @@ -1,10 +1,23 @@ +import { HelpTopic } from '@/models/miscellaneous'; + +import { IconTemplates } from '../Icons'; +import LinkTopic from '../ui/LinkTopic'; + function HelpRSLangOperations() { - // prettier-ignore return ( -
-

Операции над концептуальными схемами

-

TBD

-
); +
+

Операции над концептуальными схемами

+

В данном разделе поясняются различные операции над концептуальными схемами

+ +

+ Генерация из шаблона +

+

+ Данная операция позволяет вставить конституенту из{' '} + . +

+
+ ); } export default HelpRSLangOperations; diff --git a/rsconcept/frontend/src/components/man/HelpRSLangTypes.tsx b/rsconcept/frontend/src/components/man/HelpRSLangTypes.tsx index 0d55b31a..6eb6694d 100644 --- a/rsconcept/frontend/src/components/man/HelpRSLangTypes.tsx +++ b/rsconcept/frontend/src/components/man/HelpRSLangTypes.tsx @@ -1,10 +1,45 @@ function HelpRSLangTypes() { - // prettier-ignore return ( -
-

Система типов

-

TBD

-
); +
+

Типизация

+

+ Родоструктурное выражение ξ обладает типизацией (структурой), если выполнено ξ∈H, +
+ где H – корректное выражение ступени, задаваемой следующими правилами: +

  • + Xi, Ci – ступень, называемая элемент; +
  • +
  • + Z – ступень, называемая целое число; +
  • +
  • + (H1×...×Hn) – ступень, называемая кортеж арности n; +
  • +
  • + ℬ(H) – ступень, называемая множеством. +
  • +

    +

    Пустое множество ∅ имеет типизацию ℬ(R0) – множество с произвольной структурой элемента

    +

    + Для обобщения понятия типизация на логические и параметризованные выражения вводится ряд дополнительных + обозначений +

    +

    + Логические выражения (аксиомы, теоремы), принимающие значения ИСТИНА или ЛОЖЬ относятся к типизации Logic +

    +

    + Параметризованные выражения (терм-функции, предикат-функции) относятся к типизации
    + Hr 🠔 [H1, H2, ... Hi], +
    + где Hr – типизация результата, H1, ... Hi – типизации аргументов +

    +

    +

    + Шаблонные параметризованные выражения могут содержать обозначения R1, ... Ri, соответствующие произвольным + ступеням, определяемым исходя из типизации аргументов по месту использования выражения. +

    +
    + ); } export default HelpRSLangTypes; diff --git a/rsconcept/frontend/src/models/miscellaneous.ts b/rsconcept/frontend/src/models/miscellaneous.ts index 71173a25..72ed8dbf 100644 --- a/rsconcept/frontend/src/models/miscellaneous.ts +++ b/rsconcept/frontend/src/models/miscellaneous.ts @@ -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 = 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], diff --git a/rsconcept/frontend/src/pages/ManualsPage/ManualsPage.tsx b/rsconcept/frontend/src/pages/ManualsPage/ManualsPage.tsx index f552b1d1..3e14ca5a 100644 --- a/rsconcept/frontend/src/pages/ManualsPage/ManualsPage.tsx +++ b/rsconcept/frontend/src/pages/ManualsPage/ManualsPage.tsx @@ -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>( - 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 (
    - onSelectTopic(topic)} - topicFolded={topicFolded} - onFoldTopic={onFoldTopic} - /> + onSelectTopic(topic)} />
    ); diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx index 5a2f0e6b..bc05cfda 100644 --- a/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx +++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsDropdown.tsx @@ -15,12 +15,10 @@ import TopicsTree from './TopicsTree'; interface TopicsDropdownProps { activeTopic: HelpTopic; - topicFolded: Map; 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} > - + ); diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsList.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsList.tsx index e9d24004..5a3b1075 100644 --- a/rsconcept/frontend/src/pages/ManualsPage/TopicsList.tsx +++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsList.tsx @@ -8,32 +8,16 @@ import TopicsStatic from './TopicsStatic'; interface TopicsListProps { activeTopic: HelpTopic; - topicFolded: Map; 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 ( - - ); + return ; } else { - return ( - - ); + return ; } } diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx index a10b6b1c..c63b93e3 100644 --- a/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx +++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsStatic.tsx @@ -7,12 +7,10 @@ import TopicsTree from './TopicsTree'; interface TopicsStaticProps { activeTopic: HelpTopic; - topicFolded: Map; 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 (
    - +
    ); } diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx index 85ad08bb..2898c4d3 100644 --- a/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx +++ b/rsconcept/frontend/src/pages/ManualsPage/TopicsTree.tsx @@ -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; 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>( + 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 ( {Object.values(HelpTopic).map((topic, index) => { diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts index d134b651..d5b92ea4 100644 --- a/rsconcept/frontend/src/utils/labels.ts +++ b/rsconcept/frontend/src/utils/labels.ts @@ -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 'справка по управлению версиями схем';