From e2681e43cc7849d66425d5bc93565e9e177d229a Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Wed, 24 Jun 2026 19:29:28 +0200 Subject: Initial commit --- theories/basic_queue_spec.v | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 theories/basic_queue_spec.v (limited to 'theories/basic_queue_spec.v') diff --git a/theories/basic_queue_spec.v b/theories/basic_queue_spec.v new file mode 100644 index 0000000..d7a38e1 --- /dev/null +++ b/theories/basic_queue_spec.v @@ -0,0 +1,30 @@ +From iris.program_logic Require Import atomic. +From iris.heap_lang Require Import notation proofmode. + +From lmpmc Require Import util. + +Record basic_queue {Σ} `{!heapGS Σ} := + BasicQueue + { new : val; + enqueue : val; + try_dequeue : val; + + queue_repr : loc → list val → iProp Σ; + #[global] queue_repr_timeless ℓ vs :: Timeless (queue_repr ℓ vs); + + new_spec : + {{{ True }}} + new #() + {{{ (ℓ_q : loc), RET #ℓ_q; queue_repr ℓ_q [] }}}; + + enqueue_spec (ℓ_q : loc) (data : val) : + ⊢ <<{ ∀∀ vs, queue_repr ℓ_q vs }>> + enqueue #ℓ_q data @ ∅ + <<{ queue_repr ℓ_q (vs ++ [data]) | RET #() }>>; + + try_dequeue_spec (ℓ_q : loc) : + ⊢ <<{ ∀∀ vs, queue_repr ℓ_q vs }>> + try_dequeue #ℓ_q @ ∅ + <<{ queue_repr ℓ_q (tail vs) | RET (val_opt_hl (head vs)) }>>; + }. +#[global] Arguments basic_queue _ {_} : assert. -- cgit v1.3