// contract signing protocol [BGMR90]
// dxp/gxn 11/07/02

mdp

// constants
// v=0.100000
// alpha=1.100000
// beta=1.010000

// discretize the coin (uniform choice over [0,1])
// suppose choices are 1/100,2/100,...

// number of messages each party sends
const N=24;

module contract

	pA : [1..N]; // probabilities A sends to B
	pB : [1..N]; // probabilities B sends to A
	turn : [0..1]; // whose turn it is
	c : [0..1]; // status of the coin 0 not flipped 1 flipped
	rho : [0..100]; // value of the coin=x means value is x/100
	
	// parties stop when the coin has been flipped
	[] turn=0 & c=0 -> pA'=min(N,pA+1) & turn'=1;
	[] turn=1 & c=0 -> pB'=min(N,pB+1) & turn'=0;
	
	// flip coin (at any time)
	[] c=0 & (pA>1 | pB>1) ->   1/100 : (c'=1) & (rho'=1) 
	          + 1/100 : (c'=1) & (rho'=2) 
	          + 1/100 : (c'=1) & (rho'=3) 
	          + 1/100 : (c'=1) & (rho'=4) 
	          + 1/100 : (c'=1) & (rho'=5) 
	          + 1/100 : (c'=1) & (rho'=6) 
	          + 1/100 : (c'=1) & (rho'=7) 
	          + 1/100 : (c'=1) & (rho'=8)
	          + 1/100 : (c'=1) & (rho'=9) 
	          + 1/100 : (c'=1) & (rho'=10)
	          + 1/100 : (c'=1) & (rho'=11)
	          + 1/100 : (c'=1) & (rho'=12)
	          + 1/100 : (c'=1) & (rho'=13)
	          + 1/100 : (c'=1) & (rho'=14)
	          + 1/100 : (c'=1) & (rho'=15)
	          + 1/100 : (c'=1) & (rho'=16)
	          + 1/100 : (c'=1) & (rho'=17)
	          + 1/100 : (c'=1) & (rho'=18)
	          + 1/100 : (c'=1) & (rho'=19)
	          + 1/100 : (c'=1) & (rho'=20)
	          + 1/100 : (c'=1) & (rho'=21)
	          + 1/100 : (c'=1) & (rho'=22)
	          + 1/100 : (c'=1) & (rho'=23)
	          + 1/100 : (c'=1) & (rho'=24)
	          + 1/100 : (c'=1) & (rho'=25)
	          + 1/100 : (c'=1) & (rho'=26)
	          + 1/100 : (c'=1) & (rho'=27)
	          + 1/100 : (c'=1) & (rho'=28)
	          + 1/100 : (c'=1) & (rho'=29)
	          + 1/100 : (c'=1) & (rho'=30)
	          + 1/100 : (c'=1) & (rho'=31)
	          + 1/100 : (c'=1) & (rho'=32)
	          + 1/100 : (c'=1) & (rho'=33)
	          + 1/100 : (c'=1) & (rho'=34)
	          + 1/100 : (c'=1) & (rho'=35)
	          + 1/100 : (c'=1) & (rho'=36)
	          + 1/100 : (c'=1) & (rho'=37)
	          + 1/100 : (c'=1) & (rho'=38)
	          + 1/100 : (c'=1) & (rho'=39)
	          + 1/100 : (c'=1) & (rho'=40)
	          + 1/100 : (c'=1) & (rho'=41)
	          + 1/100 : (c'=1) & (rho'=42)
	          + 1/100 : (c'=1) & (rho'=43)
	          + 1/100 : (c'=1) & (rho'=44)
	          + 1/100 : (c'=1) & (rho'=45)
	          + 1/100 : (c'=1) & (rho'=46)
	          + 1/100 : (c'=1) & (rho'=47)
	          + 1/100 : (c'=1) & (rho'=48)
	          + 1/100 : (c'=1) & (rho'=49)
	          + 1/100 : (c'=1) & (rho'=50)
	          + 1/100 : (c'=1) & (rho'=51)
	          + 1/100 : (c'=1) & (rho'=52)
	          + 1/100 : (c'=1) & (rho'=53)
	          + 1/100 : (c'=1) & (rho'=54)
	          + 1/100 : (c'=1) & (rho'=55)
	          + 1/100 : (c'=1) & (rho'=56)
	          + 1/100 : (c'=1) & (rho'=57)
	          + 1/100 : (c'=1) & (rho'=58)
	          + 1/100 : (c'=1) & (rho'=59)
	          + 1/100 : (c'=1) & (rho'=60)
	          + 1/100 : (c'=1) & (rho'=61)
	          + 1/100 : (c'=1) & (rho'=62)
	          + 1/100 : (c'=1) & (rho'=63)
	          + 1/100 : (c'=1) & (rho'=64)
	          + 1/100 : (c'=1) & (rho'=65)
	          + 1/100 : (c'=1) & (rho'=66)
	          + 1/100 : (c'=1) & (rho'=67)
	          + 1/100 : (c'=1) & (rho'=68)
	          + 1/100 : (c'=1) & (rho'=69)
	          + 1/100 : (c'=1) & (rho'=70)
	          + 1/100 : (c'=1) & (rho'=71)
	          + 1/100 : (c'=1) & (rho'=72)
	          + 1/100 : (c'=1) & (rho'=73)
	          + 1/100 : (c'=1) & (rho'=74)
	          + 1/100 : (c'=1) & (rho'=75)
	          + 1/100 : (c'=1) & (rho'=76)
	          + 1/100 : (c'=1) & (rho'=77)
	          + 1/100 : (c'=1) & (rho'=78)
	          + 1/100 : (c'=1) & (rho'=79)
	          + 1/100 : (c'=1) & (rho'=80)
	          + 1/100 : (c'=1) & (rho'=81)
	          + 1/100 : (c'=1) & (rho'=82)
	          + 1/100 : (c'=1) & (rho'=83)
	          + 1/100 : (c'=1) & (rho'=84)
	          + 1/100 : (c'=1) & (rho'=85)
	          + 1/100 : (c'=1) & (rho'=86)
	          + 1/100 : (c'=1) & (rho'=87)
	          + 1/100 : (c'=1) & (rho'=88)
	          + 1/100 : (c'=1) & (rho'=89)
	          + 1/100 : (c'=1) & (rho'=90)
	          + 1/100 : (c'=1) & (rho'=91)
	          + 1/100 : (c'=1) & (rho'=92)
	          + 1/100 : (c'=1) & (rho'=93)
	          + 1/100 : (c'=1) & (rho'=94)
	          + 1/100 : (c'=1) & (rho'=95)
	          + 1/100 : (c'=1) & (rho'=96)
	          + 1/100 : (c'=1) & (rho'=97)
	          + 1/100 : (c'=1) & (rho'=98)
	          + 1/100 : (c'=1) & (rho'=99)
	          + 1/100 : (c'=1) & (rho'=100);

endmodule