Theorem: AIG.RefStream.denote_zip (LeanSAT/AIG/RefStreamOperator.lean)

State before:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : ZipTarget aig len
⊢ ∀ (idx : Nat) (hidx : idx < len),
    ⟦{ aig := (zip aig target).aig, ref := (zip aig target).stream.getRef idx hidx }, assign⟧ =
      ⟦target.func aig { lhs := target.input.lhs.getRef idx hidx, rhs := target.input.rhs.getRef idx hidx }, assign⟧
Tactic:
intros
State after:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : ZipTarget aig len
idx✝ : Nat
hidx✝ : idx✝ < len
⊢ ⟦{ aig := (zip aig target).aig, ref := (zip aig target).stream.getRef idx✝ hidx✝ }, assign⟧ =
    ⟦target.func aig { lhs := target.input.lhs.getRef idx✝ hidx✝, rhs := target.input.rhs.getRef idx✝ hidx✝ }, assign⟧

State before:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : ZipTarget aig len
idx✝ : Nat
hidx✝ : idx✝ < len
⊢ ⟦{ aig := (zip aig target).aig, ref := (zip aig target).stream.getRef idx✝ hidx✝ }, assign⟧ =
    ⟦target.func aig { lhs := target.input.lhs.getRef idx✝ hidx✝, rhs := target.input.rhs.getRef idx✝ hidx✝ }, assign⟧
Tactic:
apply zip.denote_go
State after:
case a
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : ZipTarget aig len
idx✝ : Nat
hidx✝ : idx✝ < len
⊢ 0 ≤ idx✝

State before:
case a
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : ZipTarget aig len
idx✝ : Nat
hidx✝ : idx✝ < len
⊢ 0 ≤ idx✝
Tactic:
omega
State after:
no goals