SPARK Discovery 2017 の spark_io の例から SPARK.Text_IO を使用しています。
私の問題は、多くの SPARK.Text_IO プロシージャに、標準入力が読み取り可能であり、ファイルの終わりではないことを証明する方法がわからないという前提条件があることです。以下のコードに示されているように、私の試みは、SPARK.Text_IO プロシージャ (この場合は Get_Immediate) の前提条件を呼び出し元のプロシージャの前提条件に追加することでした。 . うまくいきませんでした。これが私が話していることの例です:
テスト仕様:
with SPARK.Ada.Text_IO; use SPARK.Ada.Text_IO;
package test with SPARK_Mode
is
continue_messages_key : Character := ' ';
procedure User_Wait_For_Continue_Messages_Key
with Global => (In_Out => Standard_Input,
Input => continue_messages_key),
Pre => Is_Readable (Standard_Input) and then
not End_Of_File;
end test;
試験体:
pragma SPARK_Mode(On);
package body test is
procedure User_Wait_For_Continue_Messages_Key
is
IR : Immediate_Result;
Avail : Boolean;
begin
loop
Get_Immediate(IR, Avail);
if Avail then
if IR.Status = Success then
if IR.Available = True then
if IR.Item = continue_messages_key then
return;
end if;
end if;
end if;
end if;
end loop;
end User_Wait_For_Continue_Messages_Key;
end test;
証明者が与えるエラーは、Get_Immediate の行「中: 前提条件が失敗する可能性があります」にあります。
procedure Get_Immediate (Item : out Character_Result)
with Global => (In_Out => Standard_Input),
Pre => Is_Readable (Standard_Input) and then
not End_Of_File,
Post => Is_Readable (Standard_Input) and
Name (Standard_Input) = Name (Standard_Input)'Old and
Form (Standard_Input) = Form (Standard_Input)'Old and
Is_Standard_Input (Standard_Input);
Standard_Input が読み取り可能であり、ファイルの終わりではないことを SPARK にどのように証明しますか?