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)

Uses (13)

Used by (1)