Hello Denis,

As far as I know, the decomposition of the quantifications over tuples
is done quite early in the Why3 processing ("eval_match" in the WP calculus)

Using a record structure is probably a good workaround, and I don't
think you need to bother with any "model_projection" labels for that. With


type r = { a:bool; b:bool }

let bar (p "model" : r) : bool
  ensures { "model_vc" p.a \/ (not p.b) }
= True


I get (with why3 0.88.3)

$ why3 prove --get-ce -P CVC4,1.5 t.mlw
t.mlw Ex WP_parameter bar : Unknown (other) (0.00s)
Counter-example model:File t.mlw:
Line 5:
p.a = {"type" : "Boolean" , "val" : false }
p.b = {"type" : "Boolean" ,
"val" : true }
Line 6:
p.a = {"type" : "Boolean" , "val" : false }
p.b = {"type" : "Boolean" ,
"val" : true }




- Claude

Le 01/02/2018 à 15:30, Denis Cousineau a écrit :
> Dear list,
> I'm stucked with an apparently simple problem of counter-examples
> printing and I'd appreciate a lot if someone had a clue to help me.
> I have a Why3 formalization that deals with Bool tuples. And I'd like to
> print those tuples values when a counter-example is found.
> 
> Here's an example:
> 
> ***
> module Ex
> let bla (p "model" : (bool,bool)) : bool
> ensures { "model_vc" let a,b = p in a \/ (not b) }
> = True
> end
> 
> ***
> 
> This dummy example's only goal is to have cvc4 (or another prover)
> exhibit a counter-example with value (False,True) for "p".
> 
> When running why3 (0.87.3) on this example,
> ( why3 prove -P cvc4 --get-ce ex.mlw )
> the smt goal is the following:
> 
> ****
> (assert
> ;; WP_parameter_bla
>  ;; File "ex_poj_tuple_ce.mlw", line 2, characters 4-7
>   (not (forall ((p Bool) (p1 Bool)) (or (= p true) (not (= p1 true))))))
> 
> ****
> 
> The universal quantification on (bool,bool) is currified and we have now
> two universal quantifications on bool.
> 
> Unfortunately it seems that the counter-example mechanism does not
> remember this currification when giving back to the Why3 user the
> interpretation of the cvc4 counter-example model:
> 
> ***
> ex.mlw Ex WP_parameter bla : Unknown (0.00s)
> Counter-example model:File ex.mlw:
> Line 2:
> p = true
> Line 3:
> p = true
> 
> ***
> 
> (If I understand well, that "p" corresponds to the right member of the
> original "p").
> 
> To bypass this problem, I have thought of using a record structure with
> two boolean fields instead of a boolean pair and using "model
> projections" to print the counter-examples fields.
> 
> Does anyone have a(nother) clue to solve my problem ?
> 
> Thanks,
> 
> Denis Cousineau
> 
> 
> 
> ---
> *Denis * *Cousineau*, Ph.D
> デニ クズノ
> Researcher
> Formal Methods: Theory, Methodology and Tools
> Information and Network Systems (INS) Team
> Communication & Information Systems (CIS) Division
> *Mitsubishi Electric R&D Centre Europe* (MERCE)
> Tel: +33(0)2 23 45 58 36  Fax: +33 (0)2 23 45 58 59
> http://www.fr.mitsubishielectric-rce.eu
> 
> 
> 
> _______________________________________________
> Why3-club mailing list
> Why3-club@lists.gforge.inria.fr
> https://lists.gforge.inria.fr/mailman/listinfo/why3-club
> 

-- 
Claude Marché                          | tel: +33 1 69 15 66 08
INRIA Saclay - Île-de-France           |
Université Paris-sud, Bat. 650         | http://www.lri.fr/~marche/
F-91405 ORSAY Cedex                    |
_______________________________________________
Why3-club mailing list
Why3-club@lists.gforge.inria.fr
https://lists.gforge.inria.fr/mailman/listinfo/why3-club

Reply via email to