1 x y type T type S listT

  • Slides: 12
Download presentation

1. В списке вставить элемент x после элемента y type T; type S =

1. В списке вставить элемент x после элемента y type T; type S = list(T); ins(S s, T x, y: S s 1) post Ins(S s, T x, y, S s 1); formula Ins(S s, T x, y, S s 1) = s=nil ? s 1 = s: s. car=y ? exists S s 2. Ins(s. cdr, x, y, s 2) & s 1= y + x + s 2 : exists S s 2. Ins(s. cdr, x, y, s 2) & s 1=s. car + s 2;

1. 1 В массиве вставить элемент x после элемента y type T; type Ar(nat

1. 1 В массиве вставить элемент x после элемента y type T; type Ar(nat k) = array(T, 1. . k); ins(nat n, Ar(n) a, T x, y: nat m, Ar(m) a’) post Ins(n, a, x, y, m, a’); formula Ins(nat n, Ar(n) a, T x, y, nat m, Ar(m) a’) = ? ?

1. 1 В массиве вставить элемент x после элемента y type T; type Ar(nat

1. 1 В массиве вставить элемент x после элемента y type T; type Ar(nat k) = array(T, 1. . k); ins(nat n, Ar(n) a, T x, y: nat m, Ar(m) a’) post Ins(n, a, x, y, m, a’); formula Ins(nat n, Ar(n) a, T x, y, nat m, Ar(m) a’) = Ins 1(1, n, a, x, y, m, a’) formula Ins 1(nat p, n, Ar(n) a, T x, y, nat m, Ar(m) a’) = p>n ? a’ = a & m = n : a[p] = y ? Ins 1(p+1, n+1, a[1: p]+[x]+a[p+1: n], x, y, m, a’) : Ins 1(p+1, n, a, x, y, m, a’)

Материалы http: //wasp. iis. nsk. su http: //persons. iis. nsk. su/files/persons/pages/predbase. pdf http: //persons.

Материалы http: //wasp. iis. nsk. su http: //persons. iis. nsk. su/files/persons/pages/predbase. pdf http: //persons. iis. nsk. su/files/persons/pages/plang 12. pdf Virtual. Box image containing PVS 5. 0 (1. 8 G zip file) for Windows: http: //pvs. csl. sri. com/download. shtml Учебное пособие по предикатному пр-ю 2009 г. (устаревшее): http: //persons. iis. nsk. su/files/persons/pages/pred_prog_tutor. pdf бонусы и штрафы

ext. G(string d 0, nat m, string s: string d) pre dec(d 0, m)

ext. G(string d 0, nat m, string s: string d) pre dec(d 0, m) post m. Ext(s, d, d 0, m); Сведение к задаче ext. G : ext(string s: string d) post m. Left(s, d) { ext. G( nil, 0, s: d)} d 1 – десятичная подстрока длины k в начале s; s 1 – остаток строки s. Dec(s: nat k, string d 1, s 1) pre s nil & digit(s. car) ) post dec(d 1, k) & s = d 1 + s 1 & (s 1 = nil or not digit(s 1. car));

Выделение десятичной подстроки длины k в начале s. Dec(s: nat k, string d 1,

Выделение десятичной подстроки длины k в начале s. Dec(s: nat k, string d 1, s 1) pre s nil & digit(s. car) ) post dec(d 1, k) & s = d 1 + s 1 & (s 1 = nil or not digit(s 1. car)); ext. G(string d 0, nat m, string s: string d) pre dec(d 0, m) post m. Ext(s, d, d 0, m); measure len(s) { if (s = nil) d = d 0 else if (digit(s. car)) { Dec(s: nat k, string d 1, s 1); if (k <= m) ext. G(d 0, m, s 1: d) else ext. G(d 1, k, s 1: d) } else ext. G(d 0, m, s. cdr: d)} }

Дополнение d 0 длины k 0 до десятичной строки d 1 длины k выделением

Дополнение d 0 длины k 0 до десятичной строки d 1 длины k выделением из начала строки s; s 1 – остаток строки s. Dec. O(string d 0, s 0, nat k 0: nat k, string d 1, s 1) pre dec(d 0, k 0) post dec(d 1, k) & d 0 + s 0 = d 1 + s 1 & (s 1 = nil or not digit(s 1. car)) Dec(s: nat k, string d 1, s 1) pre s nil & digit(s. car) ) post dec(d 1, k) & s = d 1 + s 1 & (s 1 = nil or not digit(s 1. car)) { Dec. O(s. car, s. cdr, 1: k, d 1, s 1) }; Dec. O(string d 0, s 0, nat k 0: nat k, string d 1, s 1) pre dec(d 0, k 0) post dec(d 1, k) & d 0 + s 0 = d 1 + s 1 & (s 1 = nil or not digit(s 1. car)) measure len(s 0) { if (s 0 = nil or not digit(s 0. car)) d 1 = d 0 || k = k 0 || s 1 = s 0 else Dec. O(d 0+s 0. car, s. cdr, k 0+1: k, d 1, s 1) };