DEV Community

Alexey Ivanensky
Alexey Ivanensky

Posted on

ТРИЗ против неоднозначности: почему знак «+» — это не просто сложение

Или: как алгебраические структуры разрешают физические противоречия в обработке текста


Введение: проблема интерпретации

Когда мы говорим: «Дай быстрый обзор + глубокий анализ», система должна выбрать между двумя противоречивыми стратегиями:

  1. Одновременность: показать оба результата параллельно (быстро, но сложно координировать)
  2. Последовательность: сначала обзор, потом анализ (медленнее, но логичнее)

Какую выбрать? Классический подход «угадай по контексту» неустойчив. ТРИЗ предлагает систематическое решение через анализ алгебраических структур.


Часть 1: Неоднозначность знака «+» в математике и информатике

1.1. Семь разных значений плюса

Один символ — множество смыслов:

Контекст Операция Коммутативность Ассоциативность Порядок важен?
Арифметика (a + b = b + a)
Множества (A \cup B = B \cup A)
Логика (p \vee q = q \vee p)
Строки "ab""ba"
Композиция функций (f \circ g \neq g \circ f)
Процессы step_1 → step_2 ≠ step_2 → step_1
Декартово произведение ((a, b) \neq (b, a))

Вывод: коммутативность не универсальна. В половине случаев порядок критичен.

1.2. Почему я ошибся в первый раз

Моя ошибка была классической: я применил первое найденное правило:

"+" → сложение → коммутативно → порядок не важен
Enter fullscreen mode Exit fullscreen mode

Но правило зависит от типа операндов, а не от символа:

ПРАВИЛЬНАЯ логика:
  TYPE(операнды) → выбрать структуру → применить свойства

МОЯ ошибка:
  СИМВОЛ → предположить структуру → ошибка типизации
Enter fullscreen mode Exit fullscreen mode

Это классическое смещение P4 (pattern→taxonomy→counter в ТРИЗ).


Часть 2: ТРИЗ-подход к разрешению противоречия

2.1. Выявление физического противоречия (P7)

Фраза «быстрый обзор + глубокий анализ» содержит противоречие:

Требование A: быстро   (минимизировать время)
Требование B: глубоко  (максимизировать полноту)

Физическое противоречие: A ∧ ¬A
  → нужно быть быстрым И полным одновременно
Enter fullscreen mode Exit fullscreen mode

Это не семантическое противоречие (как неоднозначность слова). Это физическое противоречие в смысле ТРИЗ:

Один параметр должен находиться в двух противоположных состояниях одновременно.


2.2. Четыре разделения ТРИЗ (P8)

ТРИЗ предлагает четыре способа разделения физических противоречий. Для нашего случая подходят все четыре:

1️⃣ Разделение по ВРЕМЕНИ

Противоречие: быстро ∧ глубоко
Решение: фазировать процесс
  Фаза 1 (0-2 сек): быстрый обзор
  Фаза 2 (2-10 сек): глубокий анализ
  → Каждая фаза оптимальна для своего требования
Enter fullscreen mode Exit fullscreen mode

Математическое описание:

Результат := обзор(t₁) ∘ анализ(t₂)
где ∘ — композиция операций (некоммутативна!)
Enter fullscreen mode Exit fullscreen mode

2️⃣ Разделение по ЧАСТИ/ЦЕЛОМУ

Противоречие: система должна быть быстрой И глубокой
Решение: разные части для разных требований
  Часть 1: Primary ответ (быстрый, 80% время)
  Часть 2: Alternatives (глубокий, 20% время)
  → Дополнение результата без замены
Enter fullscreen mode Exit fullscreen mode

Структура:

Результат := Primary(fast) ⊕ Alternatives(deep)
где ⊕ — прямая сумма в абелевой группе
Enter fullscreen mode Exit fullscreen mode

3️⃣ Разделение по УСЛОВИЮ

Противоречие: неясно, что нужно
Решение: адаптивная стратегия
  IF контекст = "срочность" THEN быстро
  IF контекст = "исследование" THEN глубоко
  → Условное выполнение
Enter fullscreen mode Exit fullscreen mode

4️⃣ Разделение по УРОВНЮ СИСТЕМЫ

Противоречие: какой уровень отвечает за быстроту?
Решение: распределить по уровням
  Микро (инструменты): search_web (параллельно)
  Мезо (процесс): фазирование (асинхронно)
  Макро (интеграция): кэширование (ускорение)
Enter fullscreen mode Exit fullscreen mode

2.3. Почему разделение по времени — оптимально

Среди четырёх разделений, разделение по времени минимизирует идеальность (в смысле ТРИЗ):

Идеальность F = Функциональность / (Стоимость + Вред)
Enter fullscreen mode Exit fullscreen mode

Для нашего случая:

Стратегия Функция Стоимость Вред Идеальность
Одновременно 2.0 2.0 (сложность) 1.0 (конфликт) 0.67
Временное разделение 2.0 1.0 (фазирование) 0.0 2.0
Пространственное 2.0 1.5 (модули) 0.5 (зависимости) 1.0
Условное 2.0 1.2 (логика) 0.3 (неопределённость) 1.4

Вывод: временное разделение — оптимально.


Часть 3: Алгебраическая классификация

3.1. Теория множеств: где живут разные плюсы

В теории множеств существует три основные операции:

1. ОБЪЕДИНЕНИЕ (∪) — коммутативно
   A ∪ B = B ∪ A
   Смысл: "или A, или B, или оба"
   Пример: {быстрый, глубокий} = {глубокий, быстрый}

2. КОМПОЗИЦИЯ (∘) — НЕ коммутативно
   f ∘ g ≠ g ∘ f (в общем случае)
   Смысл: "сначала g, потом f"
   Пример: обзор ∘ анализ ≠ анализ ∘ обзор

3. КОНКАТЕНАЦИЯ (⊕) — НЕ коммутативно
   s₁ ⊕ s₂ ≠ s₂ ⊕ s₁
   Смысл: "приписать s₂ к s₁"
   Пример: "Primary" ⊕ "Alternatives" ≠ "Alternatives" ⊕ "Primary"
Enter fullscreen mode Exit fullscreen mode

3.2. Как выбрать правильную операцию?

Используем типизацию (P3_ALGO в ТРИЗ):

TYPE_OF(операнды) → STRUCTURE → PROPERTIES → STRATEGY

Пример для "обзор + анализ":

  ├─ Если TYPE = МНОЖЕСТВО ТРЕБОВАНИЙ
  │  └─ STRUCTURE: объединение ∪
  │     СВОЙСТВА: коммутативно, идемпотентно
  │     СТРАТЕГИЯ: параллель/асинхрон
  │
  └─ Если TYPE = ПРОЦЕСС
     └─ STRUCTURE: композиция ∘
        СВОЙСТВА: некоммутативно, ассоциативно
        СТРАТЕГИЯ: последовательность (DAG)
Enter fullscreen mode Exit fullscreen mode

Ключ — КОНТЕКСТ! Одна фраза, два смысла в зависимости от типизации.


Часть 4: Применение в системах обработки текста и AI

4.1. Проблема в LLM

Современные LLM обучены на коммутативных структурах (математика, логика):

Данные обучения:
  • "2 + 3 = 5" (коммутативно)
  • "правда ИЛИ ложь" (коммутативно)
  • "множество {a, b}" (коммутативно)
Enter fullscreen mode Exit fullscreen mode

Но не достаточно на некоммутативных:

Недостаток:
  • "обзор → анализ" (процессный порядок)
  • "поиск; обработка; вывод" (композиция операций)
  • "Primary + Alternatives" (формат вывода)
Enter fullscreen mode Exit fullscreen mode

Результат: модель применяет коммутативное правило по умолчанию, даже когда контекст требует некоммутативности.

4.2. Решение: семантическая типизация перед интерпретацией

ПРОТОКОЛ (исправленный):

  1. ВЫЯВИТЬ тип операнда (требование vs процесс vs формат)
  2. ВЫБРАТЬ структуру (∪ vs ∘ vs ⊕)
  3. ПРОВЕРИТЬ свойства (коммутативность, ассоциативность)
  4. ПРИМЕНИТЬ стратегию (параллель vs последовательность)

Псевдокод:
Enter fullscreen mode Exit fullscreen mode


python
def interpret_plus_operator(expr, context):
operand_type = classify(expr) # требование / процесс / формат

  if operand_type == "requirement":
      structure = UNION  # ∪ — коммутативно
      strategy = "parallel"
  elif operand_type == "process":
      structure = COMPOSITION  # ∘ — некоммутативно
      strategy = "sequential_dag"
  elif operand_type == "format":
      structure = CONCATENATION  # ⊕ — некоммутативно
      strategy = "ordered_output"

  return apply_strategy(strategy)
Enter fullscreen mode Exit fullscreen mode

Enter fullscreen mode Exit fullscreen mode

Часть 5: Связь с ТРИЗ-матрицей противоречий

5.1. Как это связано с 40 принципами ТРИЗ?

Противоречие «быстро vs полно» в матрице противоречий ТРИЗ:


Улучшаемый параметр:    Скорость (параметр 9)
Ухудшаемый параметр:    Полнота информации (параметр 27, "Надёжность")

Рекомендованные принципы:

1. Принцип 7 (Вложение): встроить анализ в обзор
2. Принцип 14 (Сфероидальность): переходить от обзора к анализу
3. Принцип 3 (Извлечение): часть ответа иногда достаточна
4. Принцип 25 (Самообслуживание): пользователь выбирает глубину

Enter fullscreen mode Exit fullscreen mode

Но ТРИЗ-матрица статична. Наше решение динамично: мы используем разделения для автоматического выбора.

5.2. 8 Законов эволюции систем

Наше решение также соответствует закону «Увеличение степени идеальности»:


До (конфликт):
  Система: быстро ∨ глубоко (выбирай одно)
  Идеальность: низкая (жертва функцией или скоростью)

После (разделение):
  Система: быстро ∧ глубоко (фазировано)
  Идеальность: высокая (обе функции, без жертв)

Enter fullscreen mode Exit fullscreen mode

Часть 6: Практический пример — реальная система

6.1. Как это реализуется в нашей системе (v27.0)

Архитектура описана в P7_CONTRA (выявление противоречий):


Запрос: "Дай быстрый обзор + глубокий анализ"

├─ P1_GOAL: Измерить прогресс
│  └─ progress = (current - baseline) / (goal - baseline)
│
├─ P3_ALGO: Построить DAG операций
│  ├─ Node 1: search_web (параллельно, 3 источника)
│  ├─ Node 2: execute_python (обработка, 1-2 сек)
│  └─ Node 3: create_chart (визуализация, асинхронно)
│
├─ P7_CONTRA: Выявить противоречие
│  └─ ПРОТИВОРЕЧИЕ найдено: быстро ∧ полно
│
└─ P8_TRIZ: Применить разделение
   └─ Стратегия: временное разделение
      Phase 1 (0-2 сек): Primary ответ (быстро)
      Phase 2 (2-10 сек): Alternatives (полно)
      Phase 3 (async): Visualization (красиво)

Enter fullscreen mode Exit fullscreen mode

6.2. Результат — иерархия ответов


[0-2 сек]  Primary(fast, conf=0.85)
           "Ответ: X с этой уверенностью"

[2-5 сек]  Alternative 1 (deeper, sources=[1,2,3])
           "Альтернатива: Y, потому что..."

[5-10 сек] Alternative 2 (alternative_angle)
           "Ещё точка зрения: Z..."

[async]    Chart / Visualization
           [диаграмма загружается]

Enter fullscreen mode Exit fullscreen mode

Пользователь не ждёт полного анализа, но видит результаты постепенно с повышающейся глубиной.


Часть 7: Проверка через контрпримеры

7.1. Когда противоречие требует другого разделения?

Сценарий 1: анализ не зависит от обзора


Запрос: "Дай обзор рынка + анализ конкурентов"

Выявление: Эти анализы независимы!
  → TYPE = "parallel tasks"
  → STRUCTURE = ∪ (объединение)
  → КОММУТАТИВНО: обзор + анализ = анализ + обзор
  → СТРАТЕГИЯ: параллельно (оба одновременно)

Результат: обзор и анализ запускаются ПАРАЛЛЕЛЬНО

Enter fullscreen mode Exit fullscreen mode

Сценарий 2: анализ зависит от обзора


Запрос: "Дай обзор рынка + детальный анализ рынка"

Выявление: Анализ требует результатов обзора!
  → TYPE = "dependent pipeline"
  → STRUCTURE = ∘ (композиция)
  → НЕ КОММУТАТИВНО: обзор ∘ анализ ≠ анализ ∘ обзор
  → СТРАТЕГИЯ: последовательно (обзор → анализ)

Результат: обзор СНАЧАЛА, потом анализ на его основе

Enter fullscreen mode Exit fullscreen mode

Правило: если данные вытекают из одного в другое — используй композицию (∘). Если независимы — используй объединение (∪).


Часть 8: Выводы и рекомендации

8.1. Ключные выводы

  1. Коммутативность — частный случай, не правило по умолчанию

    • Половина алгебраических структур её не имеют
  2. Контекст определяет алгебру, не наоборот

    • Один символ "+" — множество значений
    • Типизация операндов → выбор структуры
  3. ТРИЗ разделения — универсальный метод

    • Физические противоречия разрешаются через разделение
    • Четыре разделения охватывают все случаи
  4. Временное разделение — оптимально для процессов

    • Идеальность выше, чем при одновременности
    • Асинхронность позволяет показывать результаты по мере готовности

8.2. Рекомендации для AI-систем


DO:
  ✓ Типизировать операнды перед интерпретацией оператора
  ✓ Проверить коммутативность ЯВНО для контекста
  ✓ Применить P7_CONTRA (выявление противоречий)
  ✓ При физ. противоречии → P8_TRIZ (четыре разделения)
  ✓ Выбрать стратегию на основе идеальности

DON'T:
  ✗ Предполагать коммутативность по умолчанию
  ✗ Использовать первую найденную структуру
  ✗ Игнорировать порядок операций
  ✗ Смешивать требования и процессы в один анализ

Enter fullscreen mode Exit fullscreen mode

Заключение: от символа к смыслу

Простой знак «+» раскрывает глубокие вопросы:

  • Что значит этот символ в данном контексте?
  • Какую алгебру он представляет?
  • Какое противоречие скрывается за требованием?
  • Как его разрешить оптимально?

ТРИЗ предоставляет систематический ответ на каждый вопрос. Вместо того, чтобы гадать по контексту, мы типизируем, анализируем структуру, выявляем противоречия и применяем разделения.

Результат: система, которая понимает не просто текст, а смысл — и действует оптимально.


TL;DR: LLM применяют коммутативное правило по умолчанию для «+», но половина контекстов требует некоммутативности. ТРИЗ решает это через выявление физических противоречий и применение четырёх разделений. Результат: более умная интерпретация и оптимальные стратегии.

Top comments (0)