МФСП, 09 лекция (от 29 октября)

Материал из eSyr's wiki.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: * '''Диктофонная запись:''' http://esyr.org/lections/audio/mfsp_2008_winter/MFSP_08_10_29.ogg Консультация В каждом билете должно быт...)
 
Строка 3: Строка 3:
Консультация
Консультация
-
В каждом билете должно быть 4 задачи. Теор материала никакого нет.
+
В каждом билете должно быть 4 задачи. Теоретического материала никакого нет.
-
# Либо перевод явной спецификации в неявную. Спецификации должны быть абсолютно эквивалентны. Любые неточности будут трактоваться как ошибки. Могут быть погрешности практ. плана, это не беда. Если же искажена семантика, то это ошибка. Иногда включается обрб. трансляция, но это случай редкий. Тут рассм. одна функция.
+
# Либо перевод явной спецификации в неявную. Спецификации должны быть абсолютно эквивалентны. Любые неточности будут трактоваться как ошибки. Могут быть погрешности практического плана, это не беда. Если же искажена семантика, то это ошибка. Иногда включается обрб. трансляция, но это случай редкий. Тут рассматривается одна функция.
-
# Дайтся алг. спецификация, и по ней необх. дать явную, неявную спец. группы функций, чтобы в низ были опр. предлусловия, и все спец. долны отв. требованиям аксиом, сформ. в задаче. Тут группа функций рассматривается. Для каких-то функций можно исп. явную, для каких-то — неянвую спецификацию, на выбор.
+
# Даётся алгебраическая спецификация, и по ней необходимо дать явную, неявную спецификацию группы функций, чтобы в них были определены предусловия, и все спецификации должны отвечать требованиям аксиом, сформулированным в задаче. Тут группа функций рассматривается. Для каких-то функций можно использовать явную, для каких-то — неявную спецификацию, на выбор.
-
# Даётся алг. спецификация, плюс даётся явная спецификация. Надо доказать, что явная спец. явл. или не является уточнением алгебраической.
+
# Даётся алгебраическая спецификация, плюс даётся явная спецификация. Надо доказать, что явная спец. явл. или не является уточнением алгебраической.
-
# Упрощение некоего выражения. В качестве выр. даётся фрагмент спецификации, в котором активно исп. параллельность, внутр/внешний выбор, взаимная блоеировка, и так далее.
+
# Упрощение некоего выражения. В качестве выражения даётся фрагмент спецификации, в котором активно используется параллельность, внутренний/внешний выбор, взаимная блокировка, и так далее.
== Конкретные примеры ==
== Конкретные примеры ==
Строка 22: Строка 22:
Подводные камни:
Подводные камни:
* Никогда нет присваивания.
* Никогда нет присваивания.
-
* В случае неизм. перем. на запись в постусловии надо написать, что знач. переменной сохр.: x=x'
+
* В случае неизменённых переменных на запись в постусловии надо написать, что значение переменной сохраняется: x=x'
* Выражение должно быть корректно
* Выражение должно быть корректно
Строка 45: Строка 45:
'''end'''
'''end'''
-
Для каждой комб. входных данных выпис. результат в том или ином случае. Результат состоит из d, e и x.
+
Для каждой комбинации входных данных выписывается результат в том или ином случае. Результат состоит из d, e и x.
Где подобная задача может встретиться: в переписывании legacy, как альтернатива реверс-инжинирингу.
Где подобная задача может встретиться: в переписывании legacy, как альтернатива реверс-инжинирингу.
-
Перевод из неявной спец. в явную это обычное программирование.
+
Перевод из неявной спецификации в явную это обычное программирование.
=== 2. (Билет 1, задание 2) ===
=== 2. (Билет 1, задание 2) ===
Строка 76: Строка 76:
∀ e : E, s1, s2 : S :- append(add(e, s1), s2)) ≡ add(e, append (s1, s2))
∀ e : E, s1, s2 : S :- append(add(e, s1), s2)) ≡ add(e, append (s1, s2))
-
Всегда на входе будет группа функций, работающая с общей структурой данных. При этом, видимо, E — элемент, S — структура. При этом внутр. предст. элемента не важно, а вот что за S, хорошо быд догадаться. Какие бывают виды структур: множество, список, отображение. Элементами его могут быть или сами элементы E, множества, списки, отображения. Помимо совсем простых, базовых структур, может быть более хитрая структура, например, круговой список. Структура может быть необяз. одноур. Т. о.с совет: сначала понять, какая стуктура данных скр. за спецификацией, и после этого писать спецификацию.
+
Всегда на входе будет группа функций, работающая с общей структурой данных. При этом, видимо, E — элемент, S — структура. При этом внутреннее представление элемента не важно, а вот что за S, хорошо бы догадаться. Какие бывают виды структур: множество, список, отображение. Элементами его могут быть или сами элементы E, множества, списки, отображения. Помимо совсем простых, базовых структур, может быть более хитрая структура, например, круговой список. Структура может быть необязательно одноуровневой Т. о.с совет: сначала понять, какая структура данных скрыта за спецификацией, и после этого писать спецификацию.
-
Ответ: видимо, S это кользевой список.
+
Ответ: видимо, S это кольцевой список.
'''type'''
'''type'''
E,
E,
Строка 115: Строка 115:
Какие правила:
Какие правила:
* Вычислять всё, что можно вычислить
* Вычислять всё, что можно вычислить
-
* Подстановка. Всегда в кач. условия даётся явное опр. Везде, где в алг. спец. вы видите обр. к функции, в жтом месте всегда можно сделать подстановку
+
* Подстановка. Всегда в качестве условия даётся явное определение. Везде, где в алгебраической спецификации вы видите обращение к функции, в этом месте всегда можно сделать подстановку
-
* Базовые операции с осн. структурами данных в сдлучае изв. значений.
+
* Базовые операции с основными структурами данных в случае известных значений.
-
Для каждой из аксиом проводятсчя преобр. для правой и левой части, пока либо они нне станут текстуально равны, либо пока они не станут явно неэквив.
+
Для каждой из аксиом проводятся преобр. для правой и левой части, пока либо они нне станут текстуально равны, либо пока они не станут явно неэквив.
-
Может в условии задач сегка ошибиться и можно увидеть по сигн., что они не явл. уточнением. Если такая ошибка найдётся, то ваше счастье.
+
Может в условии задач слегка ошибиться и можно увидеть по сигнатуре, что они не являются уточнением. Если такая ошибка найдётся, то ваше счастье.
Если запись будет не слишком подробной, то это нормально
Если запись будет не слишком подробной, то это нормально
Строка 134: Строка 134:
(b!2) || (y := a?) || '''if''' (x:=1); (a!x); ('''true''' П '''false''') '''then''' a!(b?) '''else''' a!(1+b?) '''end'''
(b!2) || (y := a?) || '''if''' (x:=1); (a!x); ('''true''' П '''false''') '''then''' a!(b?) '''else''' a!(1+b?) '''end'''
-
Финальная запись решения, это, как правило, набор выражений, раз. внутр. выбором, каждон из них дост. простое.
+
Финальная запись решения, это, как правило, набор выражений, различающихся внутренним выбором, каждое из них достаточно простое.
Для начала просканировать и найти контрагентов.
Для начала просканировать и найти контрагентов.
* Первый тред пишет b? второй читает
* Первый тред пишет b? второй читает
-
* Второй тред взаимод. с оператором (a!x) из третьего треда
+
* Второй тред взаимодействует с оператором (a!x) из третьего треда
a!(5+b?) || ((x:=('''if''' '''true''' П '''false''' '''then''' x:=b?;1 '''else''' b!3; x:=2; 6 '''end''') +x) ++ (b!4|| y:=b?))
a!(5+b?) || ((x:=('''if''' '''true''' П '''false''' '''then''' x:=b?;1 '''else''' b!3; x:=2; 6 '''end''') +x) ++ (b!4|| y:=b?))
-
По поводу: (x:=a?)||(x:=b?). Мы ничего не можем сказать без окружения. Если это изолир. оператор и ничего в каналах нет, то это беск. одидание. Если порядок получения данных из каналов известен, то мы можем сказать что-то определённое, если же порядок неизв, то и сказать ничего не можем.
+
По поводу: (x:=a?)||(x:=b?). Мы ничего не можем сказать без окружения. Если это изолированный оператор и ничего в каналах нет, то это бесконечное ожидание. Если порядок получения данных из каналов известен, то мы можем сказать что-то определённое, если же порядок неизвестен, то и сказать ничего не можем.
-
Может ли провзаим. 5+b? и b!3 ? Только если после взаимод в интерлоке это взаимод. не использ. и оно будет выполн., то да.
+
Может ли провзаимодействовать 5+b? и b!3 ? Только если после взаимодействия в интерлоке это взаимодействие не используется и оно будет выполнено, то да.
-
# Рассм. первые два случая: a!(5+b?) || ((x:=((x:=b?;1)П(b!3;x:=2;6))+x)||(y:=4)). Поск. все взаимод. произошли, то ++ заменяется на ||.
+
# Рассмотрим первые два случая: a!(5+b?) || ((x:=((x:=b?;1)П(b!3;x:=2;6))+x)||(y:=4)). Поскольку все взаимодействия произошли, то ++ заменяется на ||.
## a!(5+b?) || ((x:=(x:=b?;1)+x)||(y:=4)) — первое решение
## a!(5+b?) || ((x:=(x:=b?;1)+x)||(y:=4)) — первое решение
-
Больше выпис. не будем.
+
Больше выписывать не будем.
-
Варивант со внеш. взаимодействием: почти наверняка это будет case:
+
Варивант со внешним взаимодействием: почти наверняка это будет case:
case (1 П b?) '''of'''
case (1 П b?) '''of'''
1:
1:
Строка 158: Строка 158:
'''end''' || a! ... || b!(a?+2) || ...
'''end''' || a! ... || b!(a?+2) || ...
-
Результатом будет ветка кейса и те взаимод., которые не заверш..
+
Результатом будет ветка кейса и те взаимодействия, которые не заверш..
-
Орг. замечания:
+
Организационные замечания:
-
* Можно польз. молча любыми ист. информации
+
* Можно пользоваться молча любыми источниками информации
* Нельзя обмениваться информацией ни в каком виде
* Нельзя обмениваться информацией ни в каком виде
-
Результ. окзенка за предмет будет сост. из двух коллоквиум и возм. оценка по успехам за практ. задание.
+
Результирующая оценка за предмет будет состоять из двух коллоквиумов и, возможно, оценки по успехам за практическое задание.
{{МФСП}}
{{МФСП}}
{{Lection-stub}}
{{Lection-stub}}

Текущая версия

Консультация

В каждом билете должно быть 4 задачи. Теоретического материала никакого нет.

  1. Либо перевод явной спецификации в неявную. Спецификации должны быть абсолютно эквивалентны. Любые неточности будут трактоваться как ошибки. Могут быть погрешности практического плана, это не беда. Если же искажена семантика, то это ошибка. Иногда включается обрб. трансляция, но это случай редкий. Тут рассматривается одна функция.
  2. Даётся алгебраическая спецификация, и по ней необходимо дать явную, неявную спецификацию группы функций, чтобы в них были определены предусловия, и все спецификации должны отвечать требованиям аксиом, сформулированным в задаче. Тут группа функций рассматривается. Для каких-то функций можно использовать явную, для каких-то — неявную спецификацию, на выбор.
  3. Даётся алгебраическая спецификация, плюс даётся явная спецификация. Надо доказать, что явная спец. явл. или не является уточнением алгебраической.
  4. Упрощение некоего выражения. В качестве выражения даётся фрагмент спецификации, в котором активно используется параллельность, внутренний/внешний выбор, взаимная блокировка, и так далее.

Содержание

[править] Конкретные примеры

[править] 1. (Билет 1 задание 1 из методички 2008)

f: Int × Int × Int → write x read y Int × Int
  f(a,b,c) ≡; if a=b then
                     (if a+b > c then c else a+b end,
                     a*b*(if c>0 then x:=y; c else 0-c end))
                   else (a+b, x:=b; a-b)
  end

Подводные камни:

  • Никогда нет присваивания.
  • В случае неизменённых переменных на запись в постусловии надо написать, что значение переменной сохраняется: x=x'
  • Выражение должно быть корректно

Ответ:

f: Int × Int × Int → write x read y Int × Int
f(a,b,c) as (d, e)
  post
    if a=b then
      if a+b>c then
        if c>0 then
          d=c ∧ x=y ∧ e = a*b*c
        else
          d=c ∧ x=x’ ∧ e=a*b*(0-c) 
        end
      elseif c>0 then 
        d=a+b ∧ x=y ∧ e= a*b*c
      else 
        d=a+b ∧ x=x‘ ∧ e=a*b*(0-c) 
      end
    else 
      d=a+b ∧ x=b ∧ e=a-b 
    end

Для каждой комбинации входных данных выписывается результат в том или ином случае. Результат состоит из d, e и x.

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

Перевод из неявной спецификации в явную это обычное программирование.

[править] 2. (Билет 1, задание 2)

type 
  S, E
value
  create : Unit → S,
  add : E × S → S,		
  del : S -~-> S,			
  next : S  -~-> S, 		
  get : S -~-> E,
  append : S × S → S
axiom
  ∀ e : E, s : S :- del(add(e, s)) ≡ s,
  ∀ e : E, s : S :- get(add(e, s)) ≡ e,
  ∀ e : E, s : S :- next(add(e, s)) ≡ 	
    if s = create() then 
      add( e, s )
    else 
      append ( s, add( e, create( ) )
    end,
  ∀ e : E, s1, s2 : S :- append(create(), s2)) ≡ s2,
  ∀ e : E, s1, s2 : S :- append(add(e, s1), s2)) ≡ add(e, append (s1, s2))

Всегда на входе будет группа функций, работающая с общей структурой данных. При этом, видимо, E — элемент, S — структура. При этом внутреннее представление элемента не важно, а вот что за S, хорошо бы догадаться. Какие бывают виды структур: множество, список, отображение. Элементами его могут быть или сами элементы E, множества, списки, отображения. Помимо совсем простых, базовых структур, может быть более хитрая структура, например, круговой список. Структура может быть необязательно одноуровневой Т. о.с совет: сначала понять, какая структура данных скрыта за спецификацией, и после этого писать спецификацию.

Ответ: видимо, S это кольцевой список.

type
  E,
  S : E-l≡t

value
  create : Unit → S
    create ≡ <..>,

  add : E × S → S 
    add (e,s) ≡ <.e.> ^ s,

  del : S -~-> S 
    del (s) ≡ tl s
    pre s ≠ <..>,

  next : S  -~-> S 
    next (s) ≡ tl s ^ <. hd s  .>
    pre s ≠ <..>, /* Надо писать предусловие */

  get : S -~-> E 
    get (s) ≡ hd s
    pre s ≠ <..>,

  append : S × S → S
    append (s1, s2) as s
    post
      if s1=<..> then s=s2
      else s=add(hd s1, append( tl s1, s2))
      end

[править] 3. Доказательства

Самое длинное решение.

Какие правила:

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

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

Может в условии задач слегка ошибиться и можно увидеть по сигнатуре, что они не являются уточнением. Если такая ошибка найдётся, то ваше счастье.

Если запись будет не слишком подробной, то это нормально

[править] 4. Задачи на упрощение

Какие бывают типы:

  • ||, П
  • ||, ++
  • ||, []

Более хитрых комбинаций быть не должно.

(b!2) || (y := a?) || if (x:=1); (a!x); (true П false) then a!(b?) else a!(1+b?) end

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

Для начала просканировать и найти контрагентов.

  • Первый тред пишет b? второй читает
  • Второй тред взаимодействует с оператором (a!x) из третьего треда
a!(5+b?) || ((x:=(if true П false then x:=b?;1 else b!3; x:=2; 6 end) +x) ++ (b!4|| y:=b?))

По поводу: (x:=a?)||(x:=b?). Мы ничего не можем сказать без окружения. Если это изолированный оператор и ничего в каналах нет, то это бесконечное ожидание. Если порядок получения данных из каналов известен, то мы можем сказать что-то определённое, если же порядок неизвестен, то и сказать ничего не можем.

Может ли провзаимодействовать 5+b? и b!3 ? Только если после взаимодействия в интерлоке это взаимодействие не используется и оно будет выполнено, то да.

  1. Рассмотрим первые два случая: a!(5+b?) || ((x:=((x:=b?;1)П(b!3;x:=2;6))+x)||(y:=4)). Поскольку все взаимодействия произошли, то ++ заменяется на ||.
    1. a!(5+b?) || ((x:=(x:=b?;1)+x)||(y:=4)) — первое решение

Больше выписывать не будем.

Варивант со внешним взаимодействием: почти наверняка это будет case:

case (1 П b?) of
  1:
  3:
  5:
end || a! ... || b!(a?+2) || ...

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

Организационные замечания:

  • Можно пользоваться молча любыми источниками информации
  • Нельзя обмениваться информацией ни в каком виде

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


Формальная спецификация и верификация программ


Лекции

01 02 03 04 05 06 07 08 09 10 11 12 13 14


Календарь

Сентябрь
03 10 17 24
Октябрь
01 08 15 22 29
Ноябрь
12 19 26
Декабрь
03 17
Семинары

01 02 03 04 05 06


Календарь

Сентябрь
01 08 15 22 29
Октябрь
06

Оформление задач|Проведение экзамена


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы