Module device_temp

Require Import List.
Import ListNotations.
Require Import Relations.
Require Import util.
Require Import device.
Require Import ctypes.

Module dev_temp : DEV_Sig.

Device state, and initial state


  Definition t := unit.
  Definition init : t := tt.

Device operations interface
  Inductive ops_query_ : Type := temp_sample : unit -> ops_query_.
  Definition ops_query := ops_query_.

  Definition ops_response (q : ops_query): Type :=
    match q with
    | temp_sample _ => int
    end.

  Inductive op_sem_: forall q: ops_query, t -> ops_response q -> t -> Prop :=
  | sample: forall n,
      op_sem_
        (temp_sample tt) tt
        n tt.

  Definition op_sem := op_sem_.

Equivalence relation on device states. In the paper, we simplify the presentation, and we abstract from that equivalence relation, using bare equality.
  Definition equiv : relation t := fun x y => x = y.
  Lemma equiv_equiv: equivalence t equiv.
  Proof.
  split.
  - intros x; eapply eq_refl.
  - intros ? ? ?; eapply eq_trans.
  - intros ? ?; eapply eq_sym.
  Qed.

  Lemma op_sem_equiv: forall op_query op_resp dev1 dev2 dev3 dev4,
    op_sem op_query dev1 op_resp dev2 ->
    equiv dev1 dev3 ->
    op_sem op_query dev3 op_resp dev4 ->
    equiv dev2 dev4.
  Proof.
  intros.
  destruct dev2. destruct dev4. unfold equiv; auto.
  Qed.

End dev_temp.