Лекция презентация

Содержание

ВМиК МГУ, сентябрь-декабрь 2001 Формальные спецификации программ-I, Лекция 10. А.К.Петренко План лекции Неполная спецификация (недоспецификация) Недетерминизм Case-выражения Шаблоны (patterns) Let-выражения Case- и Let-выражения как источник недетерминизма

Слайд 1Лекция
Неполная спецификация и недетерминизм.
Let- и Case-выражения


Слайд 2ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
План лекции
Неполная спецификация (недоспецификация)
Недетерминизм
Case-выражения
Шаблоны

(patterns)
Let-выражения
Case- и Let-выражения как источник недетерминизма

Слайд 3ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Самостоятельное задание


Слайд 4ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Неполная спецификация
Константы
value x :

Int, y : Int :- y ~= 0 axiom y ~= 3
Функции
value f : Int -> Int axiom forall x : Int :- f(x) > x

Слайд 5ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Источники неполной спецификации
Возможность писать

неполные спецификации является важным моментом с точки зрения процесса разработки ПО с использованием формальных методов – специфицируются лишь те аспекты, которые важны на данном уровне абстракции, а остальные можно оставить недоспецифицированными.

Слайд 6ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Недетерминированные выражения
С использованием оператора

выбора (внешнего или внутреннего)
0 ∏ 1 ∏ 2 0 |^| 1 |^| 2 (ASCII-нотация)
С использованием Let и Case
let x : Nat :- x < 3 in x end
(подробности позже в этой же лекции)

Слайд 7ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Недетерминированная спецификация функции
value f

: Int -~-> Int
f(x) is 0 |^| 1 |^| 2
Необходимо отметить, что такая функция не является функцией в математическом смысле, поэтому она должна быть помечена как нетотальная. Для тотальных функций в RSL условие детерминированности является обязательным.

Слайд 8ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Ошибки, похожие на недетерминизм
Недетерминированная

спецификация тотальной функции
value f : Int -> Int f(x) is 0 |^| 1 |^| 2
Недетерминированная спецификация константы является ошибкой, потому что константа – тотальная функция
value x : Int = 0 |^| 1 |^| 2

Слайд 9ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения: пример
value reverse : Int-list

-> Int-list reverse(l) is case l of •..> -> <..> <.i.> ^ l1 -> reverse(l1) ^ <.i.> end

Слайд 10ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения: синтаксис
case value_expr of

pattern1 -> value_expr1, … patternn -> value_exprn end

Слайд 11ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения: семантика
Ключевую роль в

case-выражении играют шаблоны. Результат выражения, по которому производится выбор, проверяется на соответствие шаблонам в указанном порядке. При совпадении выполняется соответствующее выражение, результат которого и является результатом case-выражения.

Слайд 12ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Шаблоны (patterns)
Шаблоны выполняют две

функции:
Вводят новые (локальные) имена с областью видимости до конца объемлющего блока или выражения
Определяют значения для введенных имен в случае совпадения проверяемого выражения с шаблоном

Слайд 13ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Классификация шаблонов
Literal pattern
Wildcard pattern
Name

pattern
Record pattern
List pattern
Product pattern

Слайд 14ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Внутренние шаблоны
Шаблоны строятся рекурсивно,

при этом не все перечисленные типы могут использоваться во внутренних шаблонах.
Во внутренних шаблонах:
Нельзя использовать Name patterns
Вместо них используются
Equality patterns для проверки соответствия
Идентификаторы, вводящие новые имена

Слайд 15ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Literal + Wildcard patterns
type

Nat1 = {| n : Nat :- n > 0 |}
value fib : Nat1 -> Nat1 fib(n) is case n of 1 -> 1, 2 -> 1, _ -> fib(n-2) + fib(n-1) end

Слайд 16ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Name patterns
type Color ==

white | black
value invert : Color -> Color invert(c) is case c of white -> black, black -> white end
Literal pattern и Name pattern похожи. Отличие в том, что Literal используется для встроенных типов, а Name - для перечислимых.

Слайд 17ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Record patterns: пример
type List

== empty | add( head : Color, tail : List )
value invert : List -> List invert(l) is case l of empty -> empty, add(c,l) -> add(invert(c),inverl(l)) end

Слайд 18ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Record patterns: семантика
Выражение ex

соответствует шаблону
id(inner_pattern1,…,inner_patternn)
тогда и только тогда, когда
∃ ex1,…,exn :- id(ex1,…,exn) = ex
где exi соответствует шаблону inner_patterni

Слайд 19ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
List patterns: пример
(см. также

вводный пример, слайд 9)
value sum : Int* -> Int sum(l) is case l of <..> -> 0, <.i.> ^ l1 -> i + sum(l1) end

Слайд 20ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
List patterns: семантика
Выражение ex

соответствует шаблону
<.inner_pat1,…,inner_patn.> ^ inner_pat
тогда и только тогда, когда
∃ ex1,…,exn,l :- <.ex1,…,exn.> ^ l = ex
где exi соответствует шаблону inner_pati и l соответствует шаблону inner_pat

Слайд 21ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Product patterns: пример
value ex_or :

Bool >< Bool -> Bool ex_or(b1,b2) is case (b1,b2) of (true,false) -> true, (false,true) -> true, _ -> false end

Слайд 22ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Product patterns: семантика
Выражение ex

соответствует шаблону
(inner_pattern1,…,inner_patternn) (n≥2)
тогда и только тогда, когда
∃ ex1,…,exn :- (ex1,…,exn) = ex
где exi соответствует шаблону inner_patterni

Слайд 23ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Equality patterns
(см. слайды 16

и 17)
value invert : List -> List invert(l) is case l of empty -> empty, add(=white,l1) -> add(black,invert(l1)), add(=black,l1) -> add(white,invert(l1)) end

Слайд 24ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Let-выражения
Let-выражения используются для введения

локальных имен
Два типа Let-выражений:
эксплицитные Let-выражения
имплицитные Let-выражения

Слайд 25ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: синтаксис
let let_binding

= value_expr1 in value_expr2 end
где let_binding может быть:
Binding
List pattern
Record pattern

Слайд 26ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: пример с

Binding

value square_head : Int* -~-> Int* square_head(l) is let h = hd l in <.h*h.> ^ tl l end pre l ~= <..>


Слайд 27ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: пример с

Binding - 2

value square_head : Int* -~-> Int* square_head(l) is let (h,t) = (hd l,tl l) in <.h*h.> ^ t end pre l ~= <..>


Слайд 28ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: пример с

List pattern

value square_head : Int* -~-> Int* square_head(l) is let <.h.> ^ t = l in <.h*h.> ^ t end pre l ~= <..>


Слайд 29ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: семантика с

List pattern

let list_pattern = value_expr1 in value_expr2 end
эквивалентно
case value_expr1 of list_pattern -> value_expr2 end


Слайд 30ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: пример с

Record pattern

type Set == empty | add (Elem,Set)
value choose : Set -~-> Elem choose(s) is let add(e,_) = s in e end pre s ~= empty


Слайд 31ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Эксплицитные Let-выражения: семантика с

Record pattern

let record_pattern = value_expr1 in value_expr2 end
эквивалентно
case value_expr1 of record_pattern -> value_expr2 end


Слайд 32ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Имплицитные Let-выражения: синтаксис
let binding

: type_expr :- value_expr1 in value_expr2 end
или в частном случае (без value_expr1)
let typing in value_expr end

Слайд 33ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Имплицитные Let-выражения: примеры
value choose :

Elem-set -~-> Elem choose(s) is let e : Elem :- e isin s in e end pre s ~= {}
value choose_char : Unit -~-> Char choose_char() is let c : Char in c end

Слайд 34ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Вложенные Let-выражения: синтаксис и

семантика

let def1,…,defn in value_expr end
эквивалентно (n>1)
let def1 in … let defn in value_expr end … end


Слайд 35ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Вложенные Let-выражения: пример
value square_head :

Int* -~-> Int* square_head(l) is let h = hd l, t = tl l in <.h*h.> ^ t end pre l ~= <..>

Слайд 36ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения как источник недетерминизма
Проверяемое

выражение не соответствует ни одному из шаблонов (результат – swap)
Используется Record pattern для типа без деструкторов и с возможностью сконструировать одинаковые значения разными способами (результат недетерминирован)

Слайд 37ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения как источник недетерминизма:

пример 1

type Set == empty | add(Elem,Set)
axiom forall e,e1,e2 : Elem, s : Set :- [no_duplicates] add(e,add(e,s)) is add(e,s) [unordered] add(e1,add(e2,s)) is add(e2,add(e1,s))
Интерес представляет вторая аксиома (продолжение на следущем слайде)


Слайд 38ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Case-выражения как источник недетерминизма:

пример – 2

type Res == is_empty | element(e : Elem)
value choose : Set -~-> Res choose(s) is case s of empty -> is_empty, add(e,s1) -> element(e) end
В сочетании с аксиомой [unordered] результат сравнения со вторым шаблоном неоднозначен.


Слайд 39ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Let-выражения как источник недетерминизма
Имплицитные

Let-выражения:
для перечислимых типов – результат недетерминирован
для неограниченных типов – результат chaos
С противоречивыми условиями – результ swap
Эксплицитные Let-выражения с Record pattern, эквивалентные недетерминированным Case-выражениям

Слайд 40ВМиК МГУ, сентябрь-декабрь 2001
Формальные спецификации программ-I, Лекция 10. А.К.Петренко
Let-выражения как источник недетерминизма:

примеры

Для перечислимых типов: let c : Color in c end is black |^| white
Для неограниченных типов: let x : Int in x end is chaos
С противоречивыми условиями: let x : Nat :- x < -5 in x end is swap


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика