ATSLIB/libats/gfarray
This package contains various functions for manipulating
generic arrays that are assigned the fully indexed array type.
Synopsis
dataview
gfarray_v
(
a:vt@ype+, addr, ilist
) =
| {l:addr}
gfarray_v_nil (a, l, ilist_nil) of ()
| {x:int}{xs:ilist}{l:addr}
gfarray_v_cons (a, l, ilist_cons (x, xs)) of
(stamped_vt (a, x) @ l, gfarray_v (a, l+sizeof(a), xs))
Synopsis
prfun
gfarray_v_sing
{a:vt@ype}{l:addr}{x:int}
(pf: stamped_vt (a, x) @ l): gfarray_v (a, l, ilist_sing(x))
Description
This proof function turns a proof of at-view into another proof of
singleton array-view.
Synopsis
prfun
gfarray_v_unsing
{a:vt@ype}{l:addr}{x:int}
(pf: gfarray_v (a, l, ilist_sing(x))): stamped_vt (a, x) @ l
Description
This proof function turns a proof of singleton array-view into another
proof of at-view.
Synopsis
prfun
gfarray_v_split
{a:vt0p}
{l:addr}
{xs:ilist}
{n:int}
{i:nat | i <= n}
(
pflen: LENGTH (xs, n)
, pfarr: gfarray_v (a, l, xs)
) : [xs1,xs2:ilist]
(
LENGTH (xs1, i)
, LENGTH (xs2, n-i)
, APPEND (xs1, xs2, xs)
, gfarray_v (a, l, xs1)
, gfarray_v (a, l+i*sizeof(a), xs2)
)
Description
This proof function splits a given proof of some array-view into
two proofs of adjacent array-views that are contained in the original
array-view.
Synopsis
prfun
gfarray_v_unsplit
{a:vt0p}
{l:addr}
{xs1,xs2:ilist}
{n1:int} (
pflen: LENGTH (xs1, n1)
, pfarr1: gfarray_v (a, l, xs1)
, pfarr2: gfarray_v (a, l+n1*sizeof(a), xs2)
) : [xs:ilist]
(
APPEND (xs1, xs2, xs), gfarray_v (a, l, xs)
)
Description
This proof function does precisely the opposite of what
gfarray_v_split does: It turns two proofs of adjacent
array-views into one proof of array-view that is the union of the two
adjacent array-views.
Synopsis
prfun
gfarray_v_extend
{a:vt0p}
{l:addr}
{xs:ilist}{x:int}{xsx:ilist}
{n:nat}
(
pflen: LENGTH (xs, n)
, pfsnoc: SNOC (xs, x, xsx)
, pfat: stamped_vt (a, x) @ l+n*sizeof(a)
, pfarr: gfarray_v (a, l, xs)
) : gfarray_v (a, l, xsx)
Synopsis
prfun
gfarray_v_unextend
{a:vt0p}
{l:addr}
{xs:ilist}
{n:int | n > 0}
(
pflen: LENGTH (xs, n)
, pfarr: gfarray_v (a, l, xs)
) : [xsf:ilist;x:int]
(
SNOC (xsf, x, xs)
, stamped_vt (a, x) @ l+(n-1)*sizeof(a), gfarray_v (a, l, xsf)
)
Synopsis
fun
{a:t0p}
gfarray_get_at
{l:addr}
{x0:int}{xs:ilist}
{i0:int}
(
pf1: NTH(x0, xs, i0)
, pf2: !gfarray_v (a, l, xs)
| gp0: ptr (l), i0: size_t (i0)
) :<> stamped_t (a, x0)
Description
This function returns the value stored at cell i of a given array.
Synopsis
fun
{a:t0p}
gfarray_set_at
{l:addr}
{x0:int}{xs1:ilist}{xs2:ilist}
{i0:int}
(
pf1: UPDATE(x0, xs1, i0, xs2)
, pf2: !gfarray_v(a, l, xs1) >> gfarray_v(a, l, xs2)
| gp0: ptr (l), i0: size_t (i0), x0: stamped_t (a, x0)
) :<!wrt> void
Description
This function stores a given value x into cell i of a given array.
Synopsis
fun
{a:vt0p}
gfarray_exch_at
{l:addr}
{x0:int}{x1:int}
{xs1:ilist}{xs2:ilist}
{i:int}
(
pf1: NTH(x1, xs1, i)
, pf2: UPDATE(x0, xs1, i, xs2)
, pf3: !gfarray_v (a, l, xs1) >> gfarray_v (a, l, xs2)
| p: ptr l, i: size_t i, x0: &stamped_vt (a, x0) >> stamped_vt (a, x1)
) :<!wrt> void
Description
This function exchanges values between a reference and a given array cell.