Редактирование: МФСП, 09 лекция (от 29 октября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 3: | Строка 3: | ||
Консультация | Консультация | ||
- | В каждом билете должно быть 4 задачи. | + | В каждом билете должно быть 4 задачи. Теор материала никакого нет. |
- | # Либо перевод явной спецификации в неявную. Спецификации должны быть абсолютно эквивалентны. Любые неточности будут трактоваться как ошибки. Могут быть погрешности | + | # Либо перевод явной спецификации в неявную. Спецификации должны быть абсолютно эквивалентны. Любые неточности будут трактоваться как ошибки. Могут быть погрешности практ. плана, это не беда. Если же искажена семантика, то это ошибка. Иногда включается обрб. трансляция, но это случай редкий. Тут рассм. одна функция. |
- | # | + | # Дайтся алг. спецификация, и по ней необх. дать явную, неявную спец. группы функций, чтобы в низ были опр. предлусловия, и все спец. долны отв. требованиям аксиом, сформ. в задаче. Тут группа функций рассматривается. Для каких-то функций можно исп. явную, для каких-то — неянвую спецификацию, на выбор. |
- | # Даётся | + | # Даётся алг. спецификация, плюс даётся явная спецификация. Надо доказать, что явная спец. явл. или не является уточнением алгебраической. |
- | # Упрощение некоего выражения. В качестве | + | # Упрощение некоего выражения. В качестве выр. даётся фрагмент спецификации, в котором активно исп. параллельность, внутр/внешний выбор, взаимная блоеировка, и так далее. |
== Конкретные примеры == | == Конкретные примеры == | ||
Строка 22: | Строка 22: | ||
Подводные камни: | Подводные камни: | ||
* Никогда нет присваивания. | * Никогда нет присваивания. | ||
- | * В случае | + | * В случае неизм. перем. на запись в постусловии надо написать, что знач. переменной сохр.: x=x' |
* Выражение должно быть корректно | * Выражение должно быть корректно | ||
Строка 45: | Строка 45: | ||
'''end''' | '''end''' | ||
- | Для каждой | + | Для каждой комб. входных данных выпис. результат в том или ином случае. Результат состоит из 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 — структура. При этом | + | Всегда на входе будет группа функций, работающая с общей структурой данных. При этом, видимо, 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!(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 ? Только если после взаимод в интерлоке это взаимод. не использ. и оно будет выполн., то да. |
- | # | + | # Рассм. первые два случая: 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 (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}} |