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