unfold go at hgo
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
acc : aig.Ref
curr : Nat
hcurr : curr ≤ len
input : aig.RefStream len
res : Entrypoint α
hgo : go aig acc curr len input mkAndCached = res
⊢ (⟦{ aig := res.aig, ref := res.ref }, assign⟧ = true) =
    (⟦{ aig := aig, ref := acc }, assign⟧ = true ∧
      ∀ (idx : Nat) (hidx1 : idx < len), curr ≤ idx → ⟦{ aig := aig, ref := input.getRef idx hidx1 }, assign⟧ = true)
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
acc : aig.Ref
curr : Nat
hcurr : curr ≤ len
input : aig.RefStream len
res : Entrypoint α
hgo :
  (if hidx : curr < len then
      let res := aig.mkAndCached { lhs := acc, rhs := input.getRef curr hidx };
      let aig_1 := res.aig;
      let newAcc := res.ref;
      let input := input.cast ⋯;
      go aig_1 newAcc (curr + 1) len input mkAndCached
    else { aig := aig, ref := acc }) =
    res
⊢ (⟦{ aig := res.aig, ref := res.ref }, assign⟧ = true) =
    (⟦{ aig := aig, ref := acc }, assign⟧ = true ∧
      ∀ (idx : Nat) (hidx1 : idx < len), curr ≤ idx → ⟦{ aig := aig, ref := input.getRef idx hidx1 }, assign⟧ = true)