src/storage/certificates.bend

bendtorch-core@0.1.0.0 · 31 lines · 4 definitions

1import Base
2import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
3import bendtorch-core@0.1.0.0/src/storage/refinement.bend as Refinement
4import bendtorch-core@0.1.0.0/src/storage/clone.bend as Clone
5
6def get_result(-T: Data, +d: Nat, original: Array<T>, +i: U32, -result: Array<T> & T,
7  equal: {result == Array.get(T, original, i) : Array<T> & T},
8  valid: Model.Balanced(T, d, original)) -> Model.Balanced(T, d, Refinement.first(T, result)):
9  %Equal.sym(Array<T> & T, result, Array.get(T, original, i), equal) :
10    Model.Balanced(T, d, Refinement.first(T, _))
11  Refinement.law_get_balanced(T, d, original, i, valid)
12
13def set_result(-T: Data, +d: Nat, original: Array<T>, +i: U32, +value: T, -result: Array<T>,
14  equal: {result == Array.set(T, original, i, value) : Array<T>},
15  valid: Model.Balanced(T, d, original)) -> Model.Balanced(T, d, result):
16  %Equal.sym(Array<T>, result, Array.set(T, original, i, value), equal) : Model.Balanced(T, d, _)
17  Refinement.law_set_balanced(T, d, original, i, value, valid)
18
19def clone_first(-T: Data, +d: Nat, original: Array<T>, -result: Array<T> & Array<T>,
20  equal: {result == Array.clone(T, original) : Array<T> & Array<T>},
21  valid: Model.Balanced(T, d, original)) -> Model.Balanced(T, d, Pair.fst(Array<T>, Array<T>, result)):
22  %Equal.sym(Array<T> & Array<T>, result, Array.clone(T, original), equal) :
23    Model.Balanced(T, d, Pair.fst(Array<T>, Array<T>, _))
24  Clone.first_balanced(T, d, original, Clone.certify(T, d, original, valid))
25
26def clone_second(-T: Data, +d: Nat, original: Array<T>, -result: Array<T> & Array<T>,
27  equal: {result == Array.clone(T, original) : Array<T> & Array<T>},
28  valid: Model.Balanced(T, d, original)) -> Model.Balanced(T, d, Pair.snd(Array<T>, Array<T>, result)):
29  %Equal.sym(Array<T> & Array<T>, result, Array.clone(T, original), equal) :
30    Model.Balanced(T, d, Pair.snd(Array<T>, Array<T>, _))
31  Clone.second_balanced(T, d, original, Clone.certify(T, d, original, valid))