Library Circuits.GENE.Memo





Require Export Arith_compl.
Require Export Lists_replace.
Require Export BV.

Definition addr := nat. Definition Memo := list BV. Definition MemoSize := length (A:=BV).
Definition MemoEmpty (n : nat) (v : BV) : Memo := list_const BV n v.

Definition MemoZone : Memo -> addr -> nat -> Memo := sublist BV.

Definition MemoRead : Memo -> addr -> Memo := elemlist BV.
Definition MemoWrite : Memo -> addr -> BV -> Memo := replace BV.

Definition AddrOK (m : Memo) (a : addr) : Prop := a < MemoSize m.

Definition MMemo (v : BV) : Memo := v :: nil.

Lemma read_write :
 forall (m : Memo) (a : addr) (v : BV),
 AddrOK m a -> MemoRead (MemoWrite m a v) a = MMemo v.
unfold Memo, AddrOK, MemoRead, MemoWrite, MMemo in |- *.
unfold MemoSize in |- *. intros. apply replace_ok; auto with v62.
Qed.