% Лекция 10 (24.11.23)

%% NOTE: 2.3

Устовия применения де-факто правил в исходном состоянии $G = (S, O, E \cup F)$
и результаты их применения в результирующем состоянии $G' = (S, O, E \cup F')$
приведены в таблице.

%% TODO: таблица 1 - Де-факто правила расширенной модели Take-Grant

\begin{table}[H]
  \smallsize
  \centering
  \caption{}
  \begin{tabular}{|c|p{6cm}|p{6cm}|}
    \hline
    Правило &
    Исходное состояние $G = (S, O, E \cup F)$ &
    Результирующее состояние $G' = (S, O, E \cup F')$ \\ \hline

    Первое правило &
    $x \in S; y \in O; (x, y, r) \in E \cup F$ &
    $F' = F \cup \set{(y, x, w), (x, y, r)}$ \\ \hline

    Второе правило &
    $x \in S; y \in O; (x, y, w) \in E \cup F$ &
    $F' = F \cup \set{(y, x, r), (x, y, w)}$ \\ \hline

    $\fn{spy}(x, y, z)$ &
    $x, y \in S; x \neq z; \set{(x, y, r), (y, z, r)} \subset E \cup F$ &
    $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline

    $\fn{find}(x, y, z)$ &
    $x, y \in S; z \in O; x \neq z; \set{(x, y, w), (y, z, w)} \subset E \cup F$ &
    $F' = F \cup \set{(x, z, w), (z, x, r)}$ \\ \hline

    $\fn{post}(x, y, z)$ &
    $x, z \in S; y \in O; x \neq z; \set{(x, y, r), (z, y, w)} \subset E \cup F$ &
    $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline

    $\fn{pass}(x, y, z)$ &
    $y \in S; x, z \in O; x \neq z; \set{(y, x, w), (y, z, r)} \subset E \cup F$ &
    $F' = F \cup \set{(x, z, r), (z, x, w)}$ \\ \hline
  \end{tabular}
\end{table}

Из определения де-факто правил следует, что для анализа информационных потоков
достаточно рассматривать потоки одного вида: либо на чтение, либо на запись.

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

Пусть $x, y \in O_0$, $x \neq y$, --- различные объекты графа доступов и
информационных потоков $G_0 = (S_0, O_0, E_0 \cup F_0)$. Определим предикат
$\fn{can_write}(x, y, G_0)$, который будет истинным $\iff$ $\exists$ графы $G_1
= (S_1, O_1, E_1 \cup F_1), \dots, G_N = (S_N, O_N, E_N \cup F_N)$ и де-юре
или де-факто правила $op_1, \dots, op_N$, где $N \geq 0$, такие, что $G_0
\vdash_{op_1} G_1 \vdash_{op_2} \dots \vdash_{op_N} G_N$ и $(x, y, w) \subset
F_N$.

%% NOTE: 2.8
\begin{theorem}
  Пусть $G_0 = (S_0, O_0, E_0 \cup F_0)$ --- граф доступов и информационных
  потоков, $x, y \in O_0$, $x \neq y$. Тогда предикат $\fn{can_write}(x, y, G_0)$
  истинен $\iff$ существуют объекты $o_1, \dots, o_m \in O_0$, где $o_1 = x,
  o_m = y$, такие, что или $m = 2$ и $(x, y, w) \in F_0$, или для $i = 1, \dots,
  m - 1$ выполняется одно из трёх условий:
  \begin{enumerate}
    \item
      $o_i \in S_0$ и или истинен предикат $\fn{can_share}(\set{w}, o_i, o_{i +
      1}, G_0)$, или $(o_i, o_{i + 1}, w) \in E_0 \cup F_0$;
    \item
      $o_{i + 1} \in S_0$ и или истинен предикат $\fn{can_share}(\set{r}, o_{i +
      1}, o_i, G_0)$, или $(o_{i + 1}, o_i, r) \in E_0 \cup F_0$;
    \item
      $o_i, o_{i + 1} \in S_0$ и или истинен предикат $\fn{can_share}(\alpha,
      o_i, o_{i + 1}, G_0)$, или истинен предикат $\fn{cna_share}(\alpha, o_{i
      + 1}, o_i, G_0)$, где $\alpha \in \set{t, g}$, или существует объект
      $o_i' \in O_0$ такой, что либо истинны предикаты $\fn{can_share}(\set{t},
      o_i, o_i', G_0)$, $\fn{can_share}(\set{g}, o_{i + 1}, o_i', G_0)$,
      либо истинны предикаты $\fn{can_share}(\set{g}, o_i, o_i', G_0)$,
      $\fn{can_share}(\set{t}, o_{i + 1}, o_i', G_0)$.
  \end{enumerate}

  \label{thm:2.8}
\end{theorem}

\paragraph{Алгоритм построения замыкания графа доступов и информационных потоков.}

Для проверки истинности предиката $\fn{can_share}(\alpha, x, y, G_0)$ или
$\fn{can_write}(x, y, G_0)$ для многих пар вершин неэффективно использовать
алгоритмы проверки условий теорем \ref{thm:2.6}, \ref{thm:2.8}.

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

Пусть $G = (S, O, E \cup F)$ --- граф доступов и информационных потоков такой,
что для каждого субъекта $s \in S$ существует объект $o \in O$ такой, что
выполняется условие $(s, o, \set{t, g, r, w}) \in E$.

\emph{Замыканием} (или \emph{де-факто замыканием}) графа $G$ называется граф
доступов и информационных потоков $G^* = (S, O, E^* \cup F^*)$, полученный из
$G$ применением последовательности правил take, grant и де-факто правил. При
этом применение к графу $G^*$ указанных правил не приводит к появлению в нём
новых дуг.

$tg$-замыканием графа $G$ называется граф доступов и информационных
потоков $G^{tg} = (S, O, E^{tg} \cup F)$, полученный из $G$ применением
последовательности правил take или grant.

При этом каждое ребро $(o_1, o_2, \alpha) \in E^{tg} - E$ имеет вид $(o_1, o_2,
t)$ или $(o_1, o_2, g)$, и применение к графу $G^{tg}$ правил take или grant не
приводит к появлению в нём новых дуг указанного вида.

\emph{Де-юре замыканием} графа $G$ называется граф доступов и информационных
потоков $G^\text{де-юре} = (S, O, E^\text{де-юре} \cup F)$, полученный из $G$
применением последовательности правил take или grant. При этом применение в
графу $G^\text{де-юре}$ правил take или grant не приводит к появлению в нём
новых дуг.

Алгоритм построения замыкания графа доступов состоит из трёх этапов:
\begin{enumerate}
  \item построение $tg$-замыкания;
  \item построение де-юре-замыкания;
  \item построение замыкания.
\end{enumerate}

Алгоритм построения $tg$-замыкания графа доступов и информационных потоков
$G = (S, O, E \cup F)$.
