Домашняя работа №4

Задача 1. Дана блок-схема над 2 входными переменными, 2 промежуточными переменными и 1 выходной переменной. Домены всех переменных — целочисленные. При помощи метода индуктивных утверждений докажите частичную корректность этой блок-схемы относительно спецификации \(\varphi(x_1,~x_2) \equiv T\), \(\psi(x_1,~x_2,~z_1) \equiv (z_1 = x_1 * x_2)\).

Решение присылайте на почту до 23:59 10 марта. В вашем письме должен быть архив, в котором расположен файл с целями на языке Why3 и директория с сессией, в которой все цели доказаны. Ниже дано пояснение, что это такое, и требования к оформлению решения.

Читать далее «Домашняя работа №4»

Условия завершимости для оператора CALL

Для доказательства полной корректности (завершимости) блок-схемы без циклов необходимо выписать следующие два условия завершимости для каждого оператора CALL (с доменом \(D_{res}\), функциями \(f_{arg}\) и \(f_{res}\) и спецификацией \((\varphi_s,~\psi_s)\)) и для каждого пути \(\alpha\) от псевдосвязки START в связку, входящую в этот оператор (на пути имеется ровно \(N\) операторов CALL):

\(\forall \bar{x} \in D_{\bar{x}}~\forall \bar{y} \in D_{\bar{y}} ~\forall r_1 \in D_{res_1}~… \forall r_N \in D_{res_N}~\cdot \\
\varphi(\bar{x})~\land~R_\alpha(\bar{x},~\bar{y}, r_1, …)~\Rightarrow
f_{arg}(\bar{x},~\bar{y}) \neq \omega \land \varphi_s(f_{arg}(\bar{x},~\bar{y}))\)

\(\forall \bar{x} \in D_{\bar{x}}~\forall \bar{y} \in D_{\bar{y}} ~\forall r_1 \in D_{res_1}~…\forall r_N \in D_{res_N} \forall r \in D_{res}\cdot\\
\varphi(\bar{x})~\land~R_\alpha(\bar{x},~\bar{y}, r_1,…)~\land~f_{arg}(\bar{x},~\bar{y}) \neq \omega \land \psi_s(f_{arg}(\bar{x},~\bar{y}), r) ~\Rightarrow~ f_{res}(\bar{x},~\bar{y},~r) \neq \omega\)

Домашняя работа №3

Задача 1. Написать блок-схему, которая является обще полностью корректной относительно спецификации \((\varphi,~\psi)\) при заданной \(\gamma\), и доказать это. Блок-схема имеет три входные переменные \(x_1, x_2, x_3\) и одну выходную переменную \(z_1\). Домен переменных \(x_1\) и \(z_1\) обозначим как \(M\), домен переменных \(x_2\) и \(x_3\) обозначим как \(A\). Элементы множества \(M\) можно сравнивать на равенство, то же справедливо для множества \(A\). Других операций для этих множеств не определено.

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

Функциональные и предикатные символы:
\(select: M \times A \rightarrow V\)
\(store: M \times A \times V \rightarrow M\)
\(valid: M \times A \rightarrow \{T, F\}\)

Элементы множества \(V\) можно сравнивать на равенство, других операций для этого множества не определено.

Аксиомы над указанными символами:
\(Ax1: \forall m \in M, a \in A, v \in V \cdot valid(m, a) \Rightarrow select(store(m, a, v), a) = v\)
\(Ax2: \forall m \in M, a, b \in A, v \in V \cdot valid(m, a) \land valid(m, b) \land a \neq b \\ \Rightarrow select(store(m, a, v), b) = select(m, b)\)
\(Ax3: \forall m \in M, a, b \in A, v \in V \cdot valid(m, a) \land valid(m, b) \\ \Rightarrow valid(store(m, a, v), b)\)

\(\varphi(x_1, x_2, x_3) \equiv valid(x_1, x_2) \land valid(x_1, x_3)\)
\(\psi(x_1, x_2, x_3, z_1) \equiv valid(z_1, x_2) \land valid(z_1, x_3) \\
\land select(z_1, x_2) = select(x_1, x_3) \land select(z_1, x_3) = select(x_1, x_2) \\ \land \forall x \in A \cdot x \neq x_2 \land x \neq x_3 \land valid(z_1, x) \land valid(x_1, x) \Rightarrow select(z_1, x) = select(x_1, x)\)

Сигнатуры для операторов CALL и их спецификации:

  • \((DEREF, M \times A, V)\)
    • \(\varphi_{DEREF}(m, a) \equiv valid(m, a)\)
    • \(\psi_{DEREF}(m, a, v) \equiv v = select(m, a)\)
  • \((SETREF, M \times A \times V, M)\)
    • \(\varphi_{SETREF}(m, a, v) \equiv valid(m, a)\)
    • \(\psi_{SETREF}(m, a, v, m’) \equiv m’ = store(m, a, v)\)

Решения присылайте на до 23:59 1 марта.

Домашняя работа №2

Задача 1. Для блок-схемы с семинара определить множество всех \(\gamma\) («гамма»), при которых эта блок-схема будет обще частично корректна относительно спецификации \(\varphi(x)~\equiv~T,~\psi(x, z)~\equiv~F\). Определить множество всех \(\gamma\), при которых эта блок-схема будет обще полностью корректна относительно той же спецификации.

Задача 2. Пусть есть некоторые целочисленные константы \(MIN\) и \(MAX\) такие, что \(MIN<0<MAX~\land~MIN+MAX~=~-1\). Написать блок-схему над 3 входными переменными \(x_1,~x_2,~x_3\) и 1 выходной переменной \(z_1\) (промежуточные переменные выбрать самостоятельно). Домены всех переменных — множество всех целых чисел. Блок-схема должна быть обще полностью корректна относительно спецификации \((\varphi,~\psi)\) при указанной ниже \(\gamma\). В блок-схеме можно использовать лишь следующие функции: константные (в том числе, \(MIN\) и \(MAX\)), равные одному из своих аргументов, арифметические сравнения двух целых чисел. В блок-схеме можно использовать указанные ниже сигнатуры.

Спецификация: \(\varphi(x_1,~x_2,~x_3)~\equiv~MIN\leq x_1 \leq MAX~\land~MIN\leq x_2 \leq MAX~\land\)
\(MIN\leq x_3 \leq MAX~\land~MIN\leq x_1 + x_2 — x_3 \leq MAX\),
\(\psi(x_1,~x_2,~x_3,~z_1)~\equiv~(z_1~=~x_1 + x_2 — x_3)\).

Сигнатуры:
(ADD, \(D_{arg}~=~\mathbb{Z}~\times~\mathbb{Z}\), \(D_{res}~=~\mathbb{Z}\))
(SUB, \(D_{arg}~=~\mathbb{Z}~\times~\mathbb{Z}\), \(D_{res}~=~\mathbb{Z}\))

\(\gamma(ADD)~=~(\varphi_{ADD},~\psi_{ADD})\)
\(\varphi_{ADD}(a,~b)~\equiv~MIN\leq a \leq MAX~\land~MIN\leq b \leq MAX~\land~MIN\leq a + b \leq MAX\)
\(\psi_{ADD}(a,~b,~c)~\equiv~(c~=~a + b)\)
\(\varphi_{SUB}(a,~b)~\equiv~MIN\leq a \leq MAX~\land~MIN\leq b \leq MAX~\land~MIN\leq a — b \leq MAX\)
\(\psi_{SUB}(a,~b,~c)~\equiv~(c~=~a — b)\)

Решения присылайте на до 23:59 22 февраля.

Домашняя работа №1

Решите следующие задачи из задачника: №1.3.2(j), №1.3.3(e). Решения присылайте на до 23:59 15 февраля.

Экзамен

14 июня состоится экзамен. Он пройдет в аудитории 706 и начнется в 9:00. Экзамен длится 120 минут. За это время можно доказать полную корректность блок-схемы при помощи методов Флойда (10 баллов) и написать спецификацию типа данных и Си-функций при помощи языка ACSL (15 баллов). Можно пользоваться любыми письменными и напечатанными материалами. Нельзя пользоваться электронной техникой.

Проверена контрольная работа

Результаты контрольной работы №2 можно посмотреть в таблице с баллами. Сканы работ с комментариями можно посмотреть по этой ссылке: https://www.dropbox.com/sh/3f547cchfdievy1/AAB76SzmhqhHoomMyNQ-OdBWa?dl=0

Контрольная работа по языку Си

19 апреля состоится контрольная работа №2. За полтора часа надо будет решить несколько задач.

Одна задача посвящена спецификации интерфейса модуля на языке Си: спецификации глобальных переменных, типов и функций при помощи языка ACSL. Необходимо понимать, что интерфейсу соответствует не одна реализация, а множество реализаций.

Другая — доказать, что некоторая заданная реализация функции с циклом соответствует заданной спецификации. Нужно будет дополнить реализацию аннотациями на языке ACSL. Для решения этой задачи нужно уметь применять методы Флойда в ACSL.

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

После окончания контрольной работы можно будет показывать практическое задание.