doc/METAMODEL/PROCESS/EPC/epc2_set-theory.md
2025-10-16 17:59:41 +03:00

419 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### EPC2 set-theory
см. https://github.com/bpmbpm/doc/blob/main/METAMODEL/PROCESS/EPC/epc_set-theory.md
## I Описание бизнес-процесса в формализме теории множеств
### 1. Базовые множества
**Универсум объектов процесса:**
```
U = {Событие1, Операция1, Событие2, Событие3, Документ1, Документ2, Документ3}
```
**Множество типов объектов:**
```
T = {Event, Function, Document}
```
### 2. Множества объектов по типам
**Множество событий:**
```
E = {x ∈ U | тип(x) = Event} = {Событие1, Событие2, Событие3}
```
**Множество функций:**
```
F = {x ∈ U | тип(x) = Function} = {Операция1}
```
**Множество документов:**
```
D = {x ∈ U | тип(x) = Document} = {Документ1, Документ2, Документ3}
```
### 3. Функция типизации
**Функция, сопоставляющая объекту его тип:**
```
тип: U → T
тип(Событие1) = Event
тип(Операция1) = Function
тип(Событие2) = Event
тип(Событие3) = Event
тип(Документ1) = Document
тип(Документ2) = Document
тип(Документ3) = Document
```
### 4. Отношения между объектами
**Отношение "вызывается":**
```
R_trigger = {(e, f) ∈ E × F | e вызывает f} = {(Событие1, Операция1)}
```
**Отношение "приводит к событию":**
```
R_produces_event = {(f, e) ∈ F × E | f приводит к e}
= {(Операция1, Событие2), (Операция1, Событие3)}
```
**Отношение "использует как вход":**
```
R_input = {(d, f) ∈ D × F | d является входом для f} = {(Документ1, Операция1)}
```
**Отношение "создает документ":**
```
R_creates = {(f, d) ∈ F × D | f создает d}
= {(Операция1, Документ2), (Операция1, Документ3)}
```
**Отношение "подтверждает":**
```
R_validates = {(e, d) ∈ E × D | e подтверждает d} = {(Событие2, Документ2)}
```
**Отношение "отклоняет":**
```
R_invalidates = {(e, d) ∈ E × D | e отклоняет d} = {(Событие3, Документ3)}
```
### 5. Множество статусов документов
**Множество возможных статусов:**
```
S = {НОВЫЙ, УТВЕРЖДЁН, ОТКЛОНЁН}
```
**Функция статусов документов:**
```
статус: D → S
статус(Документ1) = НОВЫЙ
статус(Документ2) = УТВЕРЖДЁН
статус(Документ3) = ОТКЛОНЁН
```
### 6. Отношения принадлежности к процессам
**Множество процессов:**
```
P = {Workflow, Docflow}
```
**Отношение принадлежности к Workflow:**
```
R_workflow = {(x, Workflow) | x ∈ {Событие1, Операция1, Событие2, Событие3}}
= {(Событие1, Workflow), (Операция1, Workflow),
(Событие2, Workflow), (Событие3, Workflow)}
```
**Отношение принадлежности к Docflow:**
```
R_docflow = {(x, Docflow) | x ∈ {Документ1, Операция1, Документ2, Документ3}}
= {(Документ1, Docflow), (Операция1, Docflow),
окумент2, Docflow), (Документ3, Docflow)}
```
### 7. Отношение альтернативных исходов
**Отношение взаимоисключения документов:**
```
R_mutually_exclusive = {(Документ2, Документ3)}
```
**Отношение взаимоисключения событий:**
```
R_mutually_exclusive_events = {(Событие2, Событие3)}
```
### 8. Функция условий выполнения
**Функция условий для событий:**
```
условие: E → C (где C - множество условий)
условие(Событие2) = "заявление соответствует требованиям"
условие(Событие3) = "заявление не соответствует требованиям"
```
### 9. Полная модель процесса
**Процесс как алгебраическая структура:**
```
Process_Algebra = ⟨U, T, E, F, D, P, S, C,
R_trigger, R_produces_event, R_input, R_creates,
R_validates, R_invalidates, R_workflow, R_docflow,
R_mutually_exclusive, R_mutually_exclusive_events,
тип, статус, условие⟩
```
### 10. Свойства модели
**Свойство целостности:**
```
∀f ∈ F, ∃e ∈ E: (e, f) ∈ R_trigger (каждая функция имеет триггер)
∀d ∈ D \ {Документ1}, ∃f ∈ F: (f, d) ∈ R_creates (все документы кроме входного создаются функциями)
```
**Свойство непротиворечивости статусов:**
```
∀d ∈ D: (статус(d) = УТВЕРЖДЁН) ⇒ ∃e ∈ E: (e, d) ∈ R_validates
∀d ∈ D: (статус(d) = ОТКЛОНЁН) ⇒ ∃e ∈ E: (e, d) ∈ R_invalidates
```
**Свойство взаимоисключения:**
```
∀(d1, d2) ∈ R_mutually_exclusive: статус(d1) ≠ статус(d2)
∀(e1, e2) ∈ R_mutually_exclusive_events: ¬(∃f ∈ F: (f, e1) ∈ R_produces_event ∧ (f, e2) ∈ R_produces_event)
```
Данная формализация в теории множеств полностью описывает структуру бизнес-процесса, включая все объекты, отношения между ними, статусы документов, условия выполнения и свойства целостности модели.
## II Часть
## Формальное выражение связи между множествами событий и документов
### 1. Базовая структура множеств
**Множество событий:**
```
E = {e | e - событие}
```
**Множество документов:**
```
D = {d | d - документ}
```
**Множество типов событий:**
```
T_E = {t | t - тип события}
```
**Множество типов документов:**
```
T_D = {t | t - тип документа}
```
### 2. Функции типизации
**Функция типа события:**
```
тип_E: E → T_E
```
**Функция типа документа:**
```
тип_D: D → T_D
```
### 3. Отношение связи событий и документов
**Общее отношение связи:**
```
R ⊆ E × D × A
```
где A - множество типов связей (подтверждает, отклоняет, создает, и т.д.)
### 4. Конкретизация для случая "отказ - заявление отклоненное"
**Определим конкретные типы:**
```
t_отказ ∈ T_E (тип события "отказ")
t_отклоненное ∈ T_D (тип документа "заявление отклоненное")
a_отклоняет ∈ A (тип связи "отклоняет")
```
**Формальное выражение связи:**
```
∀e ∈ E: (тип_E(e) = t_отказ) ⇒ ∃d ∈ D: (тип_D(d) = t_отклоненное) ∧ (e, d, a_отклоняет) ∈ R
```
### 5. Более общая форма для произвольных пар "событие-документ"
**Пусть задано отображение типов:**
```
Φ: T_E → T_D × A
```
Тогда общее условие связности:
```
∀e ∈ E: ∃d ∈ D: (тип_D(d) = π₁(Φ(тип_E(e))) ∧ (e, d, π₂(Φ(тип_E(e)))) ∈ R
```
где π₁ и π₂ - проекции на первую и вторую компоненты пары.
### 6. Пример для нашего бизнес-процесса
**Конкретные типы в нашем процессе:**
```
T_E = {t_подача, t_согласование, t_отказ}
T_D = {t_составленное, t_согласованное, t_отклоненное}
A = {a_инициирует, a_подтверждает, a_отклоняет, a_создает}
```
**Отображение Φ:**
```
Φ(t_подача) = (t_составленное, a_инициирует)
Φ(t_согласование) = (t_согласованное, a_подтверждает)
Φ(t_отказ) = (t_отклоненное, a_отклоняет)
```
**Проверка условия связности:**
```
∀e ∈ E: ∃d ∈ D: (тип_D(d) = π₁(Φ(тип_E(e))) ∧ (e, d, π₂(Φ(тип_E(e)))) ∈ R
```
### 7. Альтернативное представление через множества
**Множество пар "тип события - тип документа":**
```
P = {(t_e, t_d) ∈ T_E × T_D | события типа t_e связаны с документами типа t_d}
```
**Множество допустимых связей для каждой пары:**
```
A(t_e, t_d) ⊆ A // допустимые типы связей для пары (t_e, t_d)
```
**Общее условие:**
```
∀e ∈ E: ∃d ∈ D: (тип_E(e), тип_D(d)) ∈ P ∧ ∃a ∈ A(тип_E(e), тип_D(d)): (e, d, a) ∈ R
```
### 8. Условие функциональности (однозначности)
**Если требуется однозначное соответствие:**
```
∀e ∈ E: ∃!d ∈ D: (тип_E(e), тип_D(d)) ∈ P ∧ ∃a ∈ A(тип_E(e), тип_D(d)): (e, d, a) ∈ R
```
где ∃! означает "существует и единственный".
### 9. Применение к нашему примеру
**Для события "отказ":**
```
∃e ∈ E: тип_E(e) = t_отказ ⇒ ∃d ∈ D: тип_D(d) = t_отклоненное ∧ (e, d, a_отклоняет) ∈ R
```
**Конкретная реализация в нашем процессе:**
```
тип_E(Событие3) = t_отказ
тип_D(Документ3) = t_отклоненное
(Событие3, Документ3, a_отклоняет) ∈ R
```
Это формальное выражение показывает, что в правильно построенном бизнес-процессе для каждого события определенного типа должен существовать соответствующий документ определенного типа, связанный с ним отношением определенного типа.
### Пояснение
Мы хотим выразить в общем виде связь между множеством событий и множеством документов, в частности, что событие "отказ" связано с документом "заявление отклоненное".
В нашей модели у нас есть:
Множество событий E
Множество документов D
Отношение R_validates ⊆ E × D (подтверждает)
Отношение R_invalidates ⊆ E × D (отклоняет)
Конкретно, мы хотим выразить, что для каждого события типа "отказ" существует документ типа "заявление отклоненное", который связан отношением R_invalidates.
Однако, в нашей модели типы событий и документов не формализованы как отдельные множества. Мы можем ввести:
Множество типов событий: T_E
Множество типов документов: T_D
И функции:
тип_события: E → T_E
тип_документа: D → T_D
Тогда мы можем определить:
Пусть T_E содержит тип "отказ" (обозначим его как "отказ")
Пусть T_D содержит тип "заявление отклоненное" (обозначим его как "отклоненное")
Тогда мы можем записать:
∀ e ∈ E: (тип_события(e) = "отказ") ⇒ ∃ d ∈ D: (тип_документа(d) = "отклоненное") ∧ (e, d) ∈ R_invalidates
Но в нашем конкретном примере у нас только одно событие отказа (Событие3) и один документ отклонения (Документ3), и они связаны.
Однако, в общем виде, если у нас несколько событий отказа и несколько документов отклонения, то мы можем связать их попарно или группами.
Другой подход: ввести отношение между типами событий и типами документов.
R_типов: T_E × T_D
Тогда можно сказать, что тип события "отказ" связан с типом документа "отклоненное", и тогда каждое событие типа "отказ" должно быть связано с некоторым документом типа "отклоненное" через R_invalidates.
Но в нашей модели мы не вводили такое отношение.
Давайте формализуем это в рамках теории множеств, расширив нашу модель.
Расширенная модель:
T_E = { "подача", "согласование", "отказ" } (типы событий)
T_D = { "составленное", "согласованное", "отклоненное" } (типы документов)
тип_события: E → T_E
тип_документа: D → T_D
Для нашего примера:
тип_события(Событие1) = "подача"
тип_события(Событие2) = "согласование"
тип_события(Событие3) = "отказ"
text
тип_документаокумент1) = "составленное"
тип_документаокумент2) = "согласованное"
тип_документаокумент3) = "отклоненное"
Тогда мы можем определить отношение R_типов_отклонения ⊆ T_E × T_D, такое что:
("отказ", "отклоненное") ∈ R_типов_отклонения
И затем потребовать, чтобы для каждого события e типа "отказ" существовал документ d типа "отклоненное", связанный отношением R_invalidates.
Аналогично для подтверждения:
("согласование", "согласованное") ∈ R_типов_подтверждения
И для каждого события e типа "согласование" существует документ d типа "согласованное", связанный отношением R_validates.
Но note: в нашей модели одно событие согласования связано с одним документом (согласованным) и одно событие отказа связано с одним документом (отклоненным).
Однако, в общем случае, связь может быть не один-к-одному.
Мы можем сформулировать общее утверждение:
Пусть R_T ⊆ T_E × T_D — отношение между типами событий и типами документов, которое указывает, что событие типа t_E должно быть связано с документом типа t_D отношением R (которое может быть R_validates или R_invalidates).
Тогда:
text
∀ e ∈ E, ∀ t_E ∈ T_E, ∀ t_D ∈ T_D:
(тип_события(e) = t_E) ∧ (t_E, t_D) ∈ R_T ⇒ ∃ d ∈ D: (тип_документа(d) = t_D) ∧ (e, d) ∈ R
где R — это соответствующее отношение (например, R_validates для положительных исходов и R_invalidates для отрицательных).
В нашем случае:
text
R_T_validates = { ("согласование", "согласованное") }
R_T_invalidates = { ("отказ", "отклоненное") }
Тогда:
text
Для R_T_validates:
∀ e ∈ E: (тип_события(e) = "согласование") ⇒ ∃ d ∈ D: (тип_документа(d) = "согласованное") ∧ (e, d) ∈ R_validates
Для R_T_invalidates:
∀ e ∈ E: (тип_события(e) = "отказ") ⇒ ∃ d ∈ D: (тип_документа(d) = "отклоненное") ∧ (e, d) ∈ R_invalidates
Это и есть общее выражение, связывающее множество событий с множеством документов по типам.
Однако, note: в нашем примере также есть событие "подача", которое не связано с документом через R_validates или R_invalidates, но связано с документом через отношение R_input (которое мы не рассматриваем в данном контексте).
Таким образом, мы можем определить различные отношения между типами событий и типов документов для разных видов связей.
Резюмируя, мы расширили модель, введя типы событий и документов, и затем сформулировали условия согласованности между событиями и документами на уровне типов.