From: Ben Hocking <benjaminhocking@gmail.com>
Subject: Need help understanding SPARK substitution rules
Date: Wed, 20 Jun 2012 11:30:53 -0700 (PDT)
Date: 2012-06-20T11:30:53-07:00 [thread overview]
Message-ID: <84581b9d-040b-493b-a8af-ab3499001b5d@googlegroups.com> (raw)
I have the following math.ads:
========
package Math is
function IsPositive (InVal : in Integer) return Boolean;
--# return (InVal > 0);
function IsNegative (InVal : in Integer) return Boolean;
--# return (InVal < 0);
function AlwaysTrue (InVal : in Integer) return Boolean;
--# return True;
end Math;
========
and math.adb:
========
package body Math is
function IsPositive (InVal : in Integer) return Boolean is
begin
return (InVal > 0);
end IsPositive;
function IsNegative (InVal : in Integer) return Boolean is
begin
return (InVal < 0);
end IsNegative;
function AlwaysTrue (InVal : in Integer) return Boolean is
begin
--# check not (InVal > 0) -> InVal <= 0;
--# check not IsPositive(InVal) -> InVal <= 0;
--# check not (InVal < 0) -> InVal >= 0;
--# check not IsNegative(InVal) -> InVal >= 0;
return (not IsPositive(InVal) or not IsNegative(InVal));
end AlwaysTrue;
end Math;
========
The statement "check not (InVal > 0) -> InVal <= 0" is proven easily enough, but the next line ("check not IsPositive(InVal) -> InVal <= 0") is not, even though it's functionally equivalent. If I put the following line in math.rlu:
========
math_ispositive: ispositive(inval) may_be_replaced_by (inval > 0)
========
It now can prove it, and if I do the same thing with isnegative, the whole thing proves out (with the "return True" component being proven by ViCToR).
However, this seems like a very fragile way of assuring code correctness, so it reeks from "code smell". What is a better way of achieving this?
Thanks,
-Ben
next reply other threads:[~2012-06-20 18:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-20 18:30 Ben Hocking [this message]
2012-06-21 8:47 ` Need help understanding SPARK substitution rules Phil Thornley
2012-06-21 12:56 ` Ben Hocking
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox