src/HOL/Data_Structures/Queue_Spec.thy
author wenzelm
Sun, 13 Dec 2020 23:11:41 +0100
changeset 72907 3883f536d84d
parent 72485 a0066948e7df
permissions -rw-r--r--
unused (see 29566b6810f7);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72389
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     1
(* Author: Tobias Nipkow *)
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     2
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     3
section \<open>Queue Specification\<close>
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     4
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     5
theory Queue_Spec
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     6
imports Main
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     7
begin
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     8
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
     9
text \<open>The basic queue interface with \<open>list\<close>-based specification:\<close>
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    10
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    11
locale Queue =
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    12
fixes empty :: "'q"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    13
fixes enq :: "'a \<Rightarrow> 'q \<Rightarrow> 'q"
72485
a0066948e7df renamed constant
nipkow
parents: 72389
diff changeset
    14
fixes first :: "'q \<Rightarrow> 'a"
72389
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    15
fixes deq :: "'q \<Rightarrow> 'q"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    16
fixes is_empty :: "'q \<Rightarrow> bool"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    17
fixes list :: "'q \<Rightarrow> 'a list"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    18
fixes invar :: "'q \<Rightarrow> bool"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    19
assumes list_empty:    "list empty = []"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    20
assumes list_enq:      "invar q \<Longrightarrow> list(enq x q) = list q @ [x]"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    21
assumes list_deq:      "invar q \<Longrightarrow> list(deq q) = tl(list q)"
72485
a0066948e7df renamed constant
nipkow
parents: 72389
diff changeset
    22
assumes list_first:    "invar q \<Longrightarrow> \<not> list q = [] \<Longrightarrow> first q = hd(list q)"
72389
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    23
assumes list_is_empty: "invar q \<Longrightarrow> is_empty q = (list q = [])"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    24
assumes invar_empty:   "invar empty"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    25
assumes invar_enq:     "invar q \<Longrightarrow> invar(enq x q)"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    26
assumes invar_deq:     "invar q \<Longrightarrow> invar(deq q)"
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    27
3d255ebe9733 Aded Queues
nipkow
parents:
diff changeset
    28
end