halten wird ich SPARK.Text_IO aus dem spark_io Beispiel in SPARK Entdeckung 2017.Wie um zu beweisen, eine SPARK.Text_IO Verfahren Voraussetzung
Mein Problem ist, dass ich viele der SPARK.Text_IO Verfahren eine Voraussetzung, dass ich Ich weiß nicht, wie ich anfangen soll zu beweisen, dass die Standardeingabe lesbar ist und wir nicht am Dateiende sind. Mein Versuch, wie im folgenden Code dargestellt, bestand darin, die Vorbedingung der SPARK.Text_IO-Prozedur (Get_Immediate in diesem Fall) der Voraussetzung der aufrufenden Prozedur hinzuzufügen und zu denken, dass dies dem Beweiser garantieren könnte, dass diese Voraussetzung wahr ist . Es hat nicht funktioniert. Hier ist ein Beispiel dafür, was ich spreche:
Test-spec:
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;
Prüfkörper:
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;
Der Fehler der Prover ist auf der Get_Immediate Linie gibt „Medium: Voraussetzung könnte fail "Der Prototyp und der Vertrag des Get_Immediate-Verfahrens sind unten:
Wie? Sie beweisen SPARK, dass Standard_Input lesbar ist und dass es nicht das Ende der Datei ist?
Ich hätte angenommen, dass Standard_Input als lesbar deklariert wurde. Externe Dateien sind knifflig, da Ihr Programm nicht der einzige ist, der sie beeinflusst. –
Ja, ich verstehe nicht, wie SPARK davon ausgehen kann, über externe Dateien nachzudenken. Wäre es besser, wenn alle Text_IO vollständig Ada wäre? –
Ich habe nicht ernsthaft versucht, SPARK 2014 mit I/O (oder Datenbankzugriff) zu kombinieren, aber es ist mein Eindruck, dass Sie an andere Lösungen denken müssen als an Ada. –