def ASet.Reads

bend-ml-tensor-array@0.1.19.0 · main.bend:2169

import bend-ml-tensor-array@0.1.19.0/main.bend as BendMlTensorArray
import Base

2169# ASet.Reads: what one pass over the tree a proves about a write along (n, j, v, z) and a read along (n, k, w):
2170# 1. the pair the write's descent returns is (the written array, the old value);
2171# 2. the read of a returns a pair (first component, second);
2172# 3. so does the read of the written array;
2173# 4. if the descents split, the read finds the same value in the written array as in a.
2174def ASet.Reads(-T: Data, -a: Array<T>, -n: U32, -j: U32, -v: T, -z: Bool, -k: U32, -w: Bool) -> Type:
2175  {(ASet.NA(T, a, n, j, v, z), Pair.snd(Array<T>, T, ASet.G(T, a, n, j, v, z))) == ASet.G(T, a, n, j, v, z) : Array<T> & T} & {(Pair.fst(Array<T>, T, Array.get.go(T, a, n, k, w)), Pair.snd(Array<T>, T, Array.get.go(T, a, n, k, w))) == Array.get.go(T, a, n, k, w) : Array<T> & T} & {(Pair.fst(Array<T>, T, Array.get.go(T, ASet.NA(T, a, n, j, v, z), n, k, w)), Pair.snd(Array<T>, T, Array.get.go(T, ASet.NA(T, a, n, j, v, z), n, k, w))) == Array.get.go(T, ASet.NA(T, a, n, j, v, z), n, k, w) : Array<T> & T} & (ASet.Apart(T, a, n, j, z, k, w) -> {Pair.snd(Array<T>, T, Array.get.go(T, ASet.NA(T, a, n, j, v, z), n, k, w)) == Pair.snd(Array<T>, T, Array.get.go(T, a, n, k, w)) : T}) & Unit

Uses (12)

Used by (3)