comp.lang.ada
 help / color / mirror / Atom feed
From: "Yannick Duchêne (Hibou57)" <yannick_duchene@yahoo.fr>
Subject: Re: Lost in translation (with SPARK user rules)
Date: Thu, 27 May 2010 12:55:04 +0200
Date: 2010-05-27T12:55:04+02:00	[thread overview]
Message-ID: <op.vdc1x3ctule2fv@garhos> (raw)
In-Reply-To: op.vdcuhhymule2fv@garhos

Le Thu, 27 May 2010 10:13:55 +0200, Yannick Duchêne (Hibou57)  
<yannick_duchene@yahoo.fr> a écrit:
> Finally, there is a work-around: if the Simplifier expect an expression  
> which exactly match the one provided as a user rule, and there is not a  
> direct matching expression in the source, then just use Simplifier's  
> embedded rules to prove an expression is equivalent to the one the  
> Simplifier expect an exact match.
>
> That is, if there a user rule of the form
>
>     my_rule(1) Conclusion_1 may_be_deduced_from [Expression_1].
>
> and the source unfortunately contains only
>
>     Expression_2
>
> then try something like
>
>     --# check Expression_2 -> Intermediate_Expression(1);
>     --# check ...;
>     --# check ...;
>     --# check Intermediate_Expression(N) -> Expression_1;
>
> and here it is.
>

Unfortunately, I came into another trouble. I was trying this, and used  
intermediate variables to help. But Simplifier insist on using expressions  
instead of variables, so it can't find a match.

An example will be more expressive:

Here is an excerpt of a source (T is a modular type):

    ...
    --# check T'Pos (B) >= 0; -- Check #1
    --# check T'Pos (B) <= 1; -- Check #2
    --# check (T'Pos (B) = 0) or (T'Pos (B) = 1); -- Check #3
    ...

Here is a rule in a user rules file:

    my_rule(1): (X=0) or (X=1) may_be_deduced_from [ integer(X), X>=0, X<=1  
].

And Simplifier fails to prove Check #3 ; an excerpt of the *.SIV file  
shows why (conclusion associated to Check #3):

    C1:    bit__and(v, 1) = 0 or bit__and(v, 1) = 1 .

It replaces B with the source expression of the value of B and is thus  
unable to find a match with the rule. By the way, it drops Check #1 and  
Check #2, which does not appears at all in the hypotheses list (possibly  
it seems to much obvious to Simplifier).

I've tried to use an Assert instead of a Check, this did not change  
anything.

So if Simplifier requires an exact match to user rules, is there a way to  
avoid the simplifier to brake any attempt to prove an expression match a  
rule ?

-- 
There is even better than a pragma Assert: a SPARK --# check.
--# check C and WhoKnowWhat and YouKnowWho;
--# assert Ada;
--  i.e. forget about previous premises which leads to conclusion
--  and start with new conclusion.



  reply	other threads:[~2010-05-27 10:55 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-26 10:09 Lost in translation (with SPARK user rules) Yannick Duchêne (Hibou57)
2010-05-26 10:38 ` Phil Thornley
2010-05-26 10:57   ` Yannick Duchêne (Hibou57)
2010-05-26 14:15     ` Pascal Obry
2010-05-26 14:28       ` Dmitry A. Kazakov
2010-05-26 19:28         ` Yannick Duchêne (Hibou57)
2010-05-26 20:14           ` Dmitry A. Kazakov
2010-05-26 21:14             ` Yannick Duchêne (Hibou57)
2010-05-26 21:15               ` Yannick Duchêne (Hibou57)
2010-05-26 22:01             ` Peter C. Chapin
2010-05-27 12:32               ` Mark Lorenzen
2010-05-27 18:34               ` Pascal Obry
2010-05-27 19:18                 ` Yannick Duchêne (Hibou57)
2010-05-28  9:39                 ` Maciej Sobczak
2010-05-28 11:57                 ` SPARK and testing. Was: " Peter C. Chapin
2010-05-28 12:59                   ` SPARK and testing Peter C. Chapin
2010-05-28 23:06                     ` Yannick Duchêne (Hibou57)
2010-05-26 19:16       ` Lost in translation (with SPARK user rules) Yannick Duchêne (Hibou57)
2010-05-26 19:32         ` Pascal Obry
2010-05-26 20:56           ` Yannick Duchêne (Hibou57)
2010-05-26 22:06           ` Peter C. Chapin
2010-05-27 18:39             ` Pascal Obry
2010-05-26 22:17         ` Peter C. Chapin
2010-05-27 10:11       ` Sockets package in SPARK (Was: Lost in translation (with SPARK user rules)) Jacob Sparre Andersen
2010-05-27 18:41         ` Pascal Obry
2010-05-27 19:20           ` Yannick Duchêne (Hibou57)
2010-05-28  7:43             ` Sockets package in SPARK Jacob Sparre Andersen
2010-05-27  8:13     ` Lost in translation (with SPARK user rules) Yannick Duchêne (Hibou57)
2010-05-27 10:55       ` Yannick Duchêne (Hibou57) [this message]
2010-05-27 11:32         ` Yannick Duchêne (Hibou57)
2010-05-27 11:41           ` Phil Thornley
2010-05-27 12:42             ` Yannick Duchêne (Hibou57)
2010-05-27 12:22         ` stefan-lucks
2010-05-27 11:37           ` Yannick Duchêne (Hibou57)
2010-05-27 11:57           ` Phil Thornley
2010-05-27 12:36             ` Yannick Duchêne (Hibou57)
2010-05-27 13:38               ` Phil Thornley
2010-06-03  2:44                 ` Yannick Duchêne (Hibou57)
2010-05-27 19:53 ` Warren
2010-05-29 23:03 ` Yannick Duchêne (Hibou57)
2010-05-30  6:55   ` Yannick Duchêne (Hibou57)
2010-05-30  9:30     ` Phil Thornley
2010-05-30  9:46       ` Yannick Duchêne (Hibou57)
2010-05-30  9:26   ` Phil Thornley
2010-05-30  9:57     ` Yannick Duchêne (Hibou57)
2010-06-01  5:42 ` Yannick Duchêne (Hibou57)
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox