Спецификация:
package PolyPack with SPARK_Mode is
type Vector is array (Natural range <>) of Integer;
function RuleHorner (X: Integer; A : Vector) return Integer
with
Pre => A'Length > 0 and A'Last < Integer'Last;
end PolyPack ;
Я хочу написать тело пакета PolyPack с Assert и loop_invariants, чтобы программа gnatprove могла доказать правильность моей функции RuleHorner.
Я пишу свою функцию Хорнер, но я не знаю, как поместить утверждения и loop_invariants в эту программу, чтобы доказать ее суть:
with Ada.Integer_Text_IO;
package body PolyPack with SPARK_Mode is
function RuleHorner (X: Integer; A : Vector) return Integer is
Y : Integer := 0;
begin
for I in 0 .. A'Length - 1 loop
Y := (Y*X) + A(A'Last - I);
end loop;
return Y;
end RuleHorner ;
end PolyPack ;
gnatprove:
overflow check might fail (e.g. when X = 2 and Y = -2)
overflow check might fail
проверка переполнения для строки Y: = (Y * X) + A (A'Last - I);
Может кто-нибудь помочь мне, как убрать проверку переполнения с помощью loop_invariants