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] Jessie proof obligation not discharged?
- Subject: [Frama-c-discuss] Jessie proof obligation not discharged?
- From: MarkoSchuetz at web.de (Marko Schütz Schmuck)
- Date: Wed, 22 Aug 2012 17:12:05 -0400
Dear All,
I have the C code in stringExtra.c
#include <stddef.h>
#include "stringExtra.h"
/*@
@ predicate AbsentTail{L1,L2}(int e1, int e2, char c, char *array) =
@ \forall int i;
@ e2+1 <= i && i <= e1
@ ==> \at(array[i],L1) != c;
@*/
/*@ requires endi >= 0 && \valid_range(array, 0, endi);
@ assigns \nothing;
@ behavior absent:
@ assumes \forall int i; 0 <= i <= endi ==> array[i] != c;
@ ensures \result == -1;
@ behavior present:
@ assumes \exists int i; 0 <= i <= endi ==> array[i] == c;
@ ensures 0 <= \result <= \at(endi, Pre);
@*/
int strprevchr(int endi, char c, const char array[]) {
/*@
@ loop invariant \at(endi,Pre) >= endi >= -1 && AbsentTail{Pre,Here}(\at(endi,Pre), \at(endi,Here), c, array);
@ loop variant endi;
@*/
while (endi >= 0 && array[endi] != c)
endi--;
return endi;
}
and in GWhy (using why 2) I see
strprevchr_ensures_present_po_3
endi: int32
c_0: int8
array_1: char_P pointer
char_P_array_2_alloc_table: char_P alloc_table
char_P_char_M_array_2: (char_P, int8) memory
H1: (exists i_1:int32,
0 <= integer_of_int32(i_1) and
integer_of_int32(i_1) <= integer_of_int32(endi) ->
integer_of_int8(select(char_P_char_M_array_2,
shift(array_1, integer_of_int32(i_1)))) = integer_of_int8(c_0)) and
(integer_of_int32(endi) >= 0 and
offset_min(char_P_array_2_alloc_table, array_1) <= 0 and
offset_max(char_P_array_2_alloc_table, array_1) >= integer_of_int32(endi))
mutable_endi: int32
H3: true
H4: (integer_of_int32(endi) >= integer_of_int32(mutable_endi) and
integer_of_int32(mutable_endi) >= -1 and
AbsentTail(endi, mutable_endi, c_0, array_1, char_P_char_M_array_2))
H14: integer_of_int32(mutable_endi) < 0
return: int32
H15: return = mutable_endi
______________
0 <= integer_of_int32(return)
and the ATPs do not discharge this PO.
H14 && H4 ==> mutable_endi == -1 and AbsentTail{..}(..) should become
\forall int i; 0 <= i && i <= endi ==> \at(array[i],L1) != c and,
together with H1, the PO should be discharged.
Am I misunderstanding/not seeing something here?
Thanks in advance and best regards,
Marko
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.gforge.inria.fr/pipermail/frama-c-discuss/attachments/20120822/d24b4f36/attachment.pgp>
- Follow-Ups:
- [Frama-c-discuss] Jessie proof obligation not discharged?
- From: Claude.Marche at inria.fr (Claude Marche)
- [Frama-c-discuss] Jessie proof obligation not discharged?
- From: Claude.Marche at inria.fr (Claude Marche)
- [Frama-c-discuss] Jessie proof obligation not discharged?
- Prev by Date: [Frama-c-discuss] Frama-C/Jessie first steps... problems with pointers
- Next by Date: [Frama-c-discuss] Jessie proof obligation not discharged?
- Previous by thread: [Frama-c-discuss] Work around for a bug with the Why3 back-end of Jessie
- Next by thread: [Frama-c-discuss] Jessie proof obligation not discharged?
- Index(es):
