Module Counter

Counters for the instrumented semantics.

Require Import Coqlib.
Require Import Maps.
Require Import AST.
Require Import Integers.
Require Import Values.
Require Import Events.
Require Import Memory.
Require Import Globalenvs.
Require Import Smallstep.
Require Import Op.
Require Import Registers.
Require Import RTL.

Open Scope nat_scope.

Definition counter := PMap.t nat.

Definition init_counter : counter := PMap.init 0.

Definition reset_counters (filter:list node) (cs : counter) : counter :=
    List.fold_right (fun n cs0 => cs0 # n <- 0) cs filter.

Definition inc_counter (n : node) (cs : counter) : counter :=
  cs # n <- (cs !! n + 1).

Lemma init_counters_zero:
  forall n,
    init_counter # n = 0.
Proof.
  intros.
  unfold init_counter.
  apply PMap.gi.
Qed.