QUEUE class type Element Queue value empty Queue

  • Slides: 19
Download presentation

Очередь. Алгебраическая спецификация QUEUE = class type Element, Queue value empty: Queue, append :

Очередь. Алгебраическая спецификация QUEUE = class type Element, Queue value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue : empty ~= append (e, q), first(append(e, empty)) is e, rest(append(e, empty)) is empty, first(append(e, q)) is if q=empty then e else first(q) end, rest(append(e, q)) is if q=empty then empty else append(rest(q)) end ВМи. К МГУ. Сентябрь-декабрь 2001 А. К. Петренко. Формальные спецификации программ - I. Лекция 2 10

Пример трансформаций типа re-writing … axiom forall e : Element, q : Queue :

Пример трансформаций типа re-writing … axiom forall e : Element, q : Queue : empty ~= append (e, q), first(append(e, empty)) is e, rest(append(e, empty)) is empty, first(append(e, q)) is if q=empty then e else first(q) end, rest(append(e, q)) is if q=empty then empty else append(e, rest(q)) end rest(append(a, append (b, empty))) append(a, rest(append (b, empty))) append(a, empty) ВМи. К МГУ. Сентябрь-декабрь 2001 А. К. Петренко. Формальные спецификации программ - I. Лекция 2 11

Очередь. Явная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue,

Очередь. Явная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue : empty is <. . >, append(e, q) is q ^ <. e. >, first(q) is hd q pre q~=<. . >, rest(q) is tl q pre q~=<. . > end ВМи. К МГУ. Сентябрь-декабрь 2001 А. К. Петренко. Формальные спецификации программ - I. Лекция 2 12

Очередь. Неявная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue,

Очередь. Неявная спецификация QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue : empty is <. . >, append(e, q 1) as post q 1 ^ <. e. > = q 2, first(q) as e post hd q= e pre q~=<. . >, rest(q 1) as q 2 post exists e : Element : - <. e. > ^ q 1 = q 2 pre q~=<. . >, end ВМи. К МГУ. Сентябрь-декабрь 2001 А. К. Петренко. Формальные спецификации программ - I. Лекция 2 14

Очередь. Неявная спецификация (зеркало) QUEUE = class type Element, Queue = Element-list value empty:

Очередь. Неявная спецификация (зеркало) QUEUE = class type Element, Queue = Element-list value empty: Queue, append : Element >< Queue -> Queue, first : Queue -~-> Element, rest : Queue -~-> Queue axiom forall e : Element, q : Queue : empty is <. . >, append(e, q 1) as q 2 post <. e. > ^ q 1 = q 2, first(q 1) as e post exists q 2 : Queue : - q 2 ^ <. e. > = q 1 rest(q 1) as q 2 post tl q 1= q 2 pre q 1~=<. . >, end ВМи. К МГУ. Сентябрь-декабрь 2001 А. К. Петренко. Формальные спецификации программ - I. Лекция 2 15