文字列の長さの公理を定義するときは、reads 句を使用する必要があります。
/*@
predicate Length_of_str_is{L}(char *s, integer n) =
(0 <= n) && \valid(s+(0..n)) && s[n] == 0 &&
\forall integer i; 0 <= i < n ==> s[i] != 0;
axiomatic LengthAxiomatic{
logic integer Length{L}(char *s) reads s[..];
axiom str_length{L}:
\forall integer n, char *s; Length_of_str_is(s, n) ==> Length(s) == n;
}
@*/
ただし、任意の領域の読み取り句は WP ではまだ実装されていません。他にどのような代替手段がありますか?
string.h からいくつかの関数を証明するために、この公理が必要です (例: strcmp)