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

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

State before:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : MapTarget aig len
idx : Nat
hidx : idx < len
⊢ ⟦{ aig := (map aig target).aig, ref := (map aig target).stream.getRef idx hidx }, assign⟧ =
    ⟦target.func aig (target.stream.getRef idx hidx), assign⟧
Tactic:
unfold map
State after:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : MapTarget aig len
idx : Nat
hidx : idx < len
⊢ ⟦{ aig := (map.go aig 0 ⋯ empty target.stream target.func).aig,
        ref := (map.go aig 0 ⋯ empty target.stream target.func).stream.getRef idx hidx },
      assign⟧ =
    ⟦target.func aig (target.stream.getRef idx hidx), assign⟧

State before:
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : MapTarget aig len
idx : Nat
hidx : idx < len
⊢ ⟦{ aig := (map.go aig 0 ⋯ empty target.stream target.func).aig,
        ref := (map.go aig 0 ⋯ empty target.stream target.func).stream.getRef idx hidx },
      assign⟧ =
    ⟦target.func aig (target.stream.getRef idx hidx), assign⟧
Tactic:
apply map.denote_go
State after:
case a
α : Type
inst✝² : BEq α
inst✝¹ : Hashable α
inst✝ : DecidableEq α
aig✝ : AIG α
len : Nat
assign : α → Bool
aig : AIG α
target : MapTarget 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 : MapTarget aig len
idx : Nat
hidx : idx < len
⊢ 0 ≤ idx
Tactic:
omega
State after:
no goals