| author | paulson | 
| Thu, 21 Sep 2006 17:39:57 +0200 | |
| changeset 20662 | 9116dc6842e1 | 
| parent 19739 | c58ef2aa5430 | 
| child 27361 | 24ec32bee347 | 
| permissions | -rw-r--r-- | 
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/IOA/NTP/Sender.thy  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
2  | 
ID: $Id$  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
3  | 
Author: Tobias Nipkow & Konrad Slind  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
4  | 
*)  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
5  | 
|
| 17244 | 6  | 
header {* The implementation: sender *}
 | 
7  | 
||
8  | 
theory Sender  | 
|
9  | 
imports IOA Action  | 
|
10  | 
begin  | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
11  | 
|
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
12  | 
types  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
13  | 
'm sender_state = "'m list * bool multiset * bool multiset * bool * bool"  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
14  | 
(* messages #sent #received header mode *)  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
15  | 
|
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
16  | 
consts  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
17  | 
|
| 6468 | 18  | 
sender_asig :: "'m action signature"  | 
| 17244 | 19  | 
sender_trans  :: "('m action, 'm sender_state)transition set"
 | 
20  | 
sender_ioa    :: "('m action, 'm sender_state)ioa"
 | 
|
21  | 
sq :: "'m sender_state => 'm list"  | 
|
22  | 
ssent :: "'m sender_state => bool multiset"  | 
|
23  | 
srcvd :: "'m sender_state => bool multiset"  | 
|
24  | 
sbit :: "'m sender_state => bool"  | 
|
25  | 
ssending :: "'m sender_state => bool"  | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
26  | 
|
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
27  | 
defs  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
28  | 
|
| 17244 | 29  | 
sq_def: "sq == fst"  | 
30  | 
ssent_def: "ssent == fst o snd"  | 
|
31  | 
srcvd_def: "srcvd == fst o snd o snd"  | 
|
32  | 
sbit_def: "sbit == fst o snd o snd o snd"  | 
|
33  | 
ssending_def: "ssending == snd o snd o snd o snd"  | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
34  | 
|
| 17244 | 35  | 
sender_asig_def:  | 
36  | 
  "sender_asig == ((UN m. {S_msg(m)}) Un (UN b. {R_ack(b)}),
 | 
|
37  | 
                  UN pkt. {S_pkt(pkt)},
 | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
38  | 
                  {C_m_s,C_r_s})"
 | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
39  | 
|
| 17244 | 40  | 
sender_trans_def: "sender_trans ==  | 
41  | 
 {tr. let s = fst(tr);
 | 
|
42  | 
t = snd(snd(tr))  | 
|
43  | 
in case fst(snd(tr))  | 
|
44  | 
of  | 
|
45  | 
S_msg(m) => sq(t)=sq(s)@[m] &  | 
|
46  | 
ssent(t)=ssent(s) &  | 
|
47  | 
srcvd(t)=srcvd(s) &  | 
|
48  | 
sbit(t)=sbit(s) &  | 
|
49  | 
ssending(t)=ssending(s) |  | 
|
50  | 
R_msg(m) => False |  | 
|
51  | 
S_pkt(pkt) => hdr(pkt) = sbit(s) &  | 
|
52  | 
(? Q. sq(s) = (msg(pkt)#Q)) &  | 
|
53  | 
sq(t) = sq(s) &  | 
|
54  | 
ssent(t) = addm (ssent s) (sbit s) &  | 
|
55  | 
srcvd(t) = srcvd(s) &  | 
|
56  | 
sbit(t) = sbit(s) &  | 
|
57  | 
ssending(s) &  | 
|
58  | 
ssending(t) |  | 
|
59  | 
R_pkt(pkt) => False |  | 
|
60  | 
S_ack(b) => False |  | 
|
61  | 
R_ack(b) => sq(t)=sq(s) &  | 
|
62  | 
ssent(t)=ssent(s) &  | 
|
63  | 
srcvd(t) = addm (srcvd s) b &  | 
|
64  | 
sbit(t)=sbit(s) &  | 
|
65  | 
ssending(t)=ssending(s) |  | 
|
66  | 
C_m_s => count (ssent s) (~sbit s) < count (srcvd s) (~sbit s) &  | 
|
67  | 
sq(t)=sq(s) &  | 
|
68  | 
ssent(t)=ssent(s) &  | 
|
69  | 
srcvd(t)=srcvd(s) &  | 
|
70  | 
sbit(t)=sbit(s) &  | 
|
71  | 
ssending(s) &  | 
|
72  | 
~ssending(t) |  | 
|
73  | 
C_m_r => False |  | 
|
74  | 
C_r_s => count (ssent s) (sbit s) <= count (srcvd s) (~sbit s) &  | 
|
75  | 
sq(t)=tl(sq(s)) &  | 
|
76  | 
ssent(t)=ssent(s) &  | 
|
77  | 
srcvd(t)=srcvd(s) &  | 
|
78  | 
sbit(t) = (~sbit(s)) &  | 
|
79  | 
~ssending(s) &  | 
|
80  | 
ssending(t) |  | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
81  | 
C_r_r(m) => False}"  | 
| 
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
82  | 
|
| 17244 | 83  | 
sender_ioa_def: "sender_ioa ==  | 
| 3523 | 84  | 
 (sender_asig, {([],{|},{|},False,True)}, sender_trans,{},{})"
 | 
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
85  | 
|
| 19739 | 86  | 
lemma in_sender_asig:  | 
87  | 
"S_msg(m) : actions(sender_asig)"  | 
|
88  | 
"R_msg(m) ~: actions(sender_asig)"  | 
|
89  | 
"S_pkt(pkt) : actions(sender_asig)"  | 
|
90  | 
"R_pkt(pkt) ~: actions(sender_asig)"  | 
|
91  | 
"S_ack(b) ~: actions(sender_asig)"  | 
|
92  | 
"R_ack(b) : actions(sender_asig)"  | 
|
93  | 
"C_m_s : actions(sender_asig)"  | 
|
94  | 
"C_m_r ~: actions(sender_asig)"  | 
|
95  | 
"C_r_s : actions(sender_asig)"  | 
|
96  | 
"C_r_r(m) ~: actions(sender_asig)"  | 
|
97  | 
by (simp_all add: sender_asig_def actions_def asig_projections)  | 
|
98  | 
||
99  | 
lemmas sender_projections = sq_def ssent_def srcvd_def sbit_def ssending_def  | 
|
| 17244 | 100  | 
|
| 
3073
 
88366253a09a
Old NTP files now running under the IOA meta theory based on HOLCF;
 
mueller 
parents:  
diff
changeset
 | 
101  | 
end  |