apply IsPrefix.of
case hprefix
w : Nat
aig : AIG BVBit
expr : BVExpr w
assign : Assignment
start : Nat
hstart : start < aig.decls.size
⊢ IsPrefix { aig := aig, ref := { gate := start, hgate := hstart } }.aig.decls (go aig expr).val.aig.decls
case hprefix.idx_eq
w : Nat
aig : AIG BVBit
expr : BVExpr w
assign : Assignment
start : Nat
hstart : start < aig.decls.size
⊢ ∀ (idx : Nat) (h : idx < { aig := aig, ref := { gate := start, hgate := hstart } }.aig.decls.size),
    (go aig expr).val.aig.decls[idx] = { aig := aig, ref := { gate := start, hgate := hstart } }.aig.decls[idx]

case hprefix.size_le
w : Nat
aig : AIG BVBit
expr : BVExpr w
assign : Assignment
start : Nat
hstart : start < aig.decls.size
⊢ { aig := aig, ref := { gate := start, hgate := hstart } }.aig.decls.size ≤ (go aig expr).val.aig.decls.size