src/HOL/HOLCF/IOA/ABP/Sender.thy
changeset 41022 0437dbc127b3
parent 35174 e15040ae75d7
child 41193 b8703f63bfb2
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/HOL/HOLCF/IOA/ABP/Sender.thy	Sat Nov 27 16:08:10 2010 -0800
     1.3 @@ -0,0 +1,55 @@
     1.4 +(*  Title:      HOLCF/IOA/ABP/Sender.thy
     1.5 +    Author:     Olaf Müller
     1.6 +*)
     1.7 +
     1.8 +header {* The implementation: sender *}
     1.9 +
    1.10 +theory Sender
    1.11 +imports IOA Action Lemmas
    1.12 +begin
    1.13 +
    1.14 +types
    1.15 +  'm sender_state = "'m list  *  bool"  -- {* messages, Alternating Bit *}
    1.16 +
    1.17 +definition
    1.18 +  sq :: "'m sender_state => 'm list" where
    1.19 +  "sq = fst"
    1.20 +
    1.21 +definition
    1.22 +  sbit :: "'m sender_state => bool" where
    1.23 +  "sbit = snd"
    1.24 +
    1.25 +definition
    1.26 +  sender_asig :: "'m action signature" where
    1.27 +  "sender_asig = ((UN m. {S_msg(m)}) Un (UN b. {R_ack(b)}),
    1.28 +                   UN pkt. {S_pkt(pkt)},
    1.29 +                   {})"
    1.30 +
    1.31 +definition
    1.32 +  sender_trans :: "('m action, 'm sender_state)transition set" where
    1.33 +  "sender_trans =
    1.34 +   {tr. let s = fst(tr);
    1.35 +            t = snd(snd(tr))
    1.36 +        in case fst(snd(tr))
    1.37 +        of
    1.38 +        Next     => if sq(s)=[] then t=s else False |
    1.39 +        S_msg(m) => sq(t)=sq(s)@[m]   &
    1.40 +                    sbit(t)=sbit(s)  |
    1.41 +        R_msg(m) => False |
    1.42 +        S_pkt(pkt) => sq(s) ~= []  &
    1.43 +                       hdr(pkt) = sbit(s)      &
    1.44 +                      msg(pkt) = hd(sq(s))    &
    1.45 +                      sq(t) = sq(s)           &
    1.46 +                      sbit(t) = sbit(s) |
    1.47 +        R_pkt(pkt) => False |
    1.48 +        S_ack(b)   => False |
    1.49 +        R_ack(b)   => if b = sbit(s) then
    1.50 +                       sq(t)=tl(sq(s)) & sbit(t)=(~sbit(s)) else
    1.51 +                       sq(t)=sq(s) & sbit(t)=sbit(s)}"
    1.52 +  
    1.53 +definition
    1.54 +  sender_ioa :: "('m action, 'm sender_state)ioa" where
    1.55 +  "sender_ioa =
    1.56 +   (sender_asig, {([],True)}, sender_trans,{},{})"
    1.57 +
    1.58 +end