(** Alternative specifications with explicit bounds. *)

(* Specifications: *)
Lemma get_spec_in_bounds (s : string) (i : int) :
to_Z i < to_Z (length s) ->
char63_valid (get s i) /\
List.nth_error (to_list s) (to_nat i) = Some (get s i).
Lemma get_spec_not_in_bounds (s : string) (i : int) :
to_Z (length s) <= to_Z i ->
get s i = 0%uint63.
Lemma make_spec_valid_length (i : int) (c : char63) :
to_Z i <= to_Z max_length ->
to_list (make i c) = List.repeat (c land 255)%uint63 (to_nat i).
Lemma make_spec_invalid_length (i : int) (c : char63) :
to_Z max_length < to_Z i ->
to_list (make i c) = List.repeat (c land 255)%uint63 (to_nat max_length).
Lemma cat_spec_valid_length (s1 s2 : string) :
to_Z (length s1) + to_Z (length s2) <= to_Z max_length ->
to_list (cat s1 s2) = to_list s1 ++ to_list s2.