def view_inj.go
lawful-arrays@0.1.0.0 · PROOF.bend:165
import lawful-arrays@0.1.0.0/PROOF.bend as PROOF
import Base
import lawful-arrays@0.1.0.0/defs.bend as D
import lawful-arrays@0.1.0.0/proof_base.bend as B
import lawful-arrays@0.1.0.0/proof_tree.bend as P
165def view_inj.go(-T: Data, -a: Array<T>, -b: Array<T>, +d: Nat,
166 ha: {D.full(T, a, d) == True{} : Bool}, hb: {D.full(T, b, d) == True{} : Bool},
167 h: {D.view(T, a) == D.view(T, b) : List<&2, T>}, ma: P.Mirror(T, a), mb: P.Mirror(T, b)) ->
168 {a == b : Array<T>}:
169 (ta, +ea) = ma
170 (tb, +eb) = mb
171 %ea : {_ == b : Array<T>}
172 %eb : {P.fromT(T, ta) == _ : Array<T>}
173 +h1 = B.subst(Array<T>, x => {D.view(T, x) == D.view(T, b) : List<&2, T>}, a, P.fromT(T, ta),
174 Equal.sym(Array<T>, P.fromT(T, ta), a, ea), h)
175 +h2 = B.subst(Array<T>, x => {D.view(T, P.fromT(T, ta)) == D.view(T, x) : List<&2, T>}, b, P.fromT(T, tb),
176 Equal.sym(Array<T>, P.fromT(T, tb), b, eb), h1)
177 P.view_inj_t(T, d, ta, tb, full_t(T, a, ta, d, ea, ha), full_t(T, b, tb, d, eb, hb), h2)