Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Верификация программы sq4




Объектом верификации является программа sq4:

isqrt(nat n, p: nat s)

pre p > 0 & n < 2^(2*p)

{ sq4(n, p, p, 0, n: s)}

post s^2 <= n < (s + 1)^2;

 

sq4(nat n, p, k, q, y: nat s)

pre p >= 0 & n < 2^(2*p) & k <= p & q^2 <= n < (q + 2^k)^2 & y = n - q^2

{ if (k = 0) s = q

else { nat t = 2^((k-1)*2) + q * 2^k;

if (y < t) sq4(n, p, k - 1, q, y: s)

else sq4(n, p, k - 1, q or 2^(k-1), y – t: s)

}

}

post s^2 <= n < (s + 1)^2;

measure k;

Предложение measure k задает функцию меры m(k) = k. Мера задается на части аргументов определения предиката. Должно выполняться требование: мера для аргументов рекурсивного вызова должна быть строго меньше меры для аргументов определения. Мера применяется для одного из обобщений метода доказательства по индукции. Мера используется для генерации условий корректности для рекурсивных вызовов; см. правило FB3 в приложении 1.

Представим начальную часть теории для определения предиката isqrt.

isqrt: THEORYBEGINIMPORTING sq4n, p, s: VAR natP_isqrt(n, p): bool = n < 2^(2*p)Q_isqrt(n, s): bool = s^2 <= n & n < (s + 1)^2satisfy_spec: LEMMA P_isqrt(n, p) IMPLIES EXISTS s: Q_isqrt(n, s)

Здесь представлены функции для предусловия и постусловия и лемма, определяющая тотальность (реализуемость) спецификации. Язык спецификаций является достаточно богатым и позволяет легко представить (сконвертировать) любые типы и выражения языка P.

В соответствии с формулой (1) целью является доказательство истинности правила:

P_isqrt(n, p) & Q_isqrt(n, s)├ LS(sq4(n, p, p, 0, n: s))

В соответствии с правилом FB1 генерируется лемма:

FB1: LEMMA

P_isqrt(n, p) & Q_isqrt(n, s) IMPLIES P_sq4(n, p, p, 0, n) & Q_sq4(n, s)

Правило FB1 и все другие используемые далее правила описаны в приложении 1. Приведенная лемма завершает теорию isqrt. Представим начальную часть теории sq4.

sq4: THEORYBEGINn, p, s, q, k, y: VAR natP_sq4(n, p, k, q, y): bool =p >= 0 & n < 2^(2*p) & k <= p & q^2 <= n & n < (q + 2^k)^2 & y = n - q^2Q_sq4(n, s): bool = s^2 <= n & n < (s + 1)^2satisfy_spec: LEMMAP_sq4(n, p, k, q, y) IMPLIES EXISTS s: Q_sq4(n, s)m(k): nat = k

Целью является доказательство истинности правила:

FR1: Induct(k) & P_sq4(n, p, k, q, y) & Q_sq4(n, s)├ LS(<тело sq4>).

В соответствии с правилом FC1 для первой альтернативы условного оператора генерируется лемма:

FC1: LEMMA

P_sq4(n, p, k, q, y) & Q_sq4(n, s) & k = 0 IMPLIES s = q.

В соответствии с правилом FC2 для второй альтернативы условного оператора генерируется цель:

FC2: Induct(k) & P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 ├

LS(<вторая альтернатива условного>).

По правилу FS5 для оператора суперпозиции генерируется лемма:

FS5: LEMMA

P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 IMPLIES k – 1 >= 0.

По правилу FS6 для оператора суперпозиции генерируется цель:

FS6: Induct(k) & P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 &

t = 2^((k-1)*2) + q * 2^k ├

LS(if (y < t) sq4(n, p, k - 1, q, y: s) else sq4(n, p, k - 1, q + 2^(k-1), y – t: s)).

В соответствии с правилом FC1 для первой альтернативы условного оператора генерируется цель:

FC1: Induct(k) & P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 &

t = 2^((k-1)*2) + q * 2^k & y < t ├ LS(sq4(n, p, k - 1, q, y: s)).

По правилу FB3 для рекурсивного вызова sq4(n, p, k - 1, q, y: s) генерируется лемма:

FB3: LEMMA

P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 &

t = 2^((k-1)*2) + q * 2^k & y < t

IMPLIES m(k - 1) < m(k) & P_sq4(n, p, k - 1, q, y) & Q_sq4(n, s).

В соответствии с правилом FC2 для второй альтернативы условного оператора генерируется цель:

FC2: Induct(k) & P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 &

t = 2^((k-1)*2) + q * 2^k & & NOT y < t ├

LS(sq4(n, p, k - 1, q + 2^(k-1), y – t: s)).

По правилу FB3 для рекурсивного вызова sq4(n, p, k - 1, q + 2^(k-1), y – t: s) генерируется лемма:

FB3.1: LEMMA

P_sq4(n, p, k, q, y) & Q_sq4(n, s) & NOT k = 0 & t = 2^((k-1)*2) + q * 2^k &

NOT y < t IMPLIES

m(k - 1) < m(k) &

P_sq4(n, p, k - 1, bv2nat(nat2bv(q) OR nat2bv(2^(k - 1))), y – t) &

Q_sq4(n, s).

На этом завершается генерация формул корректности теории sq4.

Для доказательства леммы FF3.1 сначала требуется доказать эквивалентность выражений q or 2^(k-1) и q + 2^(k-1), для чего необходимо будет доказать лемму:

or_eq_plus: LEMMA

k > 0 & k < p & mod(q, 2^k) = 0 IMPLIES

bv2nat(nat2bv(q) OR nat2bv(2^(k - 1))) = q + 2^(k - 1).

Условие mod(q, 2^k) = 0 абсолютно необходимо для доказательства леммы, поэтому требуется включить его в состав предусловия P_sq4. Как следствие, будет необходимо доказывать истинность этого условия для второго вызова sq4, что реализуется с использованием дополнительной леммы:

mod0_2k: LEMMA

k > 0 & mod(q, 2^k) = 0 IMPLIES mod(2^(k - 1) + q, 2^(k - 1)) = 0.

Доказательство леммы or_eq_plus оказалось на порядок сложнее доказательства всех остальных лемм. Ее доказательство использовало следующие вспомогательные леммы, включенные в теорию sq4:

fill_eq_bv0: LEMMA FORALL (k:posnat): fill[k](FALSE) = nat2bv[k](0)

or_symms: LEMMA FORALL (k:posnat):

FORALL (A, B: bvec[k]): (A OR B) = (B OR A)

mod0_2k_1: LEMMA k > 0 & mod(q, 2^k) = 0 IMPLIES mod(q, 2 ^ (k - 1)) = 0

mult2_ge0: LEMMA d > 0 & q = d * x IMPLIES x >= 0

nat_div_ex: LEMMA d > 0 & mod(q, d) = 0 IMPLIES EXISTS x: q = d * x

 

le_exp2p_k: LEMMA k < p & q < exp2(p) & q = x * exp2(k) IMPLIES

x < exp2(p - k)

le_exp2p: LEMMA p >= 0 & n < 2^(2*p) & q^2 <= n IMPLIES q < exp2(p + 1)

 

x: VAR nat

bv2n_or_d: LEMMA

k > 0 & d > 0 & x < exp2(d) &

(nat2bv[d](div(x * exp2(k), exp2(k))) OR nat2bv[d](div(exp2((k - 1)), exp2(k)))) =

nat2bv[d](x)

IMPLIES

bv2nat[d]((nat2bv[d](div(x * exp2(k), exp2(k))) OR

nat2bv[d](div(exp2((k - 1)), exp2(k))))) = x

 

or_eq_bvd: LEMMA

k > 0 & d > 0 & div(exp2(k - 1), exp2(k)) = 0 & div(x * exp2(k), exp2(k)) = x &

div(x * exp2(k), exp2(k)) < exp2(d)

IMPLIES

(nat2bv[d](div(x * exp2(k), exp2(k))) OR nat2bv[d](div(exp2((k - 1)), exp2(k))))

= (nat2bv[d](x) OR nat2bv[d](0)).

При доказательстве or_eq_plus использовались также леммы из девяти разных библиотек, поставляемых с PVS. Последние две леммы появились при попытке обойти ошибку системы PVS.

Собственная библиотека fl.pvs, включающая пять лемм, использовалась при доказательстве сгенерированных лемм.

Вот итоговая выдача о результатах доказательства основных теорий:

Proof summary for theory sq4

P_sq4_TCC1...........................proved - complete [shostak](0.15 s)

P_sq4_TCC2...........................proved - complete [shostak](0.16 s)

Q_sq4_TCC1...........................proved - complete [shostak](0.11 s)

Q_sq4_TCC2...........................proved - complete [shostak](0.11 s)

satisfy_spec.............................proved - complete [shostak](5.54 s)

FC1..........................................proved - complete [shostak](4.01 s)

FS5..........................................proved - complete [shostak](4.56 s)

mod0_2k_1_TCC1..................proved - complete [shostak](1.04 s)

mod0_2k_1.............................proved - complete [shostak](2.33 s)

FF3_TCC1..............................proved - complete [shostak](3.27 s)

FF3..........................................proved - complete [shostak](7.34 s)

fill_eq_bv0_TCC1..................proved - complete [shostak](0.20 s)

fill_eq_bv0...............................proved - complete [shostak](0.43 s)

or_symms.................................proved - complete [shostak](0.35 s)

or_eq_ex...................................proved - complete [shostak](0.15 s)

bv2n_or_d_TCC1.....................proved - complete [shostak](1.39 s)

bv2n_or_d_TCC2.....................proved - complete [shostak](0.40 s)

bv2n_or_d_TCC3.....................proved - complete [shostak](7.67 s)

bv2n_or_d.................................proved - complete [shostak](0.25 s)

or_eq_bvd_TCC1......................proved - complete [shostak](0.30 s)

or_eq_bvd_TCC2.....................proved - complete [shostak](2.23 s)

or_eq_bvd_TCC3.....................proved - complete [shostak](1.53 s)

or_eq_bvd_TCC4.....................proved - complete [shostak](2.16 s)

or_eq_bvd.................................proved - complete [shostak](0.22 s)

mult2_ge0.................................proved - complete [shostak](1.12 s)

nat_div_ex_TCC1.....................proved - complete [shostak](0.21 s)

nat_div_ex................................proved - complete [shostak](1.94 s)

le_exp2p_k_TCC1....................proved - complete [shostak](0.77 s)

le_exp2p_k................................proved - complete [shostak](1.08 s)

lt_trans......................................proved - complete [shostak](0.32 s)

le_exp2p_TCC1........................proved - complete [shostak](0.15 s)

le_exp2p....................................proved - complete [shostak](2.02 s)

or_eq_plus_TCC1.....................proved - complete [shostak](5.14 s)

or_eq_plus.................................unfinished [shostak](29.92 s)

mod0_2k_TCC1........................proved - complete [shostak](1.17 s)

mod0_2k....................................proved - complete [shostak](3.58 s)

FF3_1_TCC1.............................proved - complete [shostak](3.28 s)

FF3_1_TCC2.............................proved - complete [shostak](6.98 s)

FF3_1_TCC3.............................proved - complete [shostak](1.88 s)

FF3_1_TCC4.............................proved - complete [shostak](4.57 s)

FF3_1.........................................proved - incomplete [shostak](15.20 s)

Theory totals: 41 formulas, 41 attempted, 40 succeeded (125.23 s)

 

Proof summary for theory fl

uniq_flp......................................proved - complete [shostak](0.64 s)

floor_int.....................................proved - complete [shostak](0.12 s)

sq_2p_TCC1..............................proved - complete [shostak](0.10 s)

sq_2p..........................................proved - complete [shostak](0.10 s)

lt_m............................................proved - complete [shostak](0.64 s)

lt_not..........................................proved - complete [shostak](0.29 s)

Theory totals: 6 formulas, 6 attempted, 6 succeeded (1.89 s)

 

Proof summary for theory isqrt

Q_isqrt_TCC1...........................proved - complete [shostak](0.11 s)

Q_isqrt_TCC2...........................proved - complete [shostak](0.11 s)

satisfy_spec...............................proved - complete [shostak](3.09 s)

FB1............................................proved - complete [shostak](2.91 s)

Theory totals: 4 formulas, 4 attempted, 4 succeeded (6.22 s)

 

Grand Totals: 51 proofs, 51 attempted, 50 succeeded (133.34 s)

В таблице леммы с именем ***_TCC генерируются системой PVS для доказательства условий совместимости типов выражений, используемых в основных леммах.

Из всех перечисленных лемм недоказанной осталась лемма or_eq_plus. Ее доказательство завершилось секвентом:

or_eq_plus.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1:

 

[-1] bv2nat[p - k]

((nat2bv[p - k](div(x * exp2(k), exp2(k))) OR nat2bv[p - k]

(div(exp2((k - 1)), exp2(k)))))

= x

[-2] k > 0

[-3] k < p

[-4] q < exp2(p)

|-------

[1] bv2nat[p - k]

((nat2bv[p - k](div(x * exp2(k), exp2(k))) OR

nat2bv[p - k](div(exp2((k - 1)), exp2(k)))))

= x

 

Rule?

Здесь формулы [-1] и [1] тождественны, а значит, лемма доказана, хотя PVS не способна распознать такой простой факт, что свидетельствует о явной ошибке PVS.




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 328; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.046 сек.