mirror of
https://github.com/AdaCore/why3.git
synced 2026-02-12 12:34:55 -08:00
32 lines
844 B
Plaintext
32 lines
844 B
Plaintext
|
|
module String
|
|
|
|
use int.Int
|
|
|
|
type char
|
|
constant dummy_char: char
|
|
|
|
type char_string = { length: int; chars: int -> char }
|
|
|
|
function ([]) (s: char_string) (i: int) : char = s.chars i
|
|
|
|
constant empty : char_string = { length = 0; chars = fun (_: int) -> dummy_char }
|
|
|
|
val get (s: char_string) (i:int) : char
|
|
requires { 0 <= i < s.length }
|
|
ensures { result = s.chars i }
|
|
|
|
function app (s1 s2: char_string) : char_string =
|
|
{ length = s1.length + s2.length;
|
|
chars = fun i ->
|
|
if i < s1.length then s1.chars i else s2.chars (i - s1.length) }
|
|
|
|
function sub (s: char_string) (ofs: int) (len: int) : char_string =
|
|
{ length = len; chars = fun i -> s.chars (i - ofs) }
|
|
|
|
predicate (==) (s1 s2: char_string) =
|
|
s1.length = s2.length /\
|
|
forall i:int. 0 <= i < s1.length -> s1.chars i = s2.chars i
|
|
|
|
end
|