Frama-C-discuss mailing list archives
This page gathers the archives of the old Frama-C-discuss archives, that was hosted by Inria's gforge before its demise at the end of 2020. To search for mails newer than September 2020, please visit the page of the new mailing list on Renater.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Frama-c-discuss] Newbie question
- Subject: [Frama-c-discuss] Newbie question
- From: jens.gerlach at first.fraunhofer.de (Jens Gerlach)
- Date: Wed, 11 Nov 2009 09:33:20 +0100
- In-reply-to: <100653.83040.qm@web110603.mail.gq1.yahoo.com>
- References: <100653.83040.qm@web110603.mail.gq1.yahoo.com>
Dear Aaron, I can confirm that neither alt-ergo nor the other automatic provers prove your example from the tutorial. (I am running Beryllium on Mac OS X.) However, I can show you the specification of a function similar to max_seq.c The main difference is that our function max_element does not directly return the maximum value in the array but rather the index of the maximum element. (This allows, by the way, that max_element works for n == 0 as well.) You will also notice that our specification is slightly longer than that of max_seq.c This is partially due to the fact that we specify not only that our functions returns one maximum value but the _first_ maximum value in the array. In our example, both alt-ergo, z3, yices, cvc3, and simplify can proof the correctness of max_element. I think you can easily adopt our specification to the one needed for max_seq. Regards Jens Am 11.11.2009 um 06:02 schrieb Aaron Rocha: > > /*@ requires n > 0; > requires \valid(p+ (0..n-1)); > assigns \nothing; > ensures \forall int i; 0 <= i <= n-1 ==> \result >= p[i]; > ensures \exists int e; 0 <= e <= n-1 && \result == p[e]; > */ > int max_seq(int* p, int n) { > > int res = *p; > int i = 0; > > //@ ghost int e = 0; > /*@ loop invariant \forall integer j; 0 <= j <= i ==> res >= *(p+j); > loop invariant \valid(p+e) && p[e] == res; > */ > for(i = 0; i < n; i++) { > if (res < *p) { > res = *p; > //@ ghost e = i; > } > p++; > } > return res; > } > > Do you run frama-c on Linux? If so, what proof assistants are you using? If Coq is the way to go, is there some sort of gentle introduction on how to use Coq with Frama-c? > > Thanks in advance -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.gforge.inria.fr/pipermail/frama-c-discuss/attachments/20091111/2e16db35/attachment.htm -------------- next part -------------- A non-text attachment was scrubbed... Name: max_element.c Type: application/octet-stream Size: 723 bytes Desc: not available Url : http://lists.gforge.inria.fr/pipermail/frama-c-discuss/attachments/20091111/2e16db35/attachment.obj -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.gforge.inria.fr/pipermail/frama-c-discuss/attachments/20091111/2e16db35/attachment-0001.htm
- References:
- [Frama-c-discuss] Newbie question
- From: hxdg21 at yahoo.com (Aaron Rocha)
- [Frama-c-discuss] Newbie question
- Prev by Date: [Frama-c-discuss] Frama-C vs Ada/SPARK
- Next by Date: [Frama-c-discuss] Newbie question
- Previous by thread: [Frama-c-discuss] Newbie question
- Next by thread: [Frama-c-discuss] Newbie question
- Index(es):