src/HOL/TLA/Buffer/Buffer.thy
author haftmann
Thu, 19 Jun 2025 17:15:40 +0200
changeset 82734 89347c0cc6a3
parent 66453 cc19f7ca2ed6
permissions -rw-r--r--
treat map_filter similar to list_all, list_ex, list_ex1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41589
bbd861837ebc tuned headers;
wenzelm
parents: 21624
diff changeset
     1
(*  Title:      HOL/TLA/Buffer/Buffer.thy
bbd861837ebc tuned headers;
wenzelm
parents: 21624
diff changeset
     2
    Author:     Stephan Merz, University of Munich
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     3
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
     5
section \<open>A simple FIFO buffer (synchronous communication, interleaving)\<close>
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     6
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     7
theory Buffer
66453
cc19f7ca2ed6 session-qualified theory imports: isabelle imports -U -i -d '~~/src/Benchmarks' -a;
wenzelm
parents: 62145
diff changeset
     8
imports "HOL-TLA.TLA"
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
     9
begin
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    11
(* actions *)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    12
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    13
definition BInit :: "'a stfun \<Rightarrow> 'a list stfun \<Rightarrow> 'a stfun \<Rightarrow> stpred"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    14
  where "BInit ic q oc == PRED q = #[]"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    15
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    16
definition Enq :: "'a stfun \<Rightarrow> 'a list stfun \<Rightarrow> 'a stfun \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    17
  where "Enq ic q oc == ACT (ic$ \<noteq> $ic)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    18
                         \<and> (q$ = $q @ [ ic$ ])
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    19
                         \<and> (oc$ = $oc)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    21
definition Deq :: "'a stfun \<Rightarrow> 'a list stfun \<Rightarrow> 'a stfun \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    22
  where "Deq ic q oc == ACT ($q \<noteq> #[])
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    23
                         \<and> (oc$ = hd< $q >)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    24
                         \<and> (q$ = tl< $q >)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    25
                         \<and> (ic$ = $ic)"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    26
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    27
definition Next :: "'a stfun \<Rightarrow> 'a list stfun \<Rightarrow> 'a stfun \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    28
  where "Next ic q oc == ACT (Enq ic q oc \<or> Deq ic q oc)"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    29
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    30
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    31
(* temporal formulas *)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    32
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    33
definition IBuffer :: "'a stfun \<Rightarrow> 'a list stfun \<Rightarrow> 'a stfun \<Rightarrow> temporal"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    34
  where "IBuffer ic q oc == TEMP Init (BInit ic q oc)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    35
                                  \<and> \<box>[Next ic q oc]_(ic,q,oc)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    36
                                  \<and> WF(Deq ic q oc)_(ic,q,oc)"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    37
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    38
definition Buffer :: "'a stfun \<Rightarrow> 'a stfun \<Rightarrow> temporal"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    39
  where "Buffer ic oc == TEMP (\<exists>\<exists>q. IBuffer ic q oc)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    40
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    41
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    42
(* ---------------------------- Data lemmas ---------------------------- *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    43
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    44
(*FIXME: move to theory List? Maybe as (tl xs = xs) = (xs = [])"?*)
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    45
lemma tl_not_self [simp]: "xs \<noteq> [] \<Longrightarrow> tl xs \<noteq> xs"
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    46
  by (auto simp: neq_Nil_conv)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    47
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    48
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    49
(* ---------------------------- Action lemmas ---------------------------- *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    50
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    51
(* Dequeue is visible *)
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    52
lemma Deq_visible: "\<turnstile> <Deq ic q oc>_(ic,q,oc) = Deq ic q oc"
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    53
  apply (unfold angle_def Deq_def)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    54
  apply (safe, simp (asm_lr))+
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    55
  done
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    56
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    57
(* Enabling condition for dequeue -- NOT NEEDED *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    58
lemma Deq_enabled: 
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    59
    "\<And>q. basevars (ic,q,oc) \<Longrightarrow> \<turnstile> Enabled (<Deq ic q oc>_(ic,q,oc)) = (q \<noteq> #[])"
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    60
  apply (unfold Deq_visible [temp_rewrite])
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    61
  apply (force elim!: base_enabled [temp_use] enabledE [temp_use] simp: Deq_def)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    62
  done
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    63
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    64
(* For the left-to-right implication, we don't need the base variable stuff *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    65
lemma Deq_enabledE: 
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    66
    "\<turnstile> Enabled (<Deq ic q oc>_(ic,q,oc)) \<longrightarrow> (q \<noteq> #[])"
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    67
  apply (unfold Deq_visible [temp_rewrite])
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    68
  apply (auto elim!: enabledE simp add: Deq_def)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    69
  done
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    70
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 6255
diff changeset
    71
end