| author | wenzelm | 
| Thu, 27 Sep 2012 19:34:31 +0200 | |
| changeset 49614 | 0009a6ebc83b | 
| 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 |