Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Formal Modelling and Analysis of Slot Machines

Jan Friso Groote, Sander van Heesch and Matthias Volk
Departement of Mathematics and Computer Science, Eindhoven University of Technology
P.O. Box 513, 5600 MB Eindhoven, The Netherlands
Email: {J.F.Groote, M.Volk}@tue.nl, S.J.A.G.v.Heesch@student.tue.nl
Abstract

Slot machines can have fairly complex behaviour. Determining the RTP (return to player) can be involved, especially when a player has an influence on the course of the game. In this paper we model the behaviour of slot machines using probabilistic process specifications where the intervention of players is modelled using non-determinism. The RTP is formulated as a quantitative modal formula which can be evaluated fully automatically on the behavioural specifications of these slot machines. We apply the method on an actual slot machine provided by the company Errèl Industries B.V. The most useful contribution of this paper is that we show how to describe the behaviour of slot machines both concisely and unequivocally. Using quantitative modal logics there is an extra bonus, as we can quite easily provide valuable insights by a.o. computing the exact RTP and obtaining the optimal player strategies.

1 Introduction

Gambling machines such as slot machines combine random behaviour, stemming from spinning of reels, with player input, when allowing to hold specific reels. A major metric for such machines is the payout, also called the ‘Return To Player’ (RTP). The RTP is the average part of the inserted money which is returned to the player in each round. A lower bound on the RTP is commonly required by law or regulation and differs per country. For example, in the Netherlands slot machines must have an average payout of at least 60% and do not allow players to loose more than 40 euros per hour ([29, Articles 12f and 12g]; see also [21]). It is of course also undesirable for the owners of such machines when the average payout exceeds what is inserted, i.e., the RTP should be less than 100%. Determining the RTP is therefore crucial when designing slot machines. However, as these machines can be quite complex, it can be difficult to assess the RTP with traditional mathematical methods. Monte Carlo simulation can be quite effective in such situation, but it remains a probabilistic simulation technique and can require a large number of simulation runs.

In this paper, we model the slot machines using probabilistic process specifications and formulate the property of interest, such as the RTP, using quantitative modal formulas [13]. By using process descriptions quite complex behaviour can be concisely described. These models can be analysed fully automatically using model checking of modal formulas and this yields precise answers. For example, we can check whether the expected payout lies within the required bounds. In contrast to traditional mathematical methods, model checking is performed fully automatically on the model specification and requires no user intervention. In contrast to simulation-based techniques, model checking exhaustively explores all possible behaviour and therefore also considers rare events which only occur with marginal probability.

Process specifications

Process algebras are very natural formalisms to describe and study the behaviour of complex systems. These formalisms find their origin in the work of Milner [27]. Systems can perform actions, such as displaying information or receiving an indication that a button has been pressed. Abstractly, actions are denoted as a𝑎aitalic_a and b𝑏bitalic_b, and more informatively as 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(1)𝑑𝑖𝑠𝑝𝑙𝑎𝑦1\mathit{display}(1)italic_display ( 1 ) or 𝑝𝑟𝑒𝑠𝑠𝑝𝑟𝑒𝑠𝑠\mathit{press}italic_press. A process algebra expression specifies all possible sequences in which such actions can occur, which we call the behaviour. In this paper we use the process algebraic specification language mCRL2 [13].

Modal formulas allow to formulate a wide range of properties for the behaviour of the modelled system. A typical example is that ‘whenever action a𝑎aitalic_a happens, action b𝑏bitalic_b will inevitably take place’. We use the modal mu-calculus with data, which is very expressive, in particular more expressive than other modal logics [7]. Using model checking techniques, we check whether the given modal formula is satisfied on the given process specification. In other words, we verify whether the modelled system ensures the desired behaviour. Tools and theories that support process descriptions and allow to verify properties in the modal mu-calculus are CADP [9] and mCRL2 [12].

Probabilistic process specifications

The process algebraic descriptions have been extended to incorporate probabilities. Using this it can for instance be expressed that ‘after an action a𝑎aitalic_a with probability of 25% an action b𝑏bitalic_b will happen, and with probability 75% both actions b𝑏bitalic_b and c𝑐citalic_c are possible’. This allows to specify and investigate behaviour of systems that rely on probabilities.

Quantitative modal logics yield numerical values instead of the booleans true and false, when evaluated on behaviour. Using these logics various properties can be establish such as the probability that a particular action a𝑎aitalic_a will happen, or the expected number of times that action a𝑎aitalic_a will happen. There are various tools that support probabilistic process behaviour and allow to verify properties such as Prism [24], Storm [18] and Modest [16]. We employ the recent quantitative extension of the modal mu-calculus as outlined in [15] which has been implemented in the mCRL2 toolset [12].

Modeling slot machines

We start out by modelling a number of simple slot machines to illustrate the approach. Subsequently, we apply the techniques to the TopSpinner slot machine produced by Errèl Industries B.V. [8]. This machine was produced in 2001 and is not in commercial use anymore. We model the TopSpinner in mCRL2 and analyse its behaviour via quantitative model checking.

It turns out that modelling slot machines is very well possible, once one masters the technique of process algebraic specification and quantitative model checking. Two of the three non-trivial games of the TopSpinner neatly produce a return to player of 94% and our final model of the third game has a payout of 83%.

However, using the available documentation it was hardly possible to figure out how this slot machine operated precisely. It required a number of clarification rounds, and even the use of a simulator of the actual slot machine, to be able to provide precise formal descriptions. We initially started with this project to investigate the effectiveness of quantitative modal logic in the setting of slot machines, and that turned out to work fine. But we came to the conclusion that the formal modelling of the behaviour of slot machines per se is a much larger contribution. Formal modelling is perfectly suited to denote what slot machines are supposed to do, which besides as a basis for analysis, is an excellent way to communicate this behaviour with for instance gambling authorities.

Related work

There is remarkable little literature on slot machines, given their relative popularity and nice probabilistic nature. Very simple slot machines have been used as illustration, see e.g., [6, 26]. The mathematics of slot machines has been investigated in [4]. Analysis of slot machines via Monte Carlo simulation was considered in [5]. One goal of slot machine analysis is optimizing the RTP such that it falls within the desired bounds. Several approaches exist for this optimization problem, based on genetic and evolutionary algorithms [2, 3, 22] or using Variable Neighborhood Search [20].

Outline

We introduce the process specification mCRL2 and quantitative model logic in Section 2. We model and analyse simple slot machines in Section 3 before investigating the different games of the Top Spinner in Section 4. We conclude in Section 5.

Acknowledgements.

We are thankful to Eric van de Pas from Eurocoin gaming for his kind patience in answering all our questions about slot machines.

2 The specification formalisms

We describe the behaviour of systems in mCRL2, a (probabilistic) process algebraic behavioural specification language [13]. Quantitative modal logic is used to express probabilistic properties of this behaviour, such as the expected payout of a slot machine [15]. In the next two sections we explain the necessary ingredients of both formalisms.

2.1 Probabilistic process expressions

Probabilistic process specifications consist of two parts, namely data types and behaviour.

Data types

All normal data types can be used, such as booleans (𝔹𝔹\mathbb{B}blackboard_B), natural numbers (\mathbb{N}blackboard_N), integers (\mathbb{Z}blackboard_Z), real numbers (\mathbb{R}blackboard_R), and lists (𝐿𝑖𝑠𝑡(D)𝐿𝑖𝑠𝑡𝐷\mathit{List}(D)italic_List ( italic_D ) where D𝐷Ditalic_D is an arbitrary type). Lists are typically denoted within square brackets, such as [1,2,3]123[1,2,3][ 1 , 2 , 3 ]. The i𝑖iitalic_i-th element of a list L𝐿Litalic_L is denoted as L.iformulae-sequence𝐿𝑖L.iitalic_L . italic_i, where the first element of the list is L.0𝐿.0L.0italic_L .0.

Enumerated types are typically declared using the struct keyword, as follows:

𝐬𝐨𝐫𝐭𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑠𝑡𝑎𝑟𝑔𝑟𝑎𝑝𝑒𝑠𝑜𝑟𝑎𝑛𝑔𝑒;𝐬𝐨𝐫𝐭𝑆𝑦𝑚𝑏𝑜𝑙struct 𝑠𝑡𝑎𝑟delimited-∣∣𝑔𝑟𝑎𝑝𝑒𝑠𝑜𝑟𝑎𝑛𝑔𝑒\begin{array}[]{l@{\hspace{2mm}}l}\mathbf{sort}\hfil\hskip 5.69054pt&\mathit{% Symbol}=\textbf{struct }\mathit{star}\mid\mathit{grapes}\mid\mathit{orange};% \end{array}start_ARRAY start_ROW start_CELL bold_sort end_CELL start_CELL italic_Symbol = struct italic_star ∣ italic_grapes ∣ italic_orange ; end_CELL end_ROW end_ARRAY

where 𝑆𝑦𝑚𝑏𝑜𝑙𝑆𝑦𝑚𝑏𝑜𝑙\mathit{Symbol}italic_Symbol is now the data type containing the three elements 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star, 𝑔𝑟𝑎𝑝𝑒𝑠𝑔𝑟𝑎𝑝𝑒𝑠\mathit{grapes}italic_grapes and 𝑜𝑟𝑎𝑛𝑔𝑒𝑜𝑟𝑎𝑛𝑔𝑒\mathit{orange}italic_orange.

Auxiliary functions and constants are declared using the map keyword, followed by defining equations, employing the keyword eqn and the keyword var to declare the variables used in the equations. An example to determine whether three symbols are all equal is the following where \approx represents equality on data elements.

map𝑎𝑙𝑙_𝑒𝑞𝑢𝑎𝑙:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙𝔹;vars1,s2,s3:𝑆𝑦𝑚𝑏𝑜𝑙;eqn𝑎𝑙𝑙_𝑒𝑞𝑢𝑎𝑙(s1,s2,s3)=s1s2s2s3;\begin{array}[]{l@{\hspace{2mm}}l}\textbf{map}\hfil\hskip 5.69054pt&\mathit{% all\_equal}:\mathit{Symbol}\times\mathit{Symbol}\times\mathit{Symbol}% \rightarrow\mathbb{B};\\ \textbf{var}\hfil\hskip 5.69054pt&s_{1},s_{2},s_{3}:\mathit{Symbol};\\ \textbf{eqn}\hfil\hskip 5.69054pt&\mathit{all\_equal}(s_{1},s_{2},s_{3})=% \leavevmode\nobreak\ \leavevmode\nobreak\ s_{1}\approx s_{2}\wedge s_{2}% \approx s_{3};\end{array}start_ARRAY start_ROW start_CELL map end_CELL start_CELL italic_all _ italic_equal : italic_Symbol × italic_Symbol × italic_Symbol → blackboard_B ; end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol ; end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_all _ italic_equal ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) = italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ; end_CELL end_ROW end_ARRAY

The equations are evaluated as term rewriting rules from left to right. They can be preceded by a condition, in which case the rewrite rule is only applied if the condition rewrites to true. Within equations we often use the ternary operator 𝑖𝑓(b,x,y)𝑖𝑓𝑏𝑥𝑦\mathit{if}(b,x,y)italic_if ( italic_b , italic_x , italic_y ) to represent the value x𝑥xitalic_x if the boolean b𝑏bitalic_b is true and y𝑦yitalic_y if b𝑏bitalic_b is equal to false.

The data types are far more versatile, also allowing for instance function types, sets, bags and recursive types, but as they are not required in the rest of this paper, we do not explain those.

Behaviour

Behaviour is described in the process algebraic style. The essential element in process algebra is the action, typically denoted in an abstract way by a𝑎aitalic_a, b𝑏bitalic_b, c𝑐citalic_c. They represent some atomically occurring event. If the event has some meaning, then more informative action names can be used such as 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win or 𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose. Actions can have parameters, which are then denoted after the action within brackets. A typically example is 𝑝𝑎𝑦𝑜𝑢𝑡(n)𝑝𝑎𝑦𝑜𝑢𝑡𝑛\mathit{payout}(n)italic_payout ( italic_n ) which typically could indicate the atomic activity of paying out n𝑛nitalic_n credits, or ℎ𝑜𝑙𝑑(b1,b2,b3)ℎ𝑜𝑙𝑑subscript𝑏1subscript𝑏2subscript𝑏3\mathit{hold}(b_{1},b_{2},b_{3})italic_hold ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) with three booleans that indicate which of the three hold buttons are pressed. Actions are declared using the keyword act.

act𝑤𝑖𝑛,𝑙𝑜𝑠𝑒;ℎ𝑜𝑙𝑑:𝔹×𝔹×𝔹;act𝑤𝑖𝑛𝑙𝑜𝑠𝑒missing-subexpression:ℎ𝑜𝑙𝑑𝔹𝔹𝔹\begin{array}[]{l@{\hspace{2mm}}l}\textbf{act}\hfil\hskip 5.69054pt&\mathit{% win},\mathit{lose};\\ \hfil\hskip 5.69054pt&\mathit{hold}:\mathbb{B}\times\mathbb{B}\times\mathbb{B}% ;\end{array}start_ARRAY start_ROW start_CELL act end_CELL start_CELL italic_win , italic_lose ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_hold : blackboard_B × blackboard_B × blackboard_B ; end_CELL end_ROW end_ARRAY

The operator ‘{\cdot}’ is used to sequentially compose two behaviours. E.g., 𝑤𝑖𝑛𝑙𝑜𝑠𝑒𝑤𝑖𝑛𝑙𝑜𝑠𝑒\mathit{win}{\cdot}\mathit{lose}italic_win ⋅ italic_lose represents that first the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win takes place, followed by the action 𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose. The operator +++ represents non-deterministic choice between two behaviours. For instance ab+cd𝑎𝑏𝑐𝑑a{\cdot}b+c{\cdot}ditalic_a ⋅ italic_b + italic_c ⋅ italic_d means that it is either possible to do ab𝑎𝑏a{\cdot}bitalic_a ⋅ italic_b or do cd𝑐𝑑c{\cdot}ditalic_c ⋅ italic_d where the first action, a𝑎aitalic_a or c𝑐citalic_c, that is done determines the choice. There is one process, called deadlock, written as δ𝛿\deltaitalic_δ, which cannot perform any action. It typically satisfies the equation p+δ=δ+p=p𝑝𝛿𝛿𝑝𝑝p+\delta=\delta+p=pitalic_p + italic_δ = italic_δ + italic_p = italic_p for any process p𝑝pitalic_p.

The operator ‘+++’ can also be written using the sum operator \sum. Consider a process p(b)𝑝𝑏p(b)italic_p ( italic_b ), which is a process p𝑝pitalic_p depending on a boolean b𝑏bitalic_b. Suppose we want to express that either the behaviour p(𝑡𝑟𝑢𝑒)𝑝𝑡𝑟𝑢𝑒p(\mathit{true})italic_p ( italic_true ) or p(𝑓𝑎𝑙𝑠𝑒)𝑝𝑓𝑎𝑙𝑠𝑒p(\mathit{false})italic_p ( italic_false ) can be done. This is expressed by p(𝑡𝑟𝑢𝑒)+p(𝑓𝑎𝑙𝑠𝑒)𝑝𝑡𝑟𝑢𝑒𝑝𝑓𝑎𝑙𝑠𝑒p(\mathit{true})+p(\mathit{false})italic_p ( italic_true ) + italic_p ( italic_false ), but using the the sum operator it can be written as b:𝔹p(b)subscript:𝑏𝔹𝑝𝑏\sum_{b:\mathbb{B}}p(b)∑ start_POSTSUBSCRIPT italic_b : blackboard_B end_POSTSUBSCRIPT italic_p ( italic_b ). The sum operator can be used with any data type, and with one or multiple variables.

Using the conditional process operator bpq𝑏𝑝𝑞b\rightarrow p\diamond qitalic_b → italic_p ⋄ italic_q, it is possible to let data influence the course of a process. If b𝑏bitalic_b is true the behaviour of p𝑝pitalic_p is executed, and if b𝑏bitalic_b is false the behaviour of q𝑞qitalic_q takes place. Note that the conditionals on data and processes have different notation, but they have essentially the same effect. When omitting the else-part, i.e., bp𝑏𝑝b\rightarrow pitalic_b → italic_p this process executes p𝑝pitalic_p when b𝑏bitalic_b is true, and is equal to deadlock otherwise.

Using process equations, iterative or recursive behaviour can be denoted. A simple example is the behaviour of the process 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky which can perform the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win followed by the behaviour of 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky. So, 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky can do an infinite sequence of actions 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win. The process starts with the behaviour indicated by the keyword init.

proc𝐿𝑢𝑐𝑘𝑦=𝑤𝑖𝑛𝐿𝑢𝑐𝑘𝑦;init𝐿𝑢𝑐𝑘𝑦; 𝑤𝑖𝑛proc𝐿𝑢𝑐𝑘𝑦𝑤𝑖𝑛𝐿𝑢𝑐𝑘𝑦init𝐿𝑢𝑐𝑘𝑦 𝑤𝑖𝑛\begin{array}[]{@{}ll}\begin{array}[]{l@{\hspace{2mm}}l}\textbf{proc}\hfil% \hskip 5.69054pt&\mathit{Lucky}=\mathit{win}{\cdot}\mathit{Lucky};\\ \textbf{init}\hfil\hskip 5.69054pt&\mathit{Lucky};\end{array}&\raisebox{-22.76% 228pt}[0.0pt][0.0pt]{ \leavevmode\hbox to54.19pt{\vbox to57.71pt{\pgfpicture\makeatletter\hbox{% \hskip 8.9359pt\lower-28.85275pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{c} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{{ {\pgfsys@beginscope\pgfsys@setlinewidth{0.64pt}\pgfsys@setdash{}{0.0pt}% \pgfsys@roundcap\pgfsys@roundjoin{} {}{}{} {}{}{} \pgfsys@moveto{-1.55997pt}{2.07996pt}\pgfsys@curveto{-1.42996pt}{1.29997pt}{0.% 0pt}{0.12999pt}{0.38998pt}{0.0pt}\pgfsys@curveto{0.0pt}{-0.12999pt}{-1.42996pt% }{-1.29997pt}{-1.55997pt}{-2.07996pt}\pgfsys@stroke\pgfsys@endscope}} }{}{}{{}}\pgfsys@moveto{-8.5359pt}{0.0pt}\pgfsys@lineto{-3.55545pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope% \pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-3.55545pt}{0.0pt}% \pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{% \lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@moveto{2.84544pt}{0.0pt}% \pgfsys@curveto{2.84544pt}{1.5715pt}{1.5715pt}{2.84544pt}{0.0pt}{2.84544pt}% \pgfsys@curveto{-1.5715pt}{2.84544pt}{-2.84544pt}{1.5715pt}{-2.84544pt}{0.0pt}% \pgfsys@curveto{-2.84544pt}{-1.5715pt}{-1.5715pt}{-2.84544pt}{0.0pt}{-2.84544% pt}\pgfsys@curveto{1.5715pt}{-2.84544pt}{2.84544pt}{-1.5715pt}{2.84544pt}{0.0% pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ % } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}{{}}{}{}{}% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ % }{}{}{}{}{{}}\pgfsys@moveto{1.9919pt}{1.9919pt}\pgfsys@curveto{28.45276pt}{28.% 45276pt}{28.45276pt}{-28.45276pt}{2.49394pt}{-2.49394pt}\pgfsys@stroke% \pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@transformcm{-0.7071}{0.7071}{-0.7071}{-0.7071}{2.49396pt}{-2.49396pt}% \pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{% \lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {34.14322pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{26.36543pt}{-3.3393pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}% {rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\mathit{win}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL proc end_CELL start_CELL italic_Lucky = italic_win ⋅ italic_Lucky ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Lucky ; end_CELL end_ROW end_ARRAY end_CELL start_CELL italic_win end_CELL end_ROW end_ARRAY

The keyword proc is used to indicate the process equation. At the left side of the equals sign a single process variable occurs of which the behaviour occurs at the right hand side.

Such behaviour is interpreted as a labelled transition system, also called a state machine. It has a set of states and transitions labelled with actions indicating how the behaviour goes from state to state. The state machine for the process 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky is drawn at the right of 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky. It consists of one state and a transition labelled with the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win going from and to this state indicating that the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win can be done infinitely often in sequence.

Process equations can also have zero or more parameters. As an illustration we write the behaviour of a counter that can count up and down, but not count below zero. The counter initially starts with the value 00.

act𝑢𝑝,𝑑𝑜𝑤𝑛;proc𝐶𝑜𝑢𝑛𝑡(n:)=𝑢𝑝𝐶𝑜𝑢𝑛𝑡(n+1)+(n>0)𝑑𝑜𝑤𝑛𝐶𝑜𝑢𝑛𝑡(n1);init𝐶𝑜𝑢𝑛𝑡(0); 𝑢𝑝𝑢𝑝𝑢𝑝𝑢𝑝𝑑𝑜𝑤𝑛𝑑𝑜𝑤𝑛𝑑𝑜𝑤𝑛𝑑𝑜𝑤𝑛\begin{array}[]{@{}ll}\begin{array}[]{l@{\hspace{2mm}}l}\textbf{act}\hfil% \hskip 5.69054pt&\mathit{up},\mathit{down};\\ \textbf{proc}\hfil\hskip 5.69054pt&\mathit{Count}(n:\mathbb{Z})=\\ \hfil\hskip 5.69054pt&\hskip 28.45274pt\mathit{up}{\cdot}\mathit{Count}(n{+}1)% +\\ \hfil\hskip 5.69054pt&\hskip 28.45274pt(n>0)\rightarrow\mathit{down}{\cdot}% \mathit{Count}(n{-}1);\\ \textbf{init}\hfil\hskip 5.69054pt&\mathit{Count}(0);\end{array}&\hskip 28.452% 74pt\raisebox{-19.91684pt}[0.0pt][0.0pt]{ \leavevmode\hbox to144.06pt{\vbox to36.03pt{\pgfpicture\makeatletter\hbox{% \hskip 8.9359pt\lower-18.18614pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{-8.5359pt}{0.0pt}\pgfsys@lineto{-3% .55545pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{-3.% 55545pt}{0.0pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }% \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@moveto{2.84544pt}{0.0pt}% \pgfsys@curveto{2.84544pt}{1.5715pt}{1.5715pt}{2.84544pt}{0.0pt}{2.84544pt}% \pgfsys@curveto{-1.5715pt}{2.84544pt}{-2.84544pt}{1.5715pt}{-2.84544pt}{0.0pt}% \pgfsys@curveto{-2.84544pt}{-1.5715pt}{-1.5715pt}{-2.84544pt}{0.0pt}{-2.84544% pt}\pgfsys@curveto{1.5715pt}{-2.84544pt}{2.84544pt}{-1.5715pt}{2.84544pt}{0.0% pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ % } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{0.0pt}\pgfsys@moveto{31.2982pt}{0.0pt}% \pgfsys@curveto{31.2982pt}{1.5715pt}{30.02426pt}{2.84544pt}{28.45276pt}{2.8454% 4pt}\pgfsys@curveto{26.88126pt}{2.84544pt}{25.60732pt}{1.5715pt}{25.60732pt}{0% .0pt}\pgfsys@curveto{25.60732pt}{-1.5715pt}{26.88126pt}{-2.84544pt}{28.45276pt% }{-2.84544pt}\pgfsys@curveto{30.02426pt}{-2.84544pt}{31.2982pt}{-1.5715pt}{31.% 2982pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt}{0.0pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{56.90552pt}{0.0pt}\pgfsys@moveto{59.75096pt}{0.0pt}% \pgfsys@curveto{59.75096pt}{1.5715pt}{58.47702pt}{2.84544pt}{56.90552pt}{2.845% 44pt}\pgfsys@curveto{55.33401pt}{2.84544pt}{54.06007pt}{1.5715pt}{54.06007pt}{% 0.0pt}\pgfsys@curveto{54.06007pt}{-1.5715pt}{55.33401pt}{-2.84544pt}{56.90552% pt}{-2.84544pt}\pgfsys@curveto{58.47702pt}{-2.84544pt}{59.75096pt}{-1.5715pt}{% 59.75096pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{56.90552pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{.5,.5,.5}\definecolor[named]{pgfstrokecolor}{rgb}{.5,.5,.5}% \pgfsys@color@gray@stroke{.5}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.5}% \pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{.5,.5,.5}{}% \pgfsys@moveto{85.35828pt}{0.0pt}\pgfsys@moveto{88.20372pt}{0.0pt}% \pgfsys@curveto{88.20372pt}{1.5715pt}{86.92978pt}{2.84544pt}{85.35828pt}{2.845% 44pt}\pgfsys@curveto{83.78677pt}{2.84544pt}{82.51283pt}{1.5715pt}{82.51283pt}{% 0.0pt}\pgfsys@curveto{82.51283pt}{-1.5715pt}{83.78677pt}{-2.84544pt}{85.35828% pt}{-2.84544pt}\pgfsys@curveto{86.92978pt}{-2.84544pt}{88.20372pt}{-1.5715pt}{% 88.20372pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{85.35828pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{.75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{% .75,.75,.75}\pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }% \pgfsys@color@gray@fill{.75}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}% {rgb}{.75,.75,.75}{}\pgfsys@moveto{113.81104pt}{0.0pt}\pgfsys@moveto{116.65648% pt}{0.0pt}\pgfsys@curveto{116.65648pt}{1.5715pt}{115.38254pt}{2.84544pt}{113.8% 1104pt}{2.84544pt}\pgfsys@curveto{112.23953pt}{2.84544pt}{110.96559pt}{1.5715% pt}{110.96559pt}{0.0pt}\pgfsys@curveto{110.96559pt}{-1.5715pt}{112.23953pt}{-2% .84544pt}{113.81104pt}{-2.84544pt}\pgfsys@curveto{115.38254pt}{-2.84544pt}{116% .65648pt}{-1.5715pt}{116.65648pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{113.81% 104pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}% \pgfsys@beginscope\pgfsys@invoke{ }\color[rgb]{.75,.75,.75}\definecolor[named]% {pgfstrokecolor}{rgb}{.75,.75,.75}\pgfsys@color@gray@stroke{.75}\pgfsys@invoke% { }\pgfsys@color@gray@fill{.75}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{.75,.75,.75}{}\pgfsys@moveto{128.03741pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ % }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{124.28741pt}{-2.5pt}\pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{% .75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.75}% \pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{.75,.75,.75}\color[rgb]{% .75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@color@gray@fill{.75}$\cdots$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}{{}}{}{}{}% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ % }{}{}{}{}{{}}\pgfsys@moveto{1.9919pt}{1.9919pt}\pgfsys@curveto{14.22638pt}{8.5% 359pt}{14.22638pt}{8.5359pt}{25.83478pt}{2.32677pt}\pgfsys@stroke% \pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@transformcm{0.88179}{-0.47165}{0.47165}{0.88179}{25.83476pt}{2.32677pt% }\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{% \lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {14.22638pt}{11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{8.6708pt}{10.20036pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\mathit{up}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{30.4446% 6pt}{1.9919pt}\pgfsys@curveto{42.67914pt}{8.5359pt}{42.67914pt}{8.5359pt}{54.2% 8754pt}{2.32677pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.88179}{-0.47165}{0.47% 165}{0.88179}{54.28752pt}{2.32677pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {42.67914pt}{11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{37.12357pt}{10.20036pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\mathit{up}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{.5,.5,.5}\definecolor[% named]{pgfstrokecolor}{rgb}{.5,.5,.5}\pgfsys@color@gray@stroke{.5}% \pgfsys@invoke{ }\pgfsys@color@gray@fill{.5}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{.5,.5,.5}{}{}{}{}{{}}\pgfsys@moveto{58.89742pt}{1.99% 19pt}\pgfsys@curveto{71.1319pt}{8.5359pt}{71.1319pt}{8.5359pt}{82.7403pt}{2.32% 677pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.88179}{-0.47165}{0.47% 165}{0.88179}{82.74028pt}{2.32677pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}% \pgfsys@beginscope\pgfsys@invoke{ }\color[rgb]{.5,.5,.5}\definecolor[named]{% pgfstrokecolor}{rgb}{.5,.5,.5}\pgfsys@color@gray@stroke{.5}\pgfsys@invoke{ }% \pgfsys@color@gray@fill{.5}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{% rgb}{.5,.5,.5}{}\pgfsys@moveto{71.1319pt}{11.38092pt}\pgfsys@stroke% \pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{65.57632pt}{10.20036pt}\pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}% {.5,.5,.5}\definecolor[named]{pgfstrokecolor}{rgb}{.5,.5,.5}% \pgfsys@color@gray@stroke{.5}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.5}% \pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{.5,.5,.5}\color[rgb]{% .5,.5,.5}\definecolor[named]{pgfstrokecolor}{rgb}{.5,.5,.5}% \pgfsys@color@gray@stroke{.5}\pgfsys@color@gray@fill{.5}$\mathit{up}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}{{}}{}{}{}% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ % }\color[rgb]{.75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.75}% \pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{.75,.75,.75}{}{}{}{}{{% }}\pgfsys@moveto{87.35017pt}{1.9919pt}\pgfsys@curveto{99.58466pt}{8.5359pt}{99% .58466pt}{8.5359pt}{111.19305pt}{2.32677pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{% {}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0% .88179}{-0.47165}{0.47165}{0.88179}{111.19304pt}{2.32677pt}\pgfsys@invoke{ }% \pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }% \pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}% \pgfsys@beginscope\pgfsys@invoke{ }\color[rgb]{.75,.75,.75}\definecolor[named]% {pgfstrokecolor}{rgb}{.75,.75,.75}\pgfsys@color@gray@stroke{.75}\pgfsys@invoke% { }\pgfsys@color@gray@fill{.75}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{.75,.75,.75}{}\pgfsys@moveto{99.58466pt}{11.38092pt}% \pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ % }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{94.02908pt}{10.20036pt}\pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}% {.75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.75}% \pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{.75,.75,.75}\color[rgb]{% .75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@color@gray@fill{.75}$\mathit{up}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}{{}}{}{}{}% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ % }{}{}{}{}{{}}\pgfsys@moveto{2.61797pt}{-2.32677pt}\pgfsys@curveto{14.22638pt}{% -8.5359pt}{14.22638pt}{-8.5359pt}{26.46085pt}{-1.9919pt}\pgfsys@stroke% \pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@transformcm{-0.88179}{0.47165}{-0.47165}{-0.88179}{2.61798pt}{-2.32677% pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{% \lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {14.22638pt}{-11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{2.69858pt}{-14.85313pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\mathit{down}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{31.0707% 2pt}{-2.32677pt}\pgfsys@curveto{42.67914pt}{-8.5359pt}{42.67914pt}{-8.5359pt}{% 54.9136pt}{-1.9919pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.88179}{0.47165}{-0.4% 7165}{-0.88179}{31.07074pt}{-2.32677pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {42.67914pt}{-11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{31.15134pt}{-14.85313pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\mathit{down}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{.5,.5,.5}\definecolor[% named]{pgfstrokecolor}{rgb}{.5,.5,.5}\pgfsys@color@gray@stroke{.5}% \pgfsys@invoke{ }\pgfsys@color@gray@fill{.5}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{.5,.5,.5}{}{}{}{}{{}}\pgfsys@moveto{59.52348pt}{-2.3% 2677pt}\pgfsys@curveto{71.1319pt}{-8.5359pt}{71.1319pt}{-8.5359pt}{83.36636pt}% {-1.9919pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.88179}{0.47165}{-0.4% 7165}{-0.88179}{59.5235pt}{-2.32677pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}% \pgfsys@beginscope\pgfsys@invoke{ }\color[rgb]{.5,.5,.5}\definecolor[named]{% pgfstrokecolor}{rgb}{.5,.5,.5}\pgfsys@color@gray@stroke{.5}\pgfsys@invoke{ }% \pgfsys@color@gray@fill{.5}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{% rgb}{.5,.5,.5}{}\pgfsys@moveto{71.1319pt}{-11.38092pt}\pgfsys@stroke% \pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{59.6041pt}{-14.85313pt}\pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}% {.5,.5,.5}\definecolor[named]{pgfstrokecolor}{rgb}{.5,.5,.5}% \pgfsys@color@gray@stroke{.5}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.5}% \pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{.5,.5,.5}\color[rgb]{% .5,.5,.5}\definecolor[named]{pgfstrokecolor}{rgb}{.5,.5,.5}% \pgfsys@color@gray@stroke{.5}\pgfsys@color@gray@fill{.5}$\mathit{down}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}{{}}{}{}{}% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ % }\color[rgb]{.75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.75}% \pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{.75,.75,.75}{}{}{}{}{{% }}\pgfsys@moveto{87.97624pt}{-2.32677pt}\pgfsys@curveto{99.58466pt}{-8.5359pt}% {99.58466pt}{-8.5359pt}{111.81912pt}{-1.9919pt}\pgfsys@stroke\pgfsys@invoke{ }% {{}{{}}{}{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@transformcm{-0.88179}{0.47165}{-0.47165}{-0.88179}{87.97626pt}{-2.3267% 7pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{% \lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}% \pgfsys@beginscope\pgfsys@invoke{ }\color[rgb]{.75,.75,.75}\definecolor[named]% {pgfstrokecolor}{rgb}{.75,.75,.75}\pgfsys@color@gray@stroke{.75}\pgfsys@invoke% { }\pgfsys@color@gray@fill{.75}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{.75,.75,.75}{}\pgfsys@moveto{99.58466pt}{-11.38092pt}% \pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{\pgfsys@beginscope\pgfsys@invoke{ % }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{88.05685pt}{-14.85313pt}\pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb% }{.75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@invoke{ }\pgfsys@color@gray@fill{.75}% \pgfsys@invoke{ }\hbox{{\definecolor[named]{.}{rgb}{.75,.75,.75}\color[rgb]{% .75,.75,.75}\definecolor[named]{pgfstrokecolor}{rgb}{.75,.75,.75}% \pgfsys@color@gray@stroke{.75}\pgfsys@color@gray@fill{.75}$\mathit{down}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL act end_CELL start_CELL italic_up , italic_down ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Count ( italic_n : blackboard_Z ) = end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_up ⋅ italic_Count ( italic_n + 1 ) + end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_n > 0 ) → italic_down ⋅ italic_Count ( italic_n - 1 ) ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Count ( 0 ) ; end_CELL end_ROW end_ARRAY end_CELL start_CELL ⋯ italic_up italic_up italic_up italic_up italic_down italic_down italic_down italic_down end_CELL end_ROW end_ARRAY

Note that the operator +++ is used here both as the addition on integers and as the non-deterministic choice between processes. Also observe that if n=0𝑛0n=0italic_n = 0 the action 𝑑𝑜𝑤𝑛𝑑𝑜𝑤𝑛\mathit{down}italic_down cannot be done, but the action 𝑢𝑝𝑢𝑝\mathit{up}italic_up is still possible. The labelled transition system belonging to this process is infinite and is partly drawn at the right of the process specification.

Probabilistic behaviour is indicated by dist d:D[𝑑𝑖𝑠𝑡].p\textbf{dist }d{:}D[\mathit{dist}].pdist italic_d : italic_D [ italic_dist ] . italic_p which expresses that the behaviour p𝑝pitalic_p is executed with a value for the variable d𝑑ditalic_d which is chosen according to the distribution 𝑑𝑖𝑠𝑡𝑑𝑖𝑠𝑡\mathit{dist}italic_dist. The distribution 𝑑𝑖𝑠𝑡𝑑𝑖𝑠𝑡\mathit{dist}italic_dist must sum up to one over all elements of the distribution. As a concrete example we express that one of the symbols 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star, 𝑔𝑟𝑎𝑝𝑒𝑠𝑔𝑟𝑎𝑝𝑒𝑠\mathit{grapes}italic_grapes and 𝑜𝑟𝑎𝑛𝑔𝑒𝑜𝑟𝑎𝑛𝑔𝑒\mathit{orange}italic_orange is displayed, each with probability 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG using the following process specification. In this case we only allow to gamble once, and we indicate that by putting δ𝛿\deltaitalic_δ after the display action.

act𝑑𝑖𝑠𝑝𝑙𝑎𝑦:𝑆𝑦𝑚𝑏𝑜𝑙;proc𝐺𝑎𝑚𝑏𝑙𝑒=dist s:𝑆𝑦𝑚𝑏𝑜𝑙[13].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)δ;init𝐺𝑎𝑚𝑏𝑙𝑒; 131313𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑠𝑡𝑎𝑟)𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑜𝑟𝑎𝑛𝑔𝑒)\begin{array}[]{@{}ll}\begin{array}[]{l@{\hspace{2mm}}l}\textbf{act}\hfil% \hskip 5.69054pt&\mathit{display}:\mathit{Symbol};\\ \textbf{proc}\hfil\hskip 5.69054pt&\mathit{Gamble}=\textbf{dist }s{:}\mathit{% Symbol}[\frac{1}{3}].\mathit{display}(s){\cdot}\delta;\\ \textbf{init}\hfil\hskip 5.69054pt&\mathit{Gamble};\end{array}&\hskip 28.45274% pt\raisebox{-31.2982pt}[0.0pt][28.45274pt]{ \leavevmode\hbox to157.64pt{\vbox to69.09pt{\pgfpicture\makeatletter\hbox{% \hskip 45.39392pt\lower-3.24544pt\hbox to0.0pt{\pgfsys@beginscope% \pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}% \pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to% 0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{65.44142pt}% \pgfsys@lineto{28.45276pt}{60.46097pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}% {}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-% 1.0}{1.0}{0.0}{28.45276pt}{60.46097pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{56.90552pt}\pgfsys@moveto{31.2982pt}{56.90552% pt}\pgfsys@curveto{31.2982pt}{58.47702pt}{30.02426pt}{59.75096pt}{28.45276pt}{% 59.75096pt}\pgfsys@curveto{26.88126pt}{59.75096pt}{25.60732pt}{58.47702pt}{25.% 60732pt}{56.90552pt}\pgfsys@curveto{25.60732pt}{55.33401pt}{26.88126pt}{54.060% 07pt}{28.45276pt}{54.06007pt}\pgfsys@curveto{30.02426pt}{54.06007pt}{31.2982pt% }{55.33401pt}{31.2982pt}{56.90552pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt% }{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{28.45276pt}\pgfsys@moveto{2.84544pt}{28.45276pt}% \pgfsys@curveto{2.84544pt}{30.02426pt}{1.5715pt}{31.2982pt}{0.0pt}{31.2982pt}% \pgfsys@curveto{-1.5715pt}{31.2982pt}{-2.84544pt}{30.02426pt}{-2.84544pt}{28.4% 5276pt}\pgfsys@curveto{-2.84544pt}{26.88126pt}{-1.5715pt}{25.60732pt}{0.0pt}{2% 5.60732pt}\pgfsys@curveto{1.5715pt}{25.60732pt}{2.84544pt}{26.88126pt}{2.84544% pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{28.45276pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{28.45276pt}\pgfsys@moveto{31.2982pt}{28.45276% pt}\pgfsys@curveto{31.2982pt}{30.02426pt}{30.02426pt}{31.2982pt}{28.45276pt}{3% 1.2982pt}\pgfsys@curveto{26.88126pt}{31.2982pt}{25.60732pt}{30.02426pt}{25.607% 32pt}{28.45276pt}\pgfsys@curveto{25.60732pt}{26.88126pt}{26.88126pt}{25.60732% pt}{28.45276pt}{25.60732pt}\pgfsys@curveto{30.02426pt}{25.60732pt}{31.2982pt}{% 26.88126pt}{31.2982pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt}{% 28.45276pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{56.90552pt}{28.45276pt}\pgfsys@moveto{59.75096pt}{28.45276% pt}\pgfsys@curveto{59.75096pt}{30.02426pt}{58.47702pt}{31.2982pt}{56.90552pt}{% 31.2982pt}\pgfsys@curveto{55.33401pt}{31.2982pt}{54.06007pt}{30.02426pt}{54.06% 007pt}{28.45276pt}\pgfsys@curveto{54.06007pt}{26.88126pt}{55.33401pt}{25.60732% pt}{56.90552pt}{25.60732pt}\pgfsys@curveto{58.47702pt}{25.60732pt}{59.75096pt}% {26.88126pt}{59.75096pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{56.90552pt% }{28.45276pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@moveto{2.84544pt}{0.0pt}% \pgfsys@curveto{2.84544pt}{1.5715pt}{1.5715pt}{2.84544pt}{0.0pt}{2.84544pt}% \pgfsys@curveto{-1.5715pt}{2.84544pt}{-2.84544pt}{1.5715pt}{-2.84544pt}{0.0pt}% \pgfsys@curveto{-2.84544pt}{-1.5715pt}{-1.5715pt}{-2.84544pt}{0.0pt}{-2.84544% pt}\pgfsys@curveto{1.5715pt}{-2.84544pt}{2.84544pt}{-1.5715pt}{2.84544pt}{0.0% pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ % } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{0.0pt}\pgfsys@moveto{31.2982pt}{0.0pt}% \pgfsys@curveto{31.2982pt}{1.5715pt}{30.02426pt}{2.84544pt}{28.45276pt}{2.8454% 4pt}\pgfsys@curveto{26.88126pt}{2.84544pt}{25.60732pt}{1.5715pt}{25.60732pt}{0% .0pt}\pgfsys@curveto{25.60732pt}{-1.5715pt}{26.88126pt}{-2.84544pt}{28.45276pt% }{-2.84544pt}\pgfsys@curveto{30.02426pt}{-2.84544pt}{31.2982pt}{-1.5715pt}{31.% 2982pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt}{0.0pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{56.90552pt}{0.0pt}\pgfsys@moveto{59.75096pt}{0.0pt}% \pgfsys@curveto{59.75096pt}{1.5715pt}{58.47702pt}{2.84544pt}{56.90552pt}{2.845% 44pt}\pgfsys@curveto{55.33401pt}{2.84544pt}{54.06007pt}{1.5715pt}{54.06007pt}{% 0.0pt}\pgfsys@curveto{54.06007pt}{-1.5715pt}{55.33401pt}{-2.84544pt}{56.90552% pt}{-2.84544pt}\pgfsys@curveto{58.47702pt}{-2.84544pt}{59.75096pt}{-1.5715pt}{% 59.75096pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{56.90552pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{26.46085pt}{54.9136pt}% \pgfsys@lineto{2.49394pt}{30.9467pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}% {{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.7071}% {-0.7071}{0.7071}{-0.7071}{2.49396pt}{30.94672pt}\pgfsys@invoke{ }% \pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }% \pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {8.5359pt}{48.3696pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{6.7859pt}{46.11404pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{54.06006pt}% \pgfsys@lineto{28.45276pt}{32.00821pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}% {}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-% 1.0}{1.0}{0.0}{28.45276pt}{32.00821pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {34.14322pt}{39.83368pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{32.39322pt}{37.57813pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{30.44466pt}{54.9136pt}% \pgfsys@lineto{54.41156pt}{30.9467pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{% }{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.7071}% {-0.7071}{0.7071}{0.7071}{54.41154pt}{30.94672pt}\pgfsys@invoke{ }% \pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }% \pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {48.3696pt}{48.3696pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{46.6196pt}{46.11404pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}% {rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}\pgfsys@moveto{22.76228pt}{51.21% 504pt}\pgfsys@curveto{28.45276pt}{48.3696pt}{28.45276pt}{48.3696pt}{34.14322pt% }{51.21504pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{0.0pt}{26.46085pt}\pgfsys@lineto{0% .0pt}{3.55545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-1.0}{1.0}{0.0}{0.% 0pt}{3.55545pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }% \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {-22.76228pt}{17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-42.06091pt}{15.32182pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{star})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{26.46085pt}% \pgfsys@lineto{28.45276pt}{3.55545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{% }{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-1% .0}{1.0}{0.0}{28.45276pt}{3.55545pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {28.45276pt}{11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{5.168pt}{9.63092pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{grapes})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{56.90552pt}{26.46085pt}% \pgfsys@lineto{56.90552pt}{3.55545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{% }{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-1% .0}{1.0}{0.0}{56.90552pt}{3.55545pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {85.35828pt}{17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{61.8013pt}{15.32182pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}% {rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{orange})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL act end_CELL start_CELL italic_display : italic_Symbol ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Gamble = dist italic_s : italic_Symbol [ divide start_ARG 1 end_ARG start_ARG 3 end_ARG ] . italic_display ( italic_s ) ⋅ italic_δ ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Gamble ; end_CELL end_ROW end_ARRAY end_CELL start_CELL divide start_ARG 1 end_ARG start_ARG 3 end_ARG divide start_ARG 1 end_ARG start_ARG 3 end_ARG divide start_ARG 1 end_ARG start_ARG 3 end_ARG italic_display ( italic_star ) italic_display ( italic_grapes ) italic_display ( italic_orange ) end_CELL end_ROW end_ARRAY

The transition system drawn at the right is a probabilistic transition system. In this case, with probability 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG one of the states at the mid level are selected, from which actions can be done. This two layer behaviour, first probabilities and then actions, can be repeated to indicate repeated probabilistic choices. When there is only one single probabilistic transition with probability 1111 in a state, then it is generally omitted and the action transitions are drawn immediately in that state.

Besides probabilistic behaviour it is also possible to model non-deterministic behaviour, which is behaviour that is fully unpredictable. For instance, when a slot machine has hold buttons to fix a particular symbol on the screen it is unpredictable which buttons a player will press. Note that this pressing behaviour is not random, as the player can or cannot have a particular strategy. Using the ‘+++’ or \sum operators such non-determinism can be expressed. We extend the previous example with a hold button where ℎ𝑜𝑙𝑑(𝑡𝑟𝑢𝑒)ℎ𝑜𝑙𝑑𝑡𝑟𝑢𝑒\mathit{hold}(\mathit{true})italic_hold ( italic_true ) means that the hold button is pressed, and ℎ𝑜𝑙𝑑(𝑓𝑎𝑙𝑠𝑒)ℎ𝑜𝑙𝑑𝑓𝑎𝑙𝑠𝑒\mathit{hold}(\mathit{false})italic_hold ( italic_false ) means the symbol is not fixed and can be randomly set again. Note that the equation for 𝐺𝑎𝑚𝑏𝑙𝑒𝐺𝑎𝑚𝑏𝑙𝑒\mathit{Gamble}italic_Gamble models the game where the symbol needs to be randomly chosen, and 𝐺𝑎𝑚𝑏𝑙𝑒(s)𝐺𝑎𝑚𝑏𝑙𝑒𝑠\mathit{Gamble}(s)italic_Gamble ( italic_s ) models the game where the symbol is set to s𝑠sitalic_s.

act𝑑𝑖𝑠𝑝𝑙𝑎𝑦:𝑆𝑦𝑚𝑏𝑜𝑙;ℎ𝑜𝑙𝑑:𝔹;proc𝐺𝑎𝑚𝑏𝑙𝑒=dist s:𝑆𝑦𝑚𝑏𝑜𝑙[13].𝐺𝑎𝑚𝑏𝑙𝑒(s);𝐺𝑎𝑚𝑏𝑙𝑒(s:𝑆𝑦𝑚𝑏𝑜𝑙)=𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)(ℎ𝑜𝑙𝑑(𝑡𝑟𝑢𝑒)𝐺𝑎𝑚𝑏𝑙𝑒(s)+ℎ𝑜𝑙𝑑(𝑓𝑎𝑙𝑠𝑒)𝐺𝑎𝑚𝑏𝑙𝑒);init𝐺𝑎𝑚𝑏𝑙𝑒; 131313𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑠𝑡𝑎𝑟)𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑜𝑟𝑎𝑛𝑔𝑒)ℎ𝑜𝑙𝑑(𝑡𝑟𝑢𝑒)ℎ𝑜𝑙𝑑(𝑓𝑎𝑙𝑠𝑒)ℎ𝑜𝑙𝑑(𝑡𝑟𝑢𝑒)ℎ𝑜𝑙𝑑(𝑓𝑎𝑙𝑠𝑒)ℎ𝑜𝑙𝑑(𝑡𝑟𝑢𝑒)ℎ𝑜𝑙𝑑(𝑓𝑎𝑙𝑠𝑒)\begin{array}[]{@{}ll}\begin{array}[]{l@{\hspace{2mm}}l}\textbf{act}\hfil% \hskip 5.69054pt&\mathit{display}:\mathit{Symbol};\\ \hfil\hskip 5.69054pt&\mathit{hold}:\mathbb{B};\\ \textbf{proc}\hfil\hskip 5.69054pt&\mathit{Gamble}=\textbf{dist }s{:}\mathit{% Symbol}[\frac{1}{3}].\mathit{Gamble}(s);\\ \hfil\hskip 5.69054pt&\mathit{Gamble}(s{:}\mathit{Symbol})=\\ \hfil\hskip 5.69054pt&\hskip 14.22636pt\mathit{display}(s){\cdot}\\ \hfil\hskip 5.69054pt&\hskip 28.45274pt(\mathit{hold}(\mathit{true}){\cdot}% \mathit{Gamble}(s)+{}\\ \hfil\hskip 5.69054pt&\hskip 32.72049pt\mathit{hold}(\mathit{false}){\cdot}% \mathit{Gamble});\\ \textbf{init}\hfil\hskip 5.69054pt&\mathit{Gamble};\end{array}&\raisebox{-56.9% 055pt}[0.0pt][28.45274pt]{ \leavevmode\hbox to242.65pt{\vbox to118.2pt{\pgfpicture\makeatletter\hbox{% \hskip 97.13919pt\lower-52.35759pt\hbox to0.0pt{\pgfsys@beginscope% \pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}% \pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to% 0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{65.44142pt}% \pgfsys@lineto{28.45276pt}{60.46097pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}% {}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-% 1.0}{1.0}{0.0}{28.45276pt}{60.46097pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{56.90552pt}\pgfsys@moveto{31.2982pt}{56.90552% pt}\pgfsys@curveto{31.2982pt}{58.47702pt}{30.02426pt}{59.75096pt}{28.45276pt}{% 59.75096pt}\pgfsys@curveto{26.88126pt}{59.75096pt}{25.60732pt}{58.47702pt}{25.% 60732pt}{56.90552pt}\pgfsys@curveto{25.60732pt}{55.33401pt}{26.88126pt}{54.060% 07pt}{28.45276pt}{54.06007pt}\pgfsys@curveto{30.02426pt}{54.06007pt}{31.2982pt% }{55.33401pt}{31.2982pt}{56.90552pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt% }{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{28.45276pt}\pgfsys@moveto{2.84544pt}{28.45276pt}% \pgfsys@curveto{2.84544pt}{30.02426pt}{1.5715pt}{31.2982pt}{0.0pt}{31.2982pt}% \pgfsys@curveto{-1.5715pt}{31.2982pt}{-2.84544pt}{30.02426pt}{-2.84544pt}{28.4% 5276pt}\pgfsys@curveto{-2.84544pt}{26.88126pt}{-1.5715pt}{25.60732pt}{0.0pt}{2% 5.60732pt}\pgfsys@curveto{1.5715pt}{25.60732pt}{2.84544pt}{26.88126pt}{2.84544% pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{28.45276pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{28.45276pt}\pgfsys@moveto{31.2982pt}{28.45276% pt}\pgfsys@curveto{31.2982pt}{30.02426pt}{30.02426pt}{31.2982pt}{28.45276pt}{3% 1.2982pt}\pgfsys@curveto{26.88126pt}{31.2982pt}{25.60732pt}{30.02426pt}{25.607% 32pt}{28.45276pt}\pgfsys@curveto{25.60732pt}{26.88126pt}{26.88126pt}{25.60732% pt}{28.45276pt}{25.60732pt}\pgfsys@curveto{30.02426pt}{25.60732pt}{31.2982pt}{% 26.88126pt}{31.2982pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{28.45276pt}{% 28.45276pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{56.90552pt}{28.45276pt}\pgfsys@moveto{59.75096pt}{28.45276% pt}\pgfsys@curveto{59.75096pt}{30.02426pt}{58.47702pt}{31.2982pt}{56.90552pt}{% 31.2982pt}\pgfsys@curveto{55.33401pt}{31.2982pt}{54.06007pt}{30.02426pt}{54.06% 007pt}{28.45276pt}\pgfsys@curveto{54.06007pt}{26.88126pt}{55.33401pt}{25.60732% pt}{56.90552pt}{25.60732pt}\pgfsys@curveto{58.47702pt}{25.60732pt}{59.75096pt}% {26.88126pt}{59.75096pt}{28.45276pt}\pgfsys@closepath\pgfsys@moveto{56.90552pt% }{28.45276pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@moveto{2.84544pt}{0.0pt}% \pgfsys@curveto{2.84544pt}{1.5715pt}{1.5715pt}{2.84544pt}{0.0pt}{2.84544pt}% \pgfsys@curveto{-1.5715pt}{2.84544pt}{-2.84544pt}{1.5715pt}{-2.84544pt}{0.0pt}% \pgfsys@curveto{-2.84544pt}{-1.5715pt}{-1.5715pt}{-2.84544pt}{0.0pt}{-2.84544% pt}\pgfsys@curveto{1.5715pt}{-2.84544pt}{2.84544pt}{-1.5715pt}{2.84544pt}{0.0% pt}\pgfsys@closepath\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ % } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{28.45276pt}{-42.67914pt}\pgfsys@moveto{31.2982pt}{-42.6791% 4pt}\pgfsys@curveto{31.2982pt}{-41.10764pt}{30.02426pt}{-39.8337pt}{28.45276pt% }{-39.8337pt}\pgfsys@curveto{26.88126pt}{-39.8337pt}{25.60732pt}{-41.10764pt}{% 25.60732pt}{-42.67914pt}\pgfsys@curveto{25.60732pt}{-44.25064pt}{26.88126pt}{-% 45.52458pt}{28.45276pt}{-45.52458pt}\pgfsys@curveto{30.02426pt}{-45.52458pt}{3% 1.2982pt}{-44.25064pt}{31.2982pt}{-42.67914pt}\pgfsys@closepath\pgfsys@moveto{% 28.45276pt}{-42.67914pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }{}\pgfsys@moveto{56.90552pt}{0.0pt}\pgfsys@moveto{59.75096pt}{0.0pt}% \pgfsys@curveto{59.75096pt}{1.5715pt}{58.47702pt}{2.84544pt}{56.90552pt}{2.845% 44pt}\pgfsys@curveto{55.33401pt}{2.84544pt}{54.06007pt}{1.5715pt}{54.06007pt}{% 0.0pt}\pgfsys@curveto{54.06007pt}{-1.5715pt}{55.33401pt}{-2.84544pt}{56.90552% pt}{-2.84544pt}\pgfsys@curveto{58.47702pt}{-2.84544pt}{59.75096pt}{-1.5715pt}{% 59.75096pt}{0.0pt}\pgfsys@closepath\pgfsys@moveto{56.90552pt}{0.0pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{26.46085pt}{54.9136pt}% \pgfsys@lineto{2.49394pt}{30.9467pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}% {{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.7071}% {-0.7071}{0.7071}{-0.7071}{2.49396pt}{30.94672pt}\pgfsys@invoke{ }% \pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }% \pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {8.5359pt}{48.3696pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{6.7859pt}{46.11404pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{54.06006pt}% \pgfsys@lineto{28.45276pt}{32.00821pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}% {}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-% 1.0}{1.0}{0.0}{28.45276pt}{32.00821pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {34.14322pt}{39.83368pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{32.39322pt}{37.57813pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{30.44466pt}{54.9136pt}% \pgfsys@lineto{54.41156pt}{30.9467pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{% }{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.7071}% {-0.7071}{0.7071}{0.7071}{54.41154pt}{30.94672pt}\pgfsys@invoke{ }% \pgfsys@invoke{ \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }% \pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {48.3696pt}{48.3696pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{46.6196pt}{46.11404pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}% {rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{$\frac{1}{3}$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}\pgfsys@moveto{22.76228pt}{51.21% 504pt}\pgfsys@curveto{28.45276pt}{48.3696pt}{28.45276pt}{48.3696pt}{34.14322pt% }{51.21504pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{0.0pt}{26.46085pt}\pgfsys@lineto{0% .0pt}{3.55545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-1.0}{1.0}{0.0}{0.% 0pt}{3.55545pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }% \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {-22.76228pt}{17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-42.06091pt}{15.32182pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{star})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{28.45276pt}{26.46085pt}% \pgfsys@lineto{28.45276pt}{-39.12367pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{% }{}{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{% -1.0}{1.0}{0.0}{28.45276pt}{-39.12367pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {0.0pt}{-19.91684pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-23.28476pt}{-21.66684pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{grapes})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{56.90552pt}{26.46085pt}% \pgfsys@lineto{56.90552pt}{3.55545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{% }{{}}{{{}}{{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.0}{-1% .0}{1.0}{0.0}{56.90552pt}{3.55545pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {85.35828pt}{17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{61.8013pt}{15.32182pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}% {rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% display}(\mathit{orange})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{-2.8454% 4pt}{0.0pt}\pgfsys@curveto{-62.59598pt}{11.38092pt}{-62.59598pt}{22.76228pt}{-% 3.55225pt}{28.38545pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}% {\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.9955}{0.0948}{-0.094% 8}{0.9955}{-3.55225pt}{28.38545pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {-28.45276pt}{31.2982pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-44.01807pt}{29.5482pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{true})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{-2.8454% 4pt}{0.0pt}\pgfsys@curveto{-73.97734pt}{-5.69046pt}{-73.97734pt}{56.90552pt}{2% 4.8973pt}{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1.0}{24.% 8973pt}{56.90552pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope }% \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {-34.14322pt}{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-50.20435pt}{55.15552pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{false})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{30.4446% 6pt}{-40.68723pt}\pgfsys@curveto{39.83368pt}{0.0pt}{39.83368pt}{0.0pt}{30.6820% 7pt}{25.79172pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.3344}{0.94243}{-0.94% 243}{-0.3344}{30.68208pt}{25.79172pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {56.90552pt}{-11.38092pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{41.34021pt}{-13.13092pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{true})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{25.6073% pt}{-42.67914pt}\pgfsys@curveto{-85.35828pt}{-51.21504pt}{-96.7392pt}{62.59598% pt}{24.89807pt}{56.93849pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}% {{{}}{\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{0.99892}{-0.04646% }{0.04646}{0.99892}{24.89806pt}{56.9385pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}% }} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {-28.45276pt}{-45.52458pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{-44.51389pt}{-47.27458pt}\pgfsys@invoke{ }\hbox{{\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{false})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{59.7509% 6pt}{0.0pt}\pgfsys@curveto{133.72787pt}{2.84544pt}{133.72787pt}{34.14322pt}{60% .45886pt}{28.50722pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}{% \pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-0.99706}{-0.0767}{0.07% 67}{-0.99706}{60.45888pt}{28.50722pt}\pgfsys@invoke{ }\pgfsys@invoke{ % \lxSVG@closescope }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {85.35828pt}{34.14322pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{69.79297pt}{32.39322pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{true})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} {}{{}}{}{{}}{}{{}}{}{}{}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }{}{}{}{}{{}}\pgfsys@moveto{59.7509% 6pt}{0.0pt}\pgfsys@curveto{145.10924pt}{-5.69046pt}{145.10924pt}{56.90552pt}{3% 2.00821pt}{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ }{{}{{}}{}{}{{}}{{{}}{{{}}% {\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{-1.0}{0.0}{0.0}{-1.0}{% 32.00821pt}{56.90552pt}\pgfsys@invoke{ }\pgfsys@invoke{ \lxSVG@closescope% }\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}{{}}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{}}{}\pgfsys@moveto% {91.04874pt}{56.90552pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{\hbox{{% \pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{74.98761pt}{55.15552pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor% }{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\scriptsize$\mathit{% hold}(\mathit{false})$}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL act end_CELL start_CELL italic_display : italic_Symbol ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_hold : blackboard_B ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Gamble = dist italic_s : italic_Symbol [ divide start_ARG 1 end_ARG start_ARG 3 end_ARG ] . italic_Gamble ( italic_s ) ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_Gamble ( italic_s : italic_Symbol ) = end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display ( italic_s ) ⋅ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_hold ( italic_true ) ⋅ italic_Gamble ( italic_s ) + end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_hold ( italic_false ) ⋅ italic_Gamble ) ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Gamble ; end_CELL end_ROW end_ARRAY end_CELL start_CELL divide start_ARG 1 end_ARG start_ARG 3 end_ARG divide start_ARG 1 end_ARG start_ARG 3 end_ARG divide start_ARG 1 end_ARG start_ARG 3 end_ARG italic_display ( italic_star ) italic_display ( italic_grapes ) italic_display ( italic_orange ) italic_hold ( italic_true ) italic_hold ( italic_false ) italic_hold ( italic_true ) italic_hold ( italic_false ) italic_hold ( italic_true ) italic_hold ( italic_false ) end_CELL end_ROW end_ARRAY

The language mCRL2 offers more ways of describing behaviour, in particular to describe parallel communicating components and time. We refer to [13] for the details.

2.2 Quantitative modal logic

Modal logics are developed to state and evaluate properties about behaviour. There are various modal logics, but we use Hennessy-Milner logic [17] extended with fixed point operators and data [13], called the modal μ𝜇\muitalic_μ-calculus, as this is the most expressive modal logic available [7]. In this logic each formula is evaluated on a state of a transition system and interpreted as true or false.

In [10, 11, 15] this logic is extended and interpreted on {,}subscript\mathbb{R}_{\{-\infty,\infty\}}blackboard_R start_POSTSUBSCRIPT { - ∞ , ∞ } end_POSTSUBSCRIPT, i.e., each formula yields a real number including ±plus-or-minus\pm\infty± ∞. Such a formula can be a real number, 𝑡𝑟𝑢𝑒𝑡𝑟𝑢𝑒\mathit{true}italic_true, interpreted as \infty, 𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒\mathit{false}italic_false, interpreted as -\infty- ∞. There are operators +++, \wedge, \vee where \wedge is interpreted as the minimum and \vee represents maximum. It is also possible to multiply a formula ϕitalic-ϕ\phiitalic_ϕ with a positive constant as in cϕ𝑐italic-ϕc*\phiitalic_c ∗ italic_ϕ. A valid formula is ((392)+1)𝑡𝑟𝑢𝑒3921𝑡𝑟𝑢𝑒((\frac{3}{9}*2)+1)\wedge\mathit{true}( ( divide start_ARG 3 end_ARG start_ARG 9 end_ARG ∗ 2 ) + 1 ) ∧ italic_true, which on any transition system is interpreted as 5353\frac{5}{3}divide start_ARG 5 end_ARG start_ARG 3 end_ARG.

Using the diamond modality aϕdelimited-⟨⟩𝑎italic-ϕ\langle a\rangle\phi⟨ italic_a ⟩ italic_ϕ and the box modality [a]ϕdelimited-[]𝑎italic-ϕ[a]\phi[ italic_a ] italic_ϕ the logic is connected to a probabilistic transition system. These modalities stem from [17]. The evaluation of a formula in a state with probabilistic transitions is the value obtained by evaluating the formula in the target states multiplied with the probability of the transition.

The evaluation of the diamond modality aϕdelimited-⟨⟩𝑎italic-ϕ\langle a\rangle\phi⟨ italic_a ⟩ italic_ϕ in a state with outgoing action transitions is the maximum of the evaluation of ϕitalic-ϕ\phiitalic_ϕ in all states reachable via an action a𝑎aitalic_a. If there are no outgoing a𝑎aitalic_a-transitions, the interpretation is -\infty- ∞. For instance, the evaluation of 0(𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)1)0delimited-⟨⟩𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠10\vee(\langle\mathit{display}(\mathit{grapes})\rangle 1)0 ∨ ( ⟨ italic_display ( italic_grapes ) ⟩ 1 ) in the transition system of the process 𝐺𝑎𝑚𝑏𝑙𝑒𝐺𝑎𝑚𝑏𝑙𝑒\mathit{Gamble}italic_Gamble is 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG, because the probability to perform action 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠\mathit{display}(\mathit{grapes})italic_display ( italic_grapes ) is 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG. Using the explicit values 00 and 1111 it evaluates to 1111 if the action 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠\mathit{display}(\mathit{grapes})italic_display ( italic_grapes ) is possible in a state, and to 00 if not. Using the probabilities, this value 1111 contributes 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG to the result. Note that the formula 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)1delimited-⟨⟩𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠1\langle\mathit{display}(\mathit{grapes})\rangle 1⟨ italic_display ( italic_grapes ) ⟩ 1 would evaluate to -\infty- ∞ because the formula evaluates to -\infty- ∞ in any state without outgoing transition 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠\mathit{display}(\mathit{grapes})italic_display ( italic_grapes ). Such states occur at the left and the right. These -\infty- ∞-ies dominate the outcome which is also -\infty- ∞.

The box modality [a]ϕdelimited-[]𝑎italic-ϕ[a]\phi[ italic_a ] italic_ϕ does the same as the diamond modality, except that it takes the minimum of the evaluation of ϕitalic-ϕ\phiitalic_ϕ over all a𝑎aitalic_a-transitions that it can do. If there are no a𝑎aitalic_a-transitions the box modality evaluates to infinity. Note that in states with exactly one outgoing transition labelled with action a𝑎aitalic_a, the diamond modality aϕdelimited-⟨⟩𝑎italic-ϕ\langle a\rangle\phi⟨ italic_a ⟩ italic_ϕ and [a]ϕdelimited-[]𝑎italic-ϕ[a]\phi[ italic_a ] italic_ϕ evaluate to exactly the same value.

Instead of an action, it is also possible to put a regular expression between the modality operator, such as 𝑡𝑟𝑢𝑒ϕdelimited-⟨⟩𝑡𝑟𝑢𝑒italic-ϕ\langle\mathit{true}\rangle\phi⟨ italic_true ⟩ italic_ϕ and 𝑡𝑟𝑢𝑒ϕdelimited-⟨⟩superscript𝑡𝑟𝑢𝑒italic-ϕ\langle\mathit{true}^{\star}\rangle\phi⟨ italic_true start_POSTSUPERSCRIPT ⋆ end_POSTSUPERSCRIPT ⟩ italic_ϕ. The 𝑡𝑟𝑢𝑒𝑡𝑟𝑢𝑒\mathit{true}italic_true represents any action and 𝑡𝑟𝑢𝑒superscript𝑡𝑟𝑢𝑒\mathit{true}^{\star}italic_true start_POSTSUPERSCRIPT ⋆ end_POSTSUPERSCRIPT stands for any finite sequence of actions. For instance 𝑡𝑟𝑢𝑒(𝑤𝑖𝑛10)delimited-⟨⟩superscript𝑡𝑟𝑢𝑒delimited-⟨⟩𝑤𝑖𝑛10\langle\mathit{true}^{\star}\rangle(\langle\mathit{win}\rangle 1\vee 0)⟨ italic_true start_POSTSUPERSCRIPT ⋆ end_POSTSUPERSCRIPT ⟩ ( ⟨ italic_win ⟩ 1 ∨ 0 ) is the probability that the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win is reachable.

Using the infimum and supremum operators, infd:D.ϕ\inf d{:}D.\phiroman_inf italic_d : italic_D . italic_ϕ and supd:D.ϕ\sup d{:}D.\phiroman_sup italic_d : italic_D . italic_ϕ, respectively, it is possible to minimise or maximise the value of a formula over the elements of a data domain. For instance, sups:𝑆𝑦𝑚𝑏𝑜𝑙.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)ϕ\sup s{:}\mathit{Symbol}.\langle\mathit{display}(s)\rangle\phiroman_sup italic_s : italic_Symbol . ⟨ italic_display ( italic_s ) ⟩ italic_ϕ provides the maximal value of evaluating this formula with 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star, 𝑔𝑟𝑎𝑝𝑒𝑠𝑔𝑟𝑎𝑝𝑒𝑠\mathit{grapes}italic_grapes and 𝑜𝑟𝑎𝑛𝑔𝑒𝑜𝑟𝑎𝑛𝑔𝑒\mathit{orange}italic_orange.

Using the minimal fixed point operator μ𝜇\muitalic_μ and maximal fixed point operator ν𝜈\nuitalic_ν values for iterative behaviour can be obtained. Concretely, consider a minimal fixed point formula μX.ϕformulae-sequence𝜇𝑋italic-ϕ\mu X.\phiitalic_μ italic_X . italic_ϕ where X𝑋Xitalic_X can occur in ϕitalic-ϕ\phiitalic_ϕ. If this formula is evaluated in a state, it yields the smallest value v𝑣vitalic_v such that v𝑣vitalic_v equals ϕitalic-ϕ\phiitalic_ϕ with X𝑋Xitalic_X in ϕitalic-ϕ\phiitalic_ϕ set to v𝑣vitalic_v. When the maximimum fixed point formula is used, it yields the largest such value v𝑣vitalic_v. For instance, the formula νX.𝑤𝑖𝑛Xformulae-sequence𝜈𝑋delimited-⟨⟩𝑤𝑖𝑛𝑋\nu X.\langle\mathit{win}\rangle Xitalic_ν italic_X . ⟨ italic_win ⟩ italic_X is equal to \infty if it is evaluated on a transition system that can perform an infinite sequence of actions 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win as in the process 𝐿𝑢𝑐𝑘𝑦𝐿𝑢𝑐𝑘𝑦\mathit{Lucky}italic_Lucky. Otherwise, it evaluates to -\infty- ∞.

In fixed point operators, parameters can be used. For instance, the formula μX(n:=0).(n𝑤𝑖𝑛X(n+1))\mu X(n{:}\mathbb{N}{=}0).(n\vee\langle\mathit{win}\rangle X(n+1))italic_μ italic_X ( italic_n : blackboard_N = 0 ) . ( italic_n ∨ ⟨ italic_win ⟩ italic_X ( italic_n + 1 ) ) counts the maximal number of consecutive actions 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win. It provides the smallest value n𝑛nitalic_n, being at least 00, and at least one more for every consecutive action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win that can be done. If an infinite number of actions 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win can be done, this formula yields \infty.

3 Simple slot machines

We show how to make models of slot machines of increasing complexity. The behaviour of the slot machine is systematically described in the behavioural language of mCRL2. Assessment of winning probabilities and ‘return to player’ are obtained via modal formulas.

3.1 A one column slot machine

We start with a simple slot machine showing only one symbol selected out of a star, grapes and an orange with equal probability. When a star is shown the player wins one credit. In the other two cases he loses and it costs one credit. Directly after winning or losing, the player can play again, and this can be repeated indefinitely.

sort 𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑠𝑡𝑎𝑟𝑔𝑟𝑎𝑝𝑒𝑠𝑜𝑟𝑎𝑛𝑔𝑒;act 𝑤𝑖𝑛,𝑙𝑜𝑠𝑒;𝑑𝑖𝑠𝑝𝑙𝑎𝑦:𝑆𝑦𝑚𝑏𝑜𝑙;proc 𝑃𝑙𝑎𝑦=dist s:𝑆𝑦𝑚𝑏𝑜𝑙[1/3].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)((s𝑠𝑡𝑎𝑟)𝑤𝑖𝑛𝑃𝑙𝑎𝑦+(s𝑔𝑟𝑎𝑝𝑒𝑠s𝑜𝑟𝑎𝑛𝑔𝑒)𝑙𝑜𝑠𝑒𝑃𝑙𝑎𝑦);init 𝑃𝑙𝑎𝑦; \begin{array}[]{@{}ll}\begin{array}[]{ll}\textbf{sort }&\mathit{Symbol}=% \textbf{struct }\mathit{star}\mid\mathit{grapes}\mid\mathit{orange};\\ \textbf{act }&\mathit{win},\mathit{lose};\\ &\mathit{display}:\mathit{Symbol};\\ \textbf{proc }&\mathit{Play}=\textbf{dist }s{:}\mathit{Symbol}[1/3].\mathit{% display}(s){\cdot}\\ &\hskip 56.9055pt((s\approx\mathit{star})\rightarrow\mathit{win}{\cdot}\mathit% {Play}+{}\\ &\hskip 56.9055pt\phantom{(}(s\approx\mathit{grapes}\vee s\approx\mathit{% orange})\rightarrow\mathit{lose}{\cdot}\mathit{Play});\phantom{)}\\ \textbf{init }&\mathit{Play};\end{array}&\hskip 28.45274pt\raisebox{-19.91684% pt}[0.0pt][28.45274pt]{ \leavevmode\hbox to34.94pt{\vbox to52.58pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-3.24544pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }\color[rgb]{1,1,0}\definecolor[named]{pgfstrokecolor}{rgb}{% 1,1,0}\pgfsys@color@cmyk@stroke{0}{0}{1}{0}\pgfsys@invoke{ }% \pgfsys@color@cmyk@fill{0}{0}{1}{0}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{1,1,0}{}\pgfsys@moveto{25.03856pt}{26.17648pt}% \pgfsys@lineto{3.41418pt}{26.17648pt}\pgfsys@lineto{21.05519pt}{13.6572pt}% \pgfsys@lineto{14.22638pt}{34.14322pt}\pgfsys@lineto{7.39755pt}{13.6572pt}% \pgfsys@lineto{25.03856pt}{26.17648pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}{}\pgfsys@moveto{25.03856pt}{26.17648pt}\pgfsys@lineto{3.41418pt}{26.17648% pt}\pgfsys@lineto{21.05519pt}{13.6572pt}\pgfsys@lineto{14.22638pt}{34.14322pt}% \pgfsys@lineto{7.39755pt}{13.6572pt}\pgfsys@lineto{25.03856pt}{26.17648pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL sort end_CELL start_CELL italic_Symbol = struct italic_star ∣ italic_grapes ∣ italic_orange ; end_CELL end_ROW start_ROW start_CELL act end_CELL start_CELL italic_win , italic_lose ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display : italic_Symbol ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Play = dist italic_s : italic_Symbol [ 1 / 3 ] . italic_display ( italic_s ) ⋅ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( ( italic_s ≈ italic_star ) → italic_win ⋅ italic_Play + end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s ≈ italic_grapes ∨ italic_s ≈ italic_orange ) → italic_lose ⋅ italic_Play ) ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Play ; end_CELL end_ROW end_ARRAY end_CELL start_CELL end_CELL end_ROW end_ARRAY

The probabilistic transition system for the one column slot machine is given below.

1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑠𝑡𝑎𝑟)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑠𝑡𝑎𝑟\mathit{display}(\mathit{star})italic_display ( italic_star )𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑔𝑟𝑎𝑝𝑒𝑠)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑔𝑟𝑎𝑝𝑒𝑠\mathit{display}(\mathit{grapes})italic_display ( italic_grapes )𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑜𝑟𝑎𝑛𝑔𝑒)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑜𝑟𝑎𝑛𝑔𝑒\mathit{display}(\mathit{orange})italic_display ( italic_orange )𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose

The probability to win a single game is given by the modal formula

sups:𝑆𝑦𝑚𝑏𝑜𝑙.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)(𝑤𝑖𝑛10).\sup s{:}\mathit{Symbol}.\langle\mathit{display}(s)\rangle(\langle\mathit{win}% \rangle 1\vee 0).roman_sup italic_s : italic_Symbol . ⟨ italic_display ( italic_s ) ⟩ ( ⟨ italic_win ⟩ 1 ∨ 0 ) .

The answer is 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG.

We can replace 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑠\mathit{display}(s)italic_display ( italic_s ) by 𝑡𝑟𝑢𝑒𝑡𝑟𝑢𝑒\mathit{true}italic_true

𝑡𝑟𝑢𝑒(𝑤𝑖𝑛10),delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑤𝑖𝑛10\langle\mathit{true}\rangle(\langle\mathit{win}\rangle 1\vee 0),⟨ italic_true ⟩ ( ⟨ italic_win ⟩ 1 ∨ 0 ) , (1)

which also yields 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG. It says that after an arbitrary action, 1111 is returned if 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win is possible, and otherwise 00. These values are weighted with the probabilities in the distribution.

Replacing 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑠\mathit{display}(s)italic_display ( italic_s ) by 𝑡𝑟𝑢𝑒superscript𝑡𝑟𝑢𝑒\mathit{true}^{\star}italic_true start_POSTSUPERSCRIPT ⋆ end_POSTSUPERSCRIPT changes the meaning. The formula now becomes

𝑡𝑟𝑢𝑒(𝑤𝑖𝑛10).delimited-⟨⟩superscript𝑡𝑟𝑢𝑒delimited-⟨⟩𝑤𝑖𝑛10\langle\mathit{true}^{\star}\rangle(\langle\mathit{win}\rangle 1\vee 0).⟨ italic_true start_POSTSUPERSCRIPT ⋆ end_POSTSUPERSCRIPT ⟩ ( ⟨ italic_win ⟩ 1 ∨ 0 ) .

It gives the probability of reaching 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win after an arbitrary sequence of actions. This essentially provides the probability that on the one column slot machine star will ultimately appear. This probability is of course 1111 as is confirmed by evaluating the formula.

The expected number of times one has to play to encounter a star is given by the formula

μX.sups:𝑆𝑦𝑚𝑏𝑜𝑙.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s)(s𝑠𝑡𝑎𝑟1)((s𝑠𝑡𝑎𝑟𝑡𝑟𝑢𝑒(X+1))0).\mu X.\sup s{:}\mathit{Symbol}.\langle\mathit{display}(s)\rangle(s\approx% \mathit{star}\wedge 1)\vee((s\not\approx\mathit{star}\wedge\langle\mathit{true% }\rangle(X+1))\vee 0).italic_μ italic_X . roman_sup italic_s : italic_Symbol . ⟨ italic_display ( italic_s ) ⟩ ( italic_s ≈ italic_star ∧ 1 ) ∨ ( ( italic_s ≉ italic_star ∧ ⟨ italic_true ⟩ ( italic_X + 1 ) ) ∨ 0 ) . (2)

This formula expresses that the expected number of rounds to encounter a star is equal to 1111 if the star is encountered directly, and it is 1111 plus the expected number of rounds if no star is observed in a round. We search for the minimum value of the fixed point X𝑋Xitalic_X that is at least zero. If zero is not added, the minimal solution is -\infty- ∞. The formula evaluates to 3333 meaning that one encounters a star after 3333 rounds on average.

The one column slot machine behaves exactly the same for every round. But suppose we would be interested in the average long run reward per round, this can be formulated by:

μX(𝑔𝑎𝑖𝑛:=0,𝑟𝑜𝑢𝑛𝑑𝑠:=0).𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑔𝑎𝑖𝑛/𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠<𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠(𝑡𝑟𝑢𝑒𝑤𝑖𝑛X(𝑔𝑎𝑖𝑛+1,𝑟𝑜𝑢𝑛𝑑𝑠+1)𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒X(𝑔𝑎𝑖𝑛1,𝑟𝑜𝑢𝑛𝑑𝑠+1)).\begin{array}[]{@{}l}\mu X(\mathit{gain}{:}\mathbb{Z}{=}0,\mathit{rounds}{:}% \mathbb{N}{=}0).\\ \hskip 28.45274pt\mathit{rounds}\approx\mathit{max\_rounds}\wedge\mathit{gain}% /\mathit{rounds}\vee{}\\ \hskip 28.45274pt\mathit{rounds}<\mathit{max\_rounds}\wedge{}\\ \hskip 56.9055pt(\langle\mathit{true}\rangle\langle\mathit{win}\rangle X(% \mathit{gain}{+}1,\mathit{rounds}{+}1)\vee\langle\mathit{true}\rangle\langle% \mathit{lose}\rangle X(\mathit{gain}{-}1,\mathit{rounds}{+}1)).\end{array}start_ARRAY start_ROW start_CELL italic_μ italic_X ( italic_gain : blackboard_Z = 0 , italic_rounds : blackboard_N = 0 ) . end_CELL end_ROW start_ROW start_CELL italic_rounds ≈ italic_max _ italic_rounds ∧ italic_gain / italic_rounds ∨ end_CELL end_ROW start_ROW start_CELL italic_rounds < italic_max _ italic_rounds ∧ end_CELL end_ROW start_ROW start_CELL ( ⟨ italic_true ⟩ ⟨ italic_win ⟩ italic_X ( italic_gain + 1 , italic_rounds + 1 ) ∨ ⟨ italic_true ⟩ ⟨ italic_lose ⟩ italic_X ( italic_gain - 1 , italic_rounds + 1 ) ) . end_CELL end_ROW end_ARRAY (3)

We calculate this gain explicitly for 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds of rounds. In the variable 𝑔𝑎𝑖𝑛𝑔𝑎𝑖𝑛\mathit{gain}italic_gain the cumulative gain for all rounds is recalled. If the number of rounds 𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠\mathit{rounds}italic_rounds becomes equal to the maximal number of rounds, the average gain 𝑔𝑎𝑖𝑛/𝑟𝑜𝑢𝑛𝑑𝑠𝑔𝑎𝑖𝑛𝑟𝑜𝑢𝑛𝑑𝑠\mathit{gain}/\mathit{rounds}italic_gain / italic_rounds is returned. Otherwise, if the game is won, indicated by the modalities 𝑡𝑟𝑢𝑒𝑤𝑖𝑛delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑤𝑖𝑛\langle\mathit{true}\rangle\langle\mathit{win}\rangle\ldots⟨ italic_true ⟩ ⟨ italic_win ⟩ …, the expected value with the gain incremented by 1111 is delivered, and if the game is lost, shown by 𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑙𝑜𝑠𝑒\langle\mathit{true}\rangle\langle\mathit{lose}\rangle\ldots⟨ italic_true ⟩ ⟨ italic_lose ⟩ …, the expected value with the gain decremented by 1111 is the result. Note that the use of variables in fixed point operators allow for far more complex results to be derived on behaviour. As expected, evaluating this formula on the behaviour of the one column slot machine yields an average gain of 1313-\frac{1}{3}- divide start_ARG 1 end_ARG start_ARG 3 end_ARG. In Section 4.4 a variant of this formula is used where only one parameter in the fixed point variable is required.

3.2 A three column slot machine

A three column slot machine has three windows where stars, grapes and oranges can appear each with equal probability. A game is won if in all three windows the same symbol appears. Its behaviour is described using the following mCRL2 specification. Note the use of if-then-else, denoted by \ldots\rightarrow\ldots\diamond\ldots… → … ⋄ …, which describes winning if the symbols are equal, and losing, otherwise.

sort 𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑠𝑡𝑎𝑟𝑔𝑟𝑎𝑝𝑒𝑠𝑜𝑟𝑎𝑛𝑔𝑒;act 𝑤𝑖𝑛,𝑙𝑜𝑠𝑒;𝑑𝑖𝑠𝑝𝑙𝑎𝑦:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙;proc 𝑃𝑙𝑎𝑦=dist s1,s2,s3:𝑆𝑦𝑚𝑏𝑜𝑙[1/27].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s1,s2,s3)((s1s2s2s3)𝑤𝑖𝑛𝑙𝑜𝑠𝑒)𝑃𝑙𝑎𝑦;init 𝑃𝑙𝑎𝑦;   \begin{array}[]{@{}ll}\begin{array}[]{ll}\textbf{sort }&\mathit{Symbol}=% \textbf{struct }\mathit{star}\mid\mathit{grapes}\mid\mathit{orange};\\ \textbf{act }&\mathit{win},\mathit{lose};\\ &\mathit{display}:\mathit{Symbol}\times\mathit{Symbol}\times\mathit{Symbol};\\ \textbf{proc }&\mathit{Play}=\textbf{dist }s_{1},s_{2},s_{3}{:}\mathit{Symbol}% [1/27].\mathit{display}(s_{1},s_{2},s_{3}){\cdot}\\ &\hskip 56.9055pt((s_{1}\approx s_{2}\wedge s_{2}\approx s_{3})\rightarrow% \mathit{win}\diamond\mathit{lose}){\cdot}\mathit{Play};\\ \textbf{init }&\mathit{Play};\end{array}&\hskip 5.69046pt\raisebox{-19.91684pt% }[0.0pt][28.45274pt]{ \leavevmode\hbox to34.94pt{\vbox to52.58pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-3.24544pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }\color[rgb]{1,1,0}\definecolor[named]{pgfstrokecolor}{rgb}{% 1,1,0}\pgfsys@color@cmyk@stroke{0}{0}{1}{0}\pgfsys@invoke{ }% \pgfsys@color@cmyk@fill{0}{0}{1}{0}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{1,1,0}{}\pgfsys@moveto{25.03856pt}{26.17648pt}% \pgfsys@lineto{3.41418pt}{26.17648pt}\pgfsys@lineto{21.05519pt}{13.6572pt}% \pgfsys@lineto{14.22638pt}{34.14322pt}\pgfsys@lineto{7.39755pt}{13.6572pt}% \pgfsys@lineto{25.03856pt}{26.17648pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}{}\pgfsys@moveto{25.03856pt}{26.17648pt}\pgfsys@lineto{3.41418pt}{26.17648% pt}\pgfsys@lineto{21.05519pt}{13.6572pt}\pgfsys@lineto{14.22638pt}{34.14322pt}% \pgfsys@lineto{7.39755pt}{13.6572pt}\pgfsys@lineto{25.03856pt}{26.17648pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}} \leavevmode\hbox to34.94pt{\vbox to52.58pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-3.24544pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{1,.5,0}\definecolor[named]{pgfstrokecolor}{rgb}{1,.5,0}% \pgfsys@color@rgb@stroke{1}{.5}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{1}{.% 5}{0}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,.5,0}{}% \pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt}% \pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34.% 42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546pt% }{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14.2% 2638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.76108% pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.04666% pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt% }\pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34% .42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546% pt}{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14% .22638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.761% 08pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.046% 66pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}{}\pgfsys@moveto{21.33957pt}{28.45276pt}% \pgfsys@moveto{22.76228pt}{28.45276pt}\pgfsys@curveto{22.76228pt}{29.23851pt}{% 22.12532pt}{29.87547pt}{21.33957pt}{29.87547pt}\pgfsys@curveto{20.55382pt}{29.% 87547pt}{19.91685pt}{29.23851pt}{19.91685pt}{28.45276pt}\pgfsys@curveto{19.916% 85pt}{27.667pt}{20.55382pt}{27.03004pt}{21.33957pt}{27.03004pt}\pgfsys@curveto% {22.12532pt}{27.03004pt}{22.76228pt}{27.667pt}{22.76228pt}{28.45276pt}% \pgfsys@closepath\pgfsys@moveto{21.33957pt}{28.45276pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}} \leavevmode\hbox to34.94pt{\vbox to52.58pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-3.24544pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke% { }\definecolor{pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to0.0pt{% \pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{1,.5,0}\definecolor[named]{pgfstrokecolor}{rgb}{1,.5,0}% \pgfsys@color@rgb@stroke{1}{.5}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{1}{.% 5}{0}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,.5,0}{}% \pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt}% \pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34.% 42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546pt% }{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14.2% 2638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.76108% pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.04666% pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt% }\pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34% .42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546% pt}{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14% .22638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.761% 08pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.046% 66pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}{}\pgfsys@moveto{21.33957pt}{28.45276pt}% \pgfsys@moveto{22.76228pt}{28.45276pt}\pgfsys@curveto{22.76228pt}{29.23851pt}{% 22.12532pt}{29.87547pt}{21.33957pt}{29.87547pt}\pgfsys@curveto{20.55382pt}{29.% 87547pt}{19.91685pt}{29.23851pt}{19.91685pt}{28.45276pt}\pgfsys@curveto{19.916% 85pt}{27.667pt}{20.55382pt}{27.03004pt}{21.33957pt}{27.03004pt}\pgfsys@curveto% {22.12532pt}{27.03004pt}{22.76228pt}{27.667pt}{22.76228pt}{28.45276pt}% \pgfsys@closepath\pgfsys@moveto{21.33957pt}{28.45276pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL sort end_CELL start_CELL italic_Symbol = struct italic_star ∣ italic_grapes ∣ italic_orange ; end_CELL end_ROW start_ROW start_CELL act end_CELL start_CELL italic_win , italic_lose ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display : italic_Symbol × italic_Symbol × italic_Symbol ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Play = dist italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol [ 1 / 27 ] . italic_display ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ⋅ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) → italic_win ⋄ italic_lose ) ⋅ italic_Play ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Play ; end_CELL end_ROW end_ARRAY end_CELL start_CELL end_CELL end_ROW end_ARRAY

We can essentially analyse this game with the same formulas as in the previous section. The probability to win the game once, given by formula (1) is 1919\frac{1}{9}divide start_ARG 1 end_ARG start_ARG 9 end_ARG. The formula (2) to indicate the expected number of steps to win must slightly be adapted, as winning now means seeing three similar symbols. It becomes:

μX.sups1,s2,s3:𝑆𝑦𝑚𝑏𝑜𝑙.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s1,s2,s3)(s1s2s2s31((s1s2s2s3)𝑡𝑟𝑢𝑒(X+1))0)\begin{array}[]{@{}l}\mu X.\sup s_{1},s_{2},s_{3}{:}\mathit{Symbol}.\langle% \mathit{display}(s_{1},s_{2},s_{3})\rangle\\ \hskip 85.35826pt(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3}\wedge 1\vee((s_{% 1}\not\approx s_{2}\vee s_{2}\not\approx s_{3})\wedge\langle\mathit{true}% \rangle(X{+}1))\vee 0)\end{array}start_ARRAY start_ROW start_CELL italic_μ italic_X . roman_sup italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol . ⟨ italic_display ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ⟩ end_CELL end_ROW start_ROW start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ 1 ∨ ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≉ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∨ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≉ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ∧ ⟨ italic_true ⟩ ( italic_X + 1 ) ) ∨ 0 ) end_CELL end_ROW end_ARRAY (4)

and yields the answer 9999.

The average expected loss per game is given by the formula (3) and it yields 7979-\frac{7}{9}- divide start_ARG 7 end_ARG start_ARG 9 end_ARG.

3.3 A three column slot machine with hold buttons

Slot machines sometimes have hold buttons. After a game in which nothing was won, the player can press the hold buttons under each symbol, to fix these symbols for the next game. For a three column slot machine this is beneficial for the player, because when there are two equal symbols that are fixed, the probability of winning the next game increases to 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG.

The behaviour of such as slot machine becomes more complicated. Not only the winning probability can differ for each game, but also there is non-deterministic behaviour as the player may or may not press the hold buttons.

The slot machine with hold buttons can be described as follows.

sort 𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑠𝑡𝑎𝑟𝑔𝑟𝑎𝑝𝑒𝑠𝑜𝑟𝑎𝑛𝑔𝑒;map 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛:𝔹×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙;var b:𝔹;r,s:𝑆𝑦𝑚𝑏𝑜𝑙;eqn 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(b,r,s)=𝑖𝑓(b,𝑖𝑓(rs,1,0),13);act 𝑤𝑖𝑛,𝑙𝑜𝑠𝑒;ℎ𝑜𝑙𝑑:𝔹×𝔹×𝔹;𝑑𝑖𝑠𝑝𝑙𝑎𝑦:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙;proc 𝑃𝑙𝑎𝑦(ℎ𝑜𝑙𝑑1,ℎ𝑜𝑙𝑑2,ℎ𝑜𝑙𝑑3:𝔹,r1,r2,r3:𝑆𝑦𝑚𝑏𝑜𝑙)=dist s1,s2,s3:𝑆𝑦𝑚𝑏𝑜𝑙[𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(ℎ𝑜𝑙𝑑1,r1,s1)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(ℎ𝑜𝑙𝑑2,r2,s2)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(ℎ𝑜𝑙𝑑3,r3,s3)].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s1,s2,s3)(s1s2s2s3)𝑤𝑖𝑛𝑃𝑙𝑎𝑦(𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,s1,s2,s3)𝑙𝑜𝑠𝑒b1,b2,b3:𝔹ℎ𝑜𝑙𝑑(b1,b2,b3)𝑃𝑙𝑎𝑦(b1,b2,b3,s1,s2,s3);init 𝑃𝑙𝑎𝑦(𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑠𝑡𝑎𝑟,𝑠𝑡𝑎𝑟,𝑠𝑡𝑎𝑟); hold hold hold \begin{array}[]{@{}ll}\begin{array}[]{ll}\textbf{sort }&\mathit{Symbol}=% \textbf{struct }\mathit{star}\mid\mathit{grapes}\mid\mathit{orange};\\ \textbf{map }&\mathit{distribution}:\mathbb{B}\times\mathit{Symbol}\times% \mathit{Symbol}\rightarrow\mathbb{R};\\ \textbf{var }&b:\mathbb{B};\\ &r,s:\mathit{Symbol};\\ \textbf{eqn }&\mathit{distribution}(b,r,s)=\mathit{if}(b,\mathit{if}(r\approx s% ,1,0),\frac{1}{3});\\ \textbf{act }&\mathit{win},\mathit{lose};\\ &\mathit{hold}:\mathbb{B}\times\mathbb{B}\times\mathbb{B};\\ &\mathit{display}:\mathit{Symbol}\times\mathit{Symbol}\times\mathit{Symbol};\\ \textbf{proc }&\mathit{Play}(\mathit{hold}_{1},\mathit{hold}_{2},\mathit{hold}% _{3}:\mathbb{B},r_{1},r_{2},r_{3}:\mathit{Symbol})=\\ &\hskip 28.45274pt\textbf{dist }s_{1},s_{2},s_{3}:\mathit{Symbol}[\mathit{% distribution}(\mathit{hold}_{1},r_{1},s_{1})*\\ &\hskip 125.19194pt\mathit{distribution}(\mathit{hold}_{2},r_{2},s_{2})*\\ &\hskip 125.19194pt\mathit{distribution}(\mathit{hold}_{3},r_{3},s_{3})].\\ &\hskip 56.9055pt\mathit{display}(s_{1},s_{2},s_{3}){\cdot}\\ &\hskip 56.9055pt(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3})\\ &\hskip 65.44142pt\rightarrow\mathit{win}{\cdot}\mathit{Play}(\mathit{false},% \mathit{false},\mathit{false},s_{1},s_{2},s_{3})\\ &\hskip 65.44142pt\leavevmode\nobreak\ \diamond\leavevmode\nobreak\ % \leavevmode\nobreak\ \mathit{lose}{\cdot}\sum_{b_{1},b_{2},b_{3}:\mathbb{B}}% \mathit{hold}(b_{1},b_{2},b_{3}){\cdot}\mathit{Play}(b_{1},b_{2},b_{3},s_{1},s% _{2},s_{3});\\ \textbf{init }&\mathit{Play}(\mathit{false},\mathit{false},\mathit{false},% \mathit{star},\mathit{star},\mathit{star});\end{array}&\raisebox{0.0pt}[0.0pt]% [28.45274pt]{ \leavevmode\hbox to34.94pt{\vbox to75.35pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-26.00772pt\hbox to0.0pt{\pgfsys@beginscope% \pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}% \pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to% 0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@moveto{22.76% 228pt}{-17.07182pt}\pgfsys@curveto{22.76228pt}{-12.35751pt}{18.94069pt}{-8.535% 92pt}{14.22638pt}{-8.53592pt}\pgfsys@curveto{9.51207pt}{-8.53592pt}{5.69048pt}% {-12.35751pt}{5.69048pt}{-17.07182pt}\pgfsys@curveto{5.69048pt}{-21.78613pt}{9% .51207pt}{-25.60773pt}{14.22638pt}{-25.60773pt}\pgfsys@curveto{18.94069pt}{-25% .60773pt}{22.76228pt}{-21.78613pt}{22.76228pt}{-17.07182pt}\pgfsys@closepath% \pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{% \hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{6.6708pt}{-19.8496pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\footnotesize hold}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{1,.5,0}\definecolor[named]{pgfstrokecolor}{rgb}{1,.5,0}% \pgfsys@color@rgb@stroke{1}{.5}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{1}{.% 5}{0}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{1,.5,0}{}% \pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt}% \pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34.% 42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546pt% }{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14.2% 2638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.76108% pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.04666% pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{14.22638pt}{23.04666pt}\pgfsys@moveto{25.6073pt}{23.04666pt% }\pgfsys@curveto{25.6073pt}{29.33224pt}{20.51196pt}{34.42758pt}{14.22638pt}{34% .42758pt}\pgfsys@curveto{7.9408pt}{34.42758pt}{2.84546pt}{29.33224pt}{2.84546% pt}{23.04666pt}\pgfsys@curveto{2.84546pt}{16.76108pt}{7.9408pt}{11.66574pt}{14% .22638pt}{11.66574pt}\pgfsys@curveto{20.51196pt}{11.66574pt}{25.6073pt}{16.761% 08pt}{25.6073pt}{23.04666pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{23.046% 66pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}{}\pgfsys@moveto{21.33957pt}{28.45276pt}% \pgfsys@moveto{22.76228pt}{28.45276pt}\pgfsys@curveto{22.76228pt}{29.23851pt}{% 22.12532pt}{29.87547pt}{21.33957pt}{29.87547pt}\pgfsys@curveto{20.55382pt}{29.% 87547pt}{19.91685pt}{29.23851pt}{19.91685pt}{28.45276pt}\pgfsys@curveto{19.916% 85pt}{27.667pt}{20.55382pt}{27.03004pt}{21.33957pt}{27.03004pt}\pgfsys@curveto% {22.12532pt}{27.03004pt}{22.76228pt}{27.667pt}{22.76228pt}{28.45276pt}% \pgfsys@closepath\pgfsys@moveto{21.33957pt}{28.45276pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}} \leavevmode\hbox to34.94pt{\vbox to75.35pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-26.00772pt\hbox to0.0pt{\pgfsys@beginscope% \pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}% \pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to% 0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@moveto{22.76% 228pt}{-17.07182pt}\pgfsys@curveto{22.76228pt}{-12.35751pt}{18.94069pt}{-8.535% 92pt}{14.22638pt}{-8.53592pt}\pgfsys@curveto{9.51207pt}{-8.53592pt}{5.69048pt}% {-12.35751pt}{5.69048pt}{-17.07182pt}\pgfsys@curveto{5.69048pt}{-21.78613pt}{9% .51207pt}{-25.60773pt}{14.22638pt}{-25.60773pt}\pgfsys@curveto{18.94069pt}{-25% .60773pt}{22.76228pt}{-21.78613pt}{22.76228pt}{-17.07182pt}\pgfsys@closepath% \pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{% \hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{6.6708pt}{-19.8496pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\footnotesize hold}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }\color[rgb]{1,1,0}\definecolor[named]{pgfstrokecolor}{rgb}{% 1,1,0}\pgfsys@color@cmyk@stroke{0}{0}{1}{0}\pgfsys@invoke{ }% \pgfsys@color@cmyk@fill{0}{0}{1}{0}\pgfsys@invoke{ }\definecolor[named]{% pgffillcolor}{rgb}{1,1,0}{}\pgfsys@moveto{25.03856pt}{26.17648pt}% \pgfsys@lineto{3.41418pt}{26.17648pt}\pgfsys@lineto{21.05519pt}{13.6572pt}% \pgfsys@lineto{14.22638pt}{34.14322pt}\pgfsys@lineto{7.39755pt}{13.6572pt}% \pgfsys@lineto{25.03856pt}{26.17648pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{} {}{}{}\pgfsys@moveto{25.03856pt}{26.17648pt}\pgfsys@lineto{3.41418pt}{26.17648% pt}\pgfsys@lineto{21.05519pt}{13.6572pt}\pgfsys@lineto{14.22638pt}{34.14322pt}% \pgfsys@lineto{7.39755pt}{13.6572pt}\pgfsys@lineto{25.03856pt}{26.17648pt}% \pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}} \leavevmode\hbox to34.94pt{\vbox to75.35pt{\pgfpicture\makeatletter\hbox{% \hskip 3.24544pt\lower-26.00772pt\hbox to0.0pt{\pgfsys@beginscope% \pgfsys@invoke{ }\definecolor{pgfstrokecolor}{rgb}{0,0,0}% \pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}\pgfsys@invoke{ }\nullfont\hbox to% 0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{0.0pt}{0.0pt}\pgfsys@lineto{0.0pt}{46.09332% pt}\pgfsys@lineto{28.45276pt}{46.09332pt}\pgfsys@lineto{28.45276pt}{0.0pt}% \pgfsys@lineto{0.0pt}{0.0pt}\pgfsys@stroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{} {}{} {}{} {}{} {}{}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{-2.84544pt}{-2.84544pt}\pgfsys@lineto{-2.845% 44pt}{48.93877pt}\pgfsys@lineto{31.2982pt}{48.93877pt}\pgfsys@lineto{31.2982pt% }{-2.84544pt}\pgfsys@lineto{-2.84544pt}{-2.84544pt}\pgfsys@stroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}% \pgfsys@invoke{ }{}\pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@moveto{22.76% 228pt}{-17.07182pt}\pgfsys@curveto{22.76228pt}{-12.35751pt}{18.94069pt}{-8.535% 92pt}{14.22638pt}{-8.53592pt}\pgfsys@curveto{9.51207pt}{-8.53592pt}{5.69048pt}% {-12.35751pt}{5.69048pt}{-17.07182pt}\pgfsys@curveto{5.69048pt}{-21.78613pt}{9% .51207pt}{-25.60773pt}{14.22638pt}{-25.60773pt}\pgfsys@curveto{18.94069pt}{-25% .60773pt}{22.76228pt}{-21.78613pt}{22.76228pt}{-17.07182pt}\pgfsys@closepath% \pgfsys@moveto{14.22638pt}{-17.07182pt}\pgfsys@stroke\pgfsys@invoke{ }\hbox{% \hbox{{\pgfsys@beginscope\pgfsys@invoke{ }{{}{}{{ {}{}}}{ {}{}} {{}{{}}}{{}{}}{}{{}{}} { }{{{{}}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@transformcm{1.0}{0.0}{0.0}{1% .0}{6.6708pt}{-19.8496pt}\pgfsys@invoke{ }\hbox{{\definecolor{pgfstrokecolor}{% rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\hbox{{\footnotesize hold}} }}\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope}}} \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}\pgfsys@beginscope\pgfsys@invoke{ }\pgfsys@setlinewidth{0.8pt}\pgfsys@invoke% { }\color[rgb]{0,0,1}\definecolor[named]{pgfstrokecolor}{rgb}{0,0,1}% \pgfsys@color@rgb@stroke{0}{0}{1}\pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}% {1}\pgfsys@invoke{ }\definecolor[named]{pgffillcolor}{rgb}{0,0,1}{}% \pgfsys@moveto{14.22638pt}{11.38092pt}\pgfsys@moveto{17.07182pt}{11.38092pt}% \pgfsys@curveto{17.07182pt}{12.95242pt}{15.79788pt}{14.22636pt}{14.22638pt}{14% .22636pt}\pgfsys@curveto{12.65488pt}{14.22636pt}{11.38094pt}{12.95242pt}{11.38% 094pt}{11.38092pt}\pgfsys@curveto{11.38094pt}{9.80942pt}{12.65488pt}{8.53548pt% }{14.22638pt}{8.53548pt}\pgfsys@curveto{15.79788pt}{8.53548pt}{17.07182pt}{9.8% 0942pt}{17.07182pt}{11.38092pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{11.% 38092pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{14.22638pt}{11.38092pt}\pgfsys@moveto{17.07182pt}{11.38092% pt}\pgfsys@curveto{17.07182pt}{12.95242pt}{15.79788pt}{14.22636pt}{14.22638pt}% {14.22636pt}\pgfsys@curveto{12.65488pt}{14.22636pt}{11.38094pt}{12.95242pt}{11% .38094pt}{11.38092pt}\pgfsys@curveto{11.38094pt}{9.80942pt}{12.65488pt}{8.5354% 8pt}{14.22638pt}{8.53548pt}\pgfsys@curveto{15.79788pt}{8.53548pt}{17.07182pt}{% 9.80942pt}{17.07182pt}{11.38092pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt}{% 11.38092pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{11.38092pt}{14.22638pt}% \pgfsys@moveto{14.22636pt}{14.22638pt}\pgfsys@curveto{14.22636pt}{15.79788pt}{% 12.95242pt}{17.07182pt}{11.38092pt}{17.07182pt}\pgfsys@curveto{9.80942pt}{17.0% 7182pt}{8.53548pt}{15.79788pt}{8.53548pt}{14.22638pt}\pgfsys@curveto{8.53548pt% }{12.65488pt}{9.80942pt}{11.38094pt}{11.38092pt}{11.38094pt}\pgfsys@curveto{12% .95242pt}{11.38094pt}{14.22636pt}{12.65488pt}{14.22636pt}{14.22638pt}% \pgfsys@closepath\pgfsys@moveto{11.38092pt}{14.22638pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{11.38092pt}{14.22638pt}\pgfsys@moveto{14.22636pt}{14.22638% pt}\pgfsys@curveto{14.22636pt}{15.79788pt}{12.95242pt}{17.07182pt}{11.38092pt}% {17.07182pt}\pgfsys@curveto{9.80942pt}{17.07182pt}{8.53548pt}{15.79788pt}{8.53% 548pt}{14.22638pt}\pgfsys@curveto{8.53548pt}{12.65488pt}{9.80942pt}{11.38094pt% }{11.38092pt}{11.38094pt}\pgfsys@curveto{12.95242pt}{11.38094pt}{14.22636pt}{1% 2.65488pt}{14.22636pt}{14.22638pt}\pgfsys@closepath\pgfsys@moveto{11.38092pt}{% 14.22638pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{17.07182pt}{14.22638pt}% \pgfsys@moveto{19.91727pt}{14.22638pt}\pgfsys@curveto{19.91727pt}{15.79788pt}{% 18.64333pt}{17.07182pt}{17.07182pt}{17.07182pt}\pgfsys@curveto{15.50032pt}{17.% 07182pt}{14.22638pt}{15.79788pt}{14.22638pt}{14.22638pt}\pgfsys@curveto{14.226% 38pt}{12.65488pt}{15.50032pt}{11.38094pt}{17.07182pt}{11.38094pt}% \pgfsys@curveto{18.64333pt}{11.38094pt}{19.91727pt}{12.65488pt}{19.91727pt}{14% .22638pt}\pgfsys@closepath\pgfsys@moveto{17.07182pt}{14.22638pt}% \pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{17.07182pt}{14.22638pt}\pgfsys@moveto{19.91727pt}{14.22638% pt}\pgfsys@curveto{19.91727pt}{15.79788pt}{18.64333pt}{17.07182pt}{17.07182pt}% {17.07182pt}\pgfsys@curveto{15.50032pt}{17.07182pt}{14.22638pt}{15.79788pt}{14% .22638pt}{14.22638pt}\pgfsys@curveto{14.22638pt}{12.65488pt}{15.50032pt}{11.38% 094pt}{17.07182pt}{11.38094pt}\pgfsys@curveto{18.64333pt}{11.38094pt}{19.91727% pt}{12.65488pt}{19.91727pt}{14.22638pt}\pgfsys@closepath\pgfsys@moveto{17.0718% 2pt}{14.22638pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{9.95863pt}{19.91684pt}% \pgfsys@moveto{12.80408pt}{19.91684pt}\pgfsys@curveto{12.80408pt}{21.48834pt}{% 11.53014pt}{22.76228pt}{9.95863pt}{22.76228pt}\pgfsys@curveto{8.38713pt}{22.76% 228pt}{7.11319pt}{21.48834pt}{7.11319pt}{19.91684pt}\pgfsys@curveto{7.11319pt}% {18.34534pt}{8.38713pt}{17.0714pt}{9.95863pt}{17.0714pt}\pgfsys@curveto{11.530% 14pt}{17.0714pt}{12.80408pt}{18.34534pt}{12.80408pt}{19.91684pt}% \pgfsys@closepath\pgfsys@moveto{9.95863pt}{19.91684pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{9.95863pt}{19.91684pt}\pgfsys@moveto{12.80408pt}{19.91684pt% }\pgfsys@curveto{12.80408pt}{21.48834pt}{11.53014pt}{22.76228pt}{9.95863pt}{22% .76228pt}\pgfsys@curveto{8.38713pt}{22.76228pt}{7.11319pt}{21.48834pt}{7.11319% pt}{19.91684pt}\pgfsys@curveto{7.11319pt}{18.34534pt}{8.38713pt}{17.0714pt}{9.% 95863pt}{17.0714pt}\pgfsys@curveto{11.53014pt}{17.0714pt}{12.80408pt}{18.34534% pt}{12.80408pt}{19.91684pt}\pgfsys@closepath\pgfsys@moveto{9.95863pt}{19.91684% pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{18.49411pt}{19.63246pt}% \pgfsys@moveto{21.33955pt}{19.63246pt}\pgfsys@curveto{21.33955pt}{21.20396pt}{% 20.06561pt}{22.4779pt}{18.49411pt}{22.4779pt}\pgfsys@curveto{16.9226pt}{22.477% 9pt}{15.64867pt}{21.20396pt}{15.64867pt}{19.63246pt}\pgfsys@curveto{15.64867pt% }{18.06096pt}{16.9226pt}{16.78702pt}{18.49411pt}{16.78702pt}\pgfsys@curveto{20% .06561pt}{16.78702pt}{21.33955pt}{18.06096pt}{21.33955pt}{19.63246pt}% \pgfsys@closepath\pgfsys@moveto{18.49411pt}{19.63246pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{18.49411pt}{19.63246pt}\pgfsys@moveto{21.33955pt}{19.63246% pt}\pgfsys@curveto{21.33955pt}{21.20396pt}{20.06561pt}{22.4779pt}{18.49411pt}{% 22.4779pt}\pgfsys@curveto{16.9226pt}{22.4779pt}{15.64867pt}{21.20396pt}{15.648% 67pt}{19.63246pt}\pgfsys@curveto{15.64867pt}{18.06096pt}{16.9226pt}{16.78702pt% }{18.49411pt}{16.78702pt}\pgfsys@curveto{20.06561pt}{16.78702pt}{21.33955pt}{1% 8.06096pt}{21.33955pt}{19.63246pt}\pgfsys@closepath\pgfsys@moveto{18.49411pt}{% 19.63246pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{14.22638pt}{19.91684pt}% \pgfsys@moveto{17.07182pt}{19.91684pt}\pgfsys@curveto{17.07182pt}{21.48834pt}{% 15.79788pt}{22.76228pt}{14.22638pt}{22.76228pt}\pgfsys@curveto{12.65488pt}{22.% 76228pt}{11.38094pt}{21.48834pt}{11.38094pt}{19.91684pt}\pgfsys@curveto{11.380% 94pt}{18.34534pt}{12.65488pt}{17.0714pt}{14.22638pt}{17.0714pt}\pgfsys@curveto% {15.79788pt}{17.0714pt}{17.07182pt}{18.34534pt}{17.07182pt}{19.91684pt}% \pgfsys@closepath\pgfsys@moveto{14.22638pt}{19.91684pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{14.22638pt}{19.91684pt}\pgfsys@moveto{17.07182pt}{19.91684% pt}\pgfsys@curveto{17.07182pt}{21.48834pt}{15.79788pt}{22.76228pt}{14.22638pt}% {22.76228pt}\pgfsys@curveto{12.65488pt}{22.76228pt}{11.38094pt}{21.48834pt}{11% .38094pt}{19.91684pt}\pgfsys@curveto{11.38094pt}{18.34534pt}{12.65488pt}{17.07% 14pt}{14.22638pt}{17.0714pt}\pgfsys@curveto{15.79788pt}{17.0714pt}{17.07182pt}% {18.34534pt}{17.07182pt}{19.91684pt}\pgfsys@closepath\pgfsys@moveto{14.22638pt% }{19.91684pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{8.5359pt}{25.6073pt}% \pgfsys@moveto{11.38135pt}{25.6073pt}\pgfsys@curveto{11.38135pt}{27.1788pt}{10% .1074pt}{28.45274pt}{8.5359pt}{28.45274pt}\pgfsys@curveto{6.9644pt}{28.45274pt% }{5.69046pt}{27.1788pt}{5.69046pt}{25.6073pt}\pgfsys@curveto{5.69046pt}{24.035% 8pt}{6.9644pt}{22.76186pt}{8.5359pt}{22.76186pt}\pgfsys@curveto{10.1074pt}{22.% 76186pt}{11.38135pt}{24.0358pt}{11.38135pt}{25.6073pt}\pgfsys@closepath% \pgfsys@moveto{8.5359pt}{25.6073pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{8.5359pt}{25.6073pt}\pgfsys@moveto{11.38135pt}{25.6073pt}% \pgfsys@curveto{11.38135pt}{27.1788pt}{10.1074pt}{28.45274pt}{8.5359pt}{28.452% 74pt}\pgfsys@curveto{6.9644pt}{28.45274pt}{5.69046pt}{27.1788pt}{5.69046pt}{25% .6073pt}\pgfsys@curveto{5.69046pt}{24.0358pt}{6.9644pt}{22.76186pt}{8.5359pt}{% 22.76186pt}\pgfsys@curveto{10.1074pt}{22.76186pt}{11.38135pt}{24.0358pt}{11.38% 135pt}{25.6073pt}\pgfsys@closepath\pgfsys@moveto{8.5359pt}{25.6073pt}% \pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{20.77039pt}{25.6073pt}% \pgfsys@moveto{23.61583pt}{25.6073pt}\pgfsys@curveto{23.61583pt}{27.1788pt}{22% .34189pt}{28.45274pt}{20.77039pt}{28.45274pt}\pgfsys@curveto{19.19888pt}{28.45% 274pt}{17.92494pt}{27.1788pt}{17.92494pt}{25.6073pt}\pgfsys@curveto{17.92494pt% }{24.0358pt}{19.19888pt}{22.76186pt}{20.77039pt}{22.76186pt}\pgfsys@curveto{22% .34189pt}{22.76186pt}{23.61583pt}{24.0358pt}{23.61583pt}{25.6073pt}% \pgfsys@closepath\pgfsys@moveto{20.77039pt}{25.6073pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{20.77039pt}{25.6073pt}\pgfsys@moveto{23.61583pt}{25.6073pt}% \pgfsys@curveto{23.61583pt}{27.1788pt}{22.34189pt}{28.45274pt}{20.77039pt}{28.% 45274pt}\pgfsys@curveto{19.19888pt}{28.45274pt}{17.92494pt}{27.1788pt}{17.9249% 4pt}{25.6073pt}\pgfsys@curveto{17.92494pt}{24.0358pt}{19.19888pt}{22.76186pt}{% 20.77039pt}{22.76186pt}\pgfsys@curveto{22.34189pt}{22.76186pt}{23.61583pt}{24.% 0358pt}{23.61583pt}{25.6073pt}\pgfsys@closepath\pgfsys@moveto{20.77039pt}{25.6% 073pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{8.5359pt}{31.2982pt}% \pgfsys@moveto{11.38135pt}{31.2982pt}\pgfsys@curveto{11.38135pt}{32.8697pt}{10% .1074pt}{34.14365pt}{8.5359pt}{34.14365pt}\pgfsys@curveto{6.9644pt}{34.14365pt% }{5.69046pt}{32.8697pt}{5.69046pt}{31.2982pt}\pgfsys@curveto{5.69046pt}{29.726% 7pt}{6.9644pt}{28.45276pt}{8.5359pt}{28.45276pt}\pgfsys@curveto{10.1074pt}{28.% 45276pt}{11.38135pt}{29.7267pt}{11.38135pt}{31.2982pt}\pgfsys@closepath% \pgfsys@moveto{8.5359pt}{31.2982pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{8.5359pt}{31.2982pt}\pgfsys@moveto{11.38135pt}{31.2982pt}% \pgfsys@curveto{11.38135pt}{32.8697pt}{10.1074pt}{34.14365pt}{8.5359pt}{34.143% 65pt}\pgfsys@curveto{6.9644pt}{34.14365pt}{5.69046pt}{32.8697pt}{5.69046pt}{31% .2982pt}\pgfsys@curveto{5.69046pt}{29.7267pt}{6.9644pt}{28.45276pt}{8.5359pt}{% 28.45276pt}\pgfsys@curveto{10.1074pt}{28.45276pt}{11.38135pt}{29.7267pt}{11.38% 135pt}{31.2982pt}\pgfsys@closepath\pgfsys@moveto{8.5359pt}{31.2982pt}% \pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{11.38092pt}{32.72049pt}% \pgfsys@moveto{14.22636pt}{32.72049pt}\pgfsys@curveto{14.22636pt}{34.29199pt}{% 12.95242pt}{35.56593pt}{11.38092pt}{35.56593pt}\pgfsys@curveto{9.80942pt}{35.5% 6593pt}{8.53548pt}{34.29199pt}{8.53548pt}{32.72049pt}\pgfsys@curveto{8.53548pt% }{31.14899pt}{9.80942pt}{29.87505pt}{11.38092pt}{29.87505pt}\pgfsys@curveto{12% .95242pt}{29.87505pt}{14.22636pt}{31.14899pt}{14.22636pt}{32.72049pt}% \pgfsys@closepath\pgfsys@moveto{11.38092pt}{32.72049pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{11.38092pt}{32.72049pt}\pgfsys@moveto{14.22636pt}{32.72049% pt}\pgfsys@curveto{14.22636pt}{34.29199pt}{12.95242pt}{35.56593pt}{11.38092pt}% {35.56593pt}\pgfsys@curveto{9.80942pt}{35.56593pt}{8.53548pt}{34.29199pt}{8.53% 548pt}{32.72049pt}\pgfsys@curveto{8.53548pt}{31.14899pt}{9.80942pt}{29.87505pt% }{11.38092pt}{29.87505pt}\pgfsys@curveto{12.95242pt}{29.87505pt}{14.22636pt}{3% 1.14899pt}{14.22636pt}{32.72049pt}\pgfsys@closepath\pgfsys@moveto{11.38092pt}{% 32.72049pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{19.91684pt}{31.2982pt}% \pgfsys@moveto{22.76228pt}{31.2982pt}\pgfsys@curveto{22.76228pt}{32.8697pt}{21% .48834pt}{34.14365pt}{19.91684pt}{34.14365pt}\pgfsys@curveto{18.34534pt}{34.14% 365pt}{17.0714pt}{32.8697pt}{17.0714pt}{31.2982pt}\pgfsys@curveto{17.0714pt}{2% 9.7267pt}{18.34534pt}{28.45276pt}{19.91684pt}{28.45276pt}\pgfsys@curveto{21.48% 834pt}{28.45276pt}{22.76228pt}{29.7267pt}{22.76228pt}{31.2982pt}% \pgfsys@closepath\pgfsys@moveto{19.91684pt}{31.2982pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{19.91684pt}{31.2982pt}\pgfsys@moveto{22.76228pt}{31.2982pt}% \pgfsys@curveto{22.76228pt}{32.8697pt}{21.48834pt}{34.14365pt}{19.91684pt}{34.% 14365pt}\pgfsys@curveto{18.34534pt}{34.14365pt}{17.0714pt}{32.8697pt}{17.0714% pt}{31.2982pt}\pgfsys@curveto{17.0714pt}{29.7267pt}{18.34534pt}{28.45276pt}{19% .91684pt}{28.45276pt}\pgfsys@curveto{21.48834pt}{28.45276pt}{22.76228pt}{29.72% 67pt}{22.76228pt}{31.2982pt}\pgfsys@closepath\pgfsys@moveto{19.91684pt}{31.298% 2pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{17.07182pt}{32.43613pt}% \pgfsys@moveto{19.91727pt}{32.43613pt}\pgfsys@curveto{19.91727pt}{34.00763pt}{% 18.64333pt}{35.28157pt}{17.07182pt}{35.28157pt}\pgfsys@curveto{15.50032pt}{35.% 28157pt}{14.22638pt}{34.00763pt}{14.22638pt}{32.43613pt}\pgfsys@curveto{14.226% 38pt}{30.86462pt}{15.50032pt}{29.59068pt}{17.07182pt}{29.59068pt}% \pgfsys@curveto{18.64333pt}{29.59068pt}{19.91727pt}{30.86462pt}{19.91727pt}{32% .43613pt}\pgfsys@closepath\pgfsys@moveto{17.07182pt}{32.43613pt}% \pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{17.07182pt}{32.43613pt}\pgfsys@moveto{19.91727pt}{32.43613% pt}\pgfsys@curveto{19.91727pt}{34.00763pt}{18.64333pt}{35.28157pt}{17.07182pt}% {35.28157pt}\pgfsys@curveto{15.50032pt}{35.28157pt}{14.22638pt}{34.00763pt}{14% .22638pt}{32.43613pt}\pgfsys@curveto{14.22638pt}{30.86462pt}{15.50032pt}{29.59% 068pt}{17.07182pt}{29.59068pt}\pgfsys@curveto{18.64333pt}{29.59068pt}{19.91727% pt}{30.86462pt}{19.91727pt}{32.43613pt}\pgfsys@closepath\pgfsys@moveto{17.0718% 2pt}{32.43613pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{12.80365pt}{26.46085pt}% \pgfsys@moveto{15.6491pt}{26.46085pt}\pgfsys@curveto{15.6491pt}{28.03235pt}{14% .37515pt}{29.30629pt}{12.80365pt}{29.30629pt}\pgfsys@curveto{11.23215pt}{29.30% 629pt}{9.9582pt}{28.03235pt}{9.9582pt}{26.46085pt}\pgfsys@curveto{9.9582pt}{24% .88934pt}{11.23215pt}{23.6154pt}{12.80365pt}{23.6154pt}\pgfsys@curveto{14.3751% 5pt}{23.6154pt}{15.6491pt}{24.88934pt}{15.6491pt}{26.46085pt}\pgfsys@closepath% \pgfsys@moveto{12.80365pt}{26.46085pt}\pgfsys@fillstroke\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{12.80365pt}{26.46085pt}\pgfsys@moveto{15.6491pt}{26.46085pt% }\pgfsys@curveto{15.6491pt}{28.03235pt}{14.37515pt}{29.30629pt}{12.80365pt}{29% .30629pt}\pgfsys@curveto{11.23215pt}{29.30629pt}{9.9582pt}{28.03235pt}{9.9582% pt}{26.46085pt}\pgfsys@curveto{9.9582pt}{24.88934pt}{11.23215pt}{23.6154pt}{12% .80365pt}{23.6154pt}\pgfsys@curveto{14.37515pt}{23.6154pt}{15.6491pt}{24.88934% pt}{15.6491pt}{26.46085pt}\pgfsys@closepath\pgfsys@moveto{12.80365pt}{26.46085% pt}\pgfsys@stroke\pgfsys@invoke{ } {}{{}}{}{{{}}{}{}{}{}{}{}{}{}}\pgfsys@beginscope\pgfsys@invoke{ }% \pgfsys@setlinewidth{0.8pt}\pgfsys@invoke{ }\color[rgb]{0,0,1}\definecolor[% named]{pgfstrokecolor}{rgb}{0,0,1}\pgfsys@color@rgb@stroke{0}{0}{1}% \pgfsys@invoke{ }\pgfsys@color@rgb@fill{0}{0}{1}\pgfsys@invoke{ }\definecolor[% named]{pgffillcolor}{rgb}{0,0,1}{}\pgfsys@moveto{15.6491pt}{26.17648pt}% \pgfsys@moveto{18.49454pt}{26.17648pt}\pgfsys@curveto{18.49454pt}{27.74799pt}{% 17.2206pt}{29.02193pt}{15.6491pt}{29.02193pt}\pgfsys@curveto{14.07759pt}{29.02% 193pt}{12.80365pt}{27.74799pt}{12.80365pt}{26.17648pt}\pgfsys@curveto{12.80365% pt}{24.60498pt}{14.07759pt}{23.33104pt}{15.6491pt}{23.33104pt}\pgfsys@curveto{% 17.2206pt}{23.33104pt}{18.49454pt}{24.60498pt}{18.49454pt}{26.17648pt}% \pgfsys@closepath\pgfsys@moveto{15.6491pt}{26.17648pt}\pgfsys@fillstroke% \pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{{}}{}{{{}}{}{}{}{}{}{}{}{% }}{}\pgfsys@moveto{15.6491pt}{26.17648pt}\pgfsys@moveto{18.49454pt}{26.17648pt% }\pgfsys@curveto{18.49454pt}{27.74799pt}{17.2206pt}{29.02193pt}{15.6491pt}{29.% 02193pt}\pgfsys@curveto{14.07759pt}{29.02193pt}{12.80365pt}{27.74799pt}{12.803% 65pt}{26.17648pt}\pgfsys@curveto{12.80365pt}{24.60498pt}{14.07759pt}{23.33104% pt}{15.6491pt}{23.33104pt}\pgfsys@curveto{17.2206pt}{23.33104pt}{18.49454pt}{2% 4.60498pt}{18.49454pt}{26.17648pt}\pgfsys@closepath\pgfsys@moveto{15.6491pt}{2% 6.17648pt}\pgfsys@stroke\pgfsys@invoke{ } \par \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}} \leavevmode\hbox to0pt{\vbox to0pt{\pgfpicture\makeatletter\hbox{\hskip 0.0pt% \lower 0.0pt\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ }\definecolor{% pgfstrokecolor}{rgb}{0,0,0}\pgfsys@color@rgb@stroke{0}{0}{0}\pgfsys@invoke{ }% \pgfsys@color@rgb@fill{0}{0}{0}\pgfsys@invoke{ }\pgfsys@setlinewidth{0.4pt}% \pgfsys@invoke{ }\nullfont\hbox to0.0pt{\pgfsys@beginscope\pgfsys@invoke{ } \pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope{}{}{}\hss}% \pgfsys@discardpath\pgfsys@invoke{\lxSVG@closescope }\pgfsys@endscope\hss}}% \lxSVG@closescope\endpgfpicture}}}\par\end{array}start_ARRAY start_ROW start_CELL start_ARRAY start_ROW start_CELL sort end_CELL start_CELL italic_Symbol = struct italic_star ∣ italic_grapes ∣ italic_orange ; end_CELL end_ROW start_ROW start_CELL map end_CELL start_CELL italic_distribution : blackboard_B × italic_Symbol × italic_Symbol → blackboard_R ; end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_b : blackboard_B ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_r , italic_s : italic_Symbol ; end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_distribution ( italic_b , italic_r , italic_s ) = italic_if ( italic_b , italic_if ( italic_r ≈ italic_s , 1 , 0 ) , divide start_ARG 1 end_ARG start_ARG 3 end_ARG ) ; end_CELL end_ROW start_ROW start_CELL act end_CELL start_CELL italic_win , italic_lose ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_hold : blackboard_B × blackboard_B × blackboard_B ; end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display : italic_Symbol × italic_Symbol × italic_Symbol ; end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Play ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : blackboard_B , italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol ) = end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL dist italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol [ italic_distribution ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ∗ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_distribution ( italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ∗ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_distribution ( italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ] . end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ⋅ end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL → italic_win ⋅ italic_Play ( italic_false , italic_false , italic_false , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ⋄ italic_lose ⋅ ∑ start_POSTSUBSCRIPT italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : blackboard_B end_POSTSUBSCRIPT italic_hold ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ⋅ italic_Play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ; end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Play ( italic_false , italic_false , italic_false , italic_star , italic_star , italic_star ) ; end_CELL end_ROW end_ARRAY end_CELL start_CELL roman_hold roman_hold roman_hold end_CELL end_ROW end_ARRAY

The behaviour is given by the process 𝑃𝑙𝑎𝑦𝑃𝑙𝑎𝑦\mathit{Play}italic_Play with 6666 parameters. The first three parameters ℎ𝑜𝑙𝑑1subscriptℎ𝑜𝑙𝑑1\mathit{hold}_{1}italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, ℎ𝑜𝑙𝑑2subscriptℎ𝑜𝑙𝑑2\mathit{hold}_{2}italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT and ℎ𝑜𝑙𝑑3subscriptℎ𝑜𝑙𝑑3\mathit{hold}_{3}italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT indicate which of the hold buttons are pressed. The last three parameters represent the symbols shown on the screen. Initially, the hold buttons cannot be used, as indicated by 𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒\mathit{false}italic_false,𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒\mathit{false}italic_false,𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒\mathit{false}italic_false. In this case the initial symbols on the screen are not relevant, and they are arbitrarily set to 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star, 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star, 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star. Note that after the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win, the hold buttons are also disabled.

When playing, the symbols are set using the mapping 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(b,r,s)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛𝑏𝑟𝑠\mathit{distribution}(b,r,s)italic_distribution ( italic_b , italic_r , italic_s ) where b𝑏bitalic_b is a boolean and r𝑟ritalic_r and s𝑠sitalic_s are symbols. This mapping determines the probability to display symbol s𝑠sitalic_s in a single column. If boolean b𝑏bitalic_b is true, the hold button for this column is pressed and s𝑠sitalic_s is equal to the pre-set symbol r𝑟ritalic_r with probability 1111. Otherwise, s𝑠sitalic_s is equal to some concrete symbol with probability 1313\frac{1}{3}divide start_ARG 1 end_ARG start_ARG 3 end_ARG. Using the action 𝑑𝑖𝑠𝑝𝑙𝑎𝑦(s1,s2,s3)𝑑𝑖𝑠𝑝𝑙𝑎𝑦subscript𝑠1subscript𝑠2subscript𝑠3\mathit{display}(s_{1},s_{2},s_{3})italic_display ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) it is indicated which symbols are shown on the screen.

Clearly, if all symbols are the same, the player wins one credit, indicated by the action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win. Otherwise, the player loses a credit shown by the action 𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose, after which the player can indicate which hold buttons should be pressed. Subsequently, the player can continue to play.

Using the formula (4) it is determined what the probability is to win the game in the first round, which is 1919\frac{1}{9}divide start_ARG 1 end_ARG start_ARG 9 end_ARG leading to an expected loss of 7979-\frac{7}{9}- divide start_ARG 7 end_ARG start_ARG 9 end_ARG credits in the first round. But on the one hand if the hold buttons are used well, the winning probability can be increased and the average loss can be restricted. On the other hand, if the hold buttons are used very badly, the loss is increased. To get insight in the effect of the hold buttons, we investigate three situation, namely first where the hold buttons are used perfectly, second where the hold buttons are used in the worst possible manner, and third where the hold buttons are used randomly. We summarize the results in Table 1.

Table 1: Strategy comparison for three column slot machine with hold buttons.
Strategy Winning probability Expected loss
Best 0.2591 -0.4818
Worst 0.0001 -0.9998
Random 0.0886 -0.8227

Best strategy

The following formula corresponds to the maximal winning probabilities per round where the player uses the hold buttons in the best possible way. Again we use the constant 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds to set the maximum number of rounds over which the average is calculated.

μX(𝑤𝑖𝑛𝑠:=0,𝑟𝑜𝑢𝑛𝑑𝑠:=0).𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑤𝑖𝑛𝑠/𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠<𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠(𝑡𝑟𝑢𝑒𝑤𝑖𝑛X(𝑤𝑖𝑛𝑠+1,𝑟𝑜𝑢𝑛𝑑𝑠+1)𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒𝑡𝑟𝑢𝑒X(𝑤𝑖𝑛𝑠,𝑟𝑜𝑢𝑛𝑑𝑠+1)).\begin{array}[]{@{}l}\mu X(\mathit{wins}{:}\mathbb{N}{=}0,\mathit{rounds}{:}% \mathbb{N}{=}0).\\ \hskip 28.45274pt\mathit{rounds}{\approx}\mathit{max\_rounds}\wedge\mathit{% wins}/\mathit{rounds}\vee{}\\ \hskip 28.45274pt\mathit{rounds}{<}\mathit{max\_rounds}\wedge{}(\langle\mathit% {true}\rangle\langle\mathit{win}\rangle X(\mathit{wins}{+}1,\mathit{rounds}{+}% 1)\vee{}\\ \hskip 122.34692pt\langle\mathit{true}\rangle\langle\mathit{lose}\rangle% \langle\mathit{true}\rangle X(\mathit{wins},\mathit{rounds}{+}1)).\end{array}start_ARRAY start_ROW start_CELL italic_μ italic_X ( italic_wins : blackboard_N = 0 , italic_rounds : blackboard_N = 0 ) . end_CELL end_ROW start_ROW start_CELL italic_rounds ≈ italic_max _ italic_rounds ∧ italic_wins / italic_rounds ∨ end_CELL end_ROW start_ROW start_CELL italic_rounds < italic_max _ italic_rounds ∧ ( ⟨ italic_true ⟩ ⟨ italic_win ⟩ italic_X ( italic_wins + 1 , italic_rounds + 1 ) ∨ end_CELL end_ROW start_ROW start_CELL ⟨ italic_true ⟩ ⟨ italic_lose ⟩ ⟨ italic_true ⟩ italic_X ( italic_wins , italic_rounds + 1 ) ) . end_CELL end_ROW end_ARRAY (5)

The sequence 𝑡𝑟𝑢𝑒𝑤𝑖𝑛delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑤𝑖𝑛\langle\mathit{true}\rangle\langle\mathit{win}\rangle⟨ italic_true ⟩ ⟨ italic_win ⟩ matches an action 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑑𝑖𝑠𝑝𝑙𝑎𝑦\mathit{display}italic_display followed by an action 𝑤𝑖𝑛𝑤𝑖𝑛\mathit{win}italic_win. Similarly, the sequence 𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒𝑡𝑟𝑢𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑙𝑜𝑠𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒\langle\mathit{true}\rangle\langle\mathit{lose}\rangle\langle\mathit{true}\rangle⟨ italic_true ⟩ ⟨ italic_lose ⟩ ⟨ italic_true ⟩ matches a 𝑑𝑖𝑠𝑝𝑙𝑎𝑦𝑑𝑖𝑠𝑝𝑙𝑎𝑦\mathit{display}italic_display, followed by 𝑙𝑜𝑠𝑒𝑙𝑜𝑠𝑒\mathit{lose}italic_lose, followed by an action ℎ𝑜𝑙𝑑ℎ𝑜𝑙𝑑\mathit{hold}italic_hold. This action hold is non-deterministic, and by using the diamond modality 𝑡𝑟𝑢𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒\langle\mathit{true}\rangle\ldots⟨ italic_true ⟩ … we take the maximal winning probability over the various possible settings of the hold buttons. Setting 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds to 1000100010001000 yields a winning probability of 26%percent2626\%26 % per round. This corresponds to an expected loss of 0.480.48-0.48- 0.48 credits per round.

Worst strategy

By replacing the last modality in 𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒𝑡𝑟𝑢𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒delimited-⟨⟩𝑙𝑜𝑠𝑒delimited-⟨⟩𝑡𝑟𝑢𝑒\langle\mathit{true}\rangle\langle\mathit{lose}\rangle\langle\mathit{true}\rangle⟨ italic_true ⟩ ⟨ italic_lose ⟩ ⟨ italic_true ⟩ in formula (5) by [𝑡𝑟𝑢𝑒]delimited-[]𝑡𝑟𝑢𝑒[\mathit{true}][ italic_true ] the minimal expected winning probability is obtained which corresponds to the situation where a player presses the hold buttons in the worst possible way. Evaluating this formula over 1000100010001000 rounds, yields a winning probability of 0.0125%percent0.01250.0125\%0.0125 %. This corresponds to the situation where after the player lost a game, the player continuous to press all hold buttons. This causes a certain loss of the game in each round, explaining the success rate of close to 0%percent00\%0 % and an expected loss of 11-1- 1 per round.

Random strategy

We may also be interested in the situation where a player plays ‘naturally’, in the sense that he does not play optimally nor perfectly badly. The question is how to model ‘natural’ behaviour. One way is to assume that the player randomly presses the hold buttons. The average winning probability for this situation is expressed in the following formula.

μX(𝑤𝑖𝑛𝑠:=0,𝑟𝑜𝑢𝑛𝑑𝑠:=0).𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑤𝑖𝑛𝑠/𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠<𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠(𝑡𝑟𝑢𝑒𝑤𝑖𝑛X(𝑤𝑖𝑛𝑠+1,𝑟𝑜𝑢𝑛𝑑𝑠+1)𝑡𝑟𝑢𝑒𝑙𝑜𝑠𝑒b1,b2,b3:𝔹.18ℎ𝑜𝑙𝑑(b1,b2,b3)X(𝑤𝑖𝑛𝑠,𝑟𝑜𝑢𝑛𝑑𝑠+1));\begin{array}[]{@{}l}\mu X(\mathit{wins}{:}\mathbb{N}{=}0,\mathit{rounds}{:}% \mathbb{N}{=}0).\\ \hskip 28.45274pt\mathit{rounds}{\approx}\mathit{max\_rounds}\wedge\mathit{% wins}/\mathit{rounds}\vee{}\\ \hskip 28.45274pt\mathit{rounds}{<}\mathit{max\_rounds}\wedge(\langle\mathit{% true}\rangle\langle\mathit{win}\rangle X(\mathit{wins}{+}1,\mathit{rounds}{+}1% )\vee{}\\ \hskip 122.34692pt\langle\mathit{true}\rangle\langle\mathit{lose}\rangle\sum_{% b_{1},b_{2},b_{3}{:}\mathbb{B}}.\frac{1}{8}*\langle\mathit{hold}(b_{1},b_{2},b% _{3})\rangle X(\mathit{wins},\mathit{rounds}{+}1));\end{array}start_ARRAY start_ROW start_CELL italic_μ italic_X ( italic_wins : blackboard_N = 0 , italic_rounds : blackboard_N = 0 ) . end_CELL end_ROW start_ROW start_CELL italic_rounds ≈ italic_max _ italic_rounds ∧ italic_wins / italic_rounds ∨ end_CELL end_ROW start_ROW start_CELL italic_rounds < italic_max _ italic_rounds ∧ ( ⟨ italic_true ⟩ ⟨ italic_win ⟩ italic_X ( italic_wins + 1 , italic_rounds + 1 ) ∨ end_CELL end_ROW start_ROW start_CELL ⟨ italic_true ⟩ ⟨ italic_lose ⟩ ∑ start_POSTSUBSCRIPT italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : blackboard_B end_POSTSUBSCRIPT . divide start_ARG 1 end_ARG start_ARG 8 end_ARG ∗ ⟨ italic_hold ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ⟩ italic_X ( italic_wins , italic_rounds + 1 ) ) ; end_CELL end_ROW end_ARRAY

In the last line it is expressed using the sum operator that each pattern of pressing the hold buttons should be considered as appearing with probability 1818\frac{1}{8}divide start_ARG 1 end_ARG start_ARG 8 end_ARG. This formula then evaluates to an average winning probability of 9%percent99\%9 % and an average loss per round of 0.820.82-0.82- 0.82 credits. Note that by taking a more elaborate formula for pressing the hold buttons, more delicate behaviour can be modelled, for instance by only allowing to press the buttons when equal symbols are shown.

4 Top Spinner from Errèl Industries B.V.

Refer to caption
Figure 1: The Top Spinner slot machine by Errèl Industries B.V.

In Figure 1 a slot machine called the Top Spinner produced by Errèl Industries is depicted111A similar, online playable version is available at [28]. It has a playing window of three rows and four columns, four corresponding hold buttons and contains four games. Initially, the reel game is played of which the winning combinations are depicted at the bottom of the machine. The payout of the reel game is moved to the pots. Alternatively, the zero-one-game is used to transfer credits to one of the eight pots. This game is very simple and corresponds to the zero and one on the bottom part of the cabinet in the right upper corner. If a pot contains more than 5 or 10 credits, the five-play-line or ten-play-line game can also be played, respectively, although it is obligatory to play the zero-one game once before a play-line game can be played. If all pots contain more than 5 credits the reel and zero-one games are not available. The winning scheme of the two play-line games are depicted at the top of the machine. We describe all four games separately below, and analyse the three most complex ones.

4.1 The zero-one game

The zero-one game is used to transfer money to the pot and it must sometimes be played before the play-line games can be done. With probability of 99.9% a credit is successfully transferred, and otherwise it is lost. This game is so simple that we do not analyse it further.

4.2 The five-play-lines game

sort𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑜𝑟𝑎𝑛𝑔𝑒𝑔𝑟𝑎𝑝𝑒𝑠𝑝𝑒𝑎𝑟𝑚𝑒𝑙𝑜𝑛𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦𝑏𝑒𝑙𝑙𝑠𝑒𝑣𝑒𝑛𝑠𝑡𝑎𝑟;𝑅𝑒𝑒𝑙=𝐿𝑖𝑠𝑡(𝑆𝑦𝑚𝑏𝑜𝑙);mapr1,r2,r3,r4:𝑅𝑒𝑒𝑙;𝑔𝑒𝑡1,𝑔𝑒𝑡2,𝑔𝑒𝑡3,𝑔𝑒𝑡4:𝑆𝑦𝑚𝑏𝑜𝑙;𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛:;eqnr1=[𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑠𝑡𝑎𝑟,𝑜𝑟𝑎𝑛𝑔𝑒,𝑔𝑟𝑎𝑝𝑒𝑠,𝑔𝑟𝑎𝑝𝑒𝑠,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑚𝑒𝑙𝑜𝑛,𝑚𝑒𝑙𝑜𝑛,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑠𝑒𝑣𝑒𝑛,𝑠𝑒𝑣𝑒𝑛];r2=[𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑔𝑟𝑎𝑝𝑒𝑠,𝑜𝑟𝑎𝑛𝑔𝑒,𝑔𝑟𝑎𝑝𝑒𝑠,𝑝𝑒𝑎𝑟,𝑠𝑡𝑎𝑟,𝑝𝑒𝑎𝑟,𝑚𝑒𝑙𝑜𝑛,𝑝𝑒𝑎𝑟,𝑚𝑒𝑙𝑜𝑛,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑠𝑒𝑣𝑒𝑛,𝑏𝑒𝑙𝑙,𝑠𝑒𝑣𝑒𝑛];r3=[𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑔𝑟𝑎𝑝𝑒𝑠,𝑔𝑟𝑎𝑝𝑒𝑠,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑚𝑒𝑙𝑜𝑛,𝑚𝑒𝑙𝑜𝑛,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑎𝑟,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑠𝑒𝑣𝑒𝑛,𝑠𝑒𝑣𝑒𝑛];r4=[𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑜𝑟𝑎𝑛𝑔𝑒,𝑔𝑟𝑎𝑝𝑒𝑠,𝑔𝑟𝑎𝑝𝑒𝑠,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑝𝑒𝑎𝑟,𝑚𝑒𝑙𝑜𝑛,𝑚𝑒𝑙𝑜𝑛,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,𝑏𝑒𝑙𝑙,𝑏𝑒𝑙𝑙,𝑠𝑡𝑎𝑟,𝑏𝑒𝑙𝑙,𝑠𝑒𝑣𝑒𝑛,𝑠𝑒𝑣𝑒𝑛];vari:;eqn𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i)=𝑖𝑓(i<24,1/24,0);𝑔𝑒𝑡1(i)=r1.(imod 24);𝑔𝑒𝑡2(i)=r2.(imod 24);𝑔𝑒𝑡3(i)=r3.(imod 24);𝑔𝑒𝑡4(i)=r4.(imod 24);\begin{array}[]{ll@{\hspace{-1.0cm}}r}\textbf{sort}&\mathit{Symbol}=\textbf{% struct }\mathit{orange}\mid\mathit{grapes}\mid\mathit{pear}\mid\mathit{melon}% \mid\mathit{blueberry}\mid\mathit{strawberry}\mid\mathit{bell}\mid\mathit{% seven}\mid\mathit{star};\\ &\mathit{Reel}=\mathit{List}(\mathit{Symbol});\\ \textbf{map}&r_{1},r_{2},r_{3},r_{4}:\mathit{Reel};\\ &\mathit{get}_{1},\mathit{get}_{2},\mathit{get}_{3},\mathit{get}_{4}:\mathbb{N% }\rightarrow\mathit{Symbol};\\ &\mathit{distribution}:\mathbb{N}\rightarrow\mathbb{R};\\ \textbf{eqn}&r_{1}=[\mathit{orange},\mathit{orange},\mathit{star},\mathit{% orange},\mathit{grapes},\mathit{grapes},\mathit{pear},\mathit{pear},\\ &\hskip 28.45274pt\mathit{pear},\mathit{pear},\mathit{melon},\mathit{melon},% \mathit{blueberry},\mathit{blueberry},\mathit{blueberry},\mathit{blueberry},\\ &\hskip 28.45274pt\mathit{strawberry},\mathit{strawberry},\mathit{bell},% \mathit{bell},\mathit{bell},\mathit{bell},\mathit{seven},\mathit{seven}];\\ &r_{2}=[\mathit{orange},\mathit{orange},\mathit{orange},\mathit{grapes},% \mathit{orange},\mathit{grapes},\mathit{pear},\mathit{star},\mathit{pear},\\ &\hskip 28.45274pt\mathit{melon},\mathit{pear},\mathit{melon},\mathit{% blueberry},\mathit{blueberry},\mathit{blueberry},\mathit{strawberry},\mathit{% blueberry},\\ &\hskip 28.45274pt\mathit{strawberry},\mathit{bell},\mathit{bell},\mathit{bell% },\mathit{seven},\mathit{bell},\mathit{seven}];\\ &r_{3}=[\mathit{orange},\mathit{orange},\mathit{orange},\mathit{orange},% \mathit{grapes},\mathit{grapes},\mathit{pear},\mathit{pear},\\ &\hskip 28.45274pt\mathit{pear},\mathit{pear},\mathit{melon},\mathit{melon},% \mathit{blueberry},\mathit{blueberry},\mathit{star},\mathit{blueberry},\\ &\hskip 28.45274pt\mathit{strawberry},\mathit{strawberry},\mathit{bell},% \mathit{bell},\mathit{bell},\mathit{bell},\mathit{seven},\mathit{seven}];\\ &r_{4}=[\mathit{orange},\mathit{orange},\mathit{orange},\mathit{orange},% \mathit{grapes},\mathit{grapes},\mathit{pear},\mathit{pear},\\ &\hskip 28.45274pt\mathit{pear},\mathit{pear},\mathit{melon},\mathit{melon},% \mathit{blueberry},\mathit{blueberry},\mathit{blueberry},\mathit{blueberry},\\ &\hskip 28.45274pt\mathit{strawberry},\mathit{strawberry},\mathit{bell},% \mathit{bell},\mathit{star},\mathit{bell},\mathit{seven},\mathit{seven}];\\ \textbf{var}&i:\mathbb{N};\\ \textbf{eqn}&\mathit{distribution}(i)=\mathit{if}(i{<}24,1/24,0);\\ &\mathit{get}_{1}(i)=r_{1}.(i\,\mathrm{mod}\,24);\\ &\mathit{get}_{2}(i)=r_{2}.(i\,\mathrm{mod}\,24);\\ &\mathit{get}_{3}(i)=r_{3}.(i\,\mathrm{mod}\,24);\\ &\mathit{get}_{4}(i)=r_{4}.(i\,\mathrm{mod}\,24);\\ \end{array}start_ARRAY start_ROW start_CELL sort end_CELL start_CELL italic_Symbol = struct italic_orange ∣ italic_grapes ∣ italic_pear ∣ italic_melon ∣ italic_blueberry ∣ italic_strawberry ∣ italic_bell ∣ italic_seven ∣ italic_star ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_Reel = italic_List ( italic_Symbol ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL map end_CELL start_CELL italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_r start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : italic_Reel ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_N → italic_Symbol ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_distribution : blackboard_N → blackboard_R ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = [ italic_orange , italic_orange , italic_star , italic_orange , italic_grapes , italic_grapes , italic_pear , italic_pear , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_pear , italic_pear , italic_melon , italic_melon , italic_blueberry , italic_blueberry , italic_blueberry , italic_blueberry , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_strawberry , italic_strawberry , italic_bell , italic_bell , italic_bell , italic_bell , italic_seven , italic_seven ] ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = [ italic_orange , italic_orange , italic_orange , italic_grapes , italic_orange , italic_grapes , italic_pear , italic_star , italic_pear , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_melon , italic_pear , italic_melon , italic_blueberry , italic_blueberry , italic_blueberry , italic_strawberry , italic_blueberry , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_strawberry , italic_bell , italic_bell , italic_bell , italic_seven , italic_bell , italic_seven ] ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT = [ italic_orange , italic_orange , italic_orange , italic_orange , italic_grapes , italic_grapes , italic_pear , italic_pear , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_pear , italic_pear , italic_melon , italic_melon , italic_blueberry , italic_blueberry , italic_star , italic_blueberry , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_strawberry , italic_strawberry , italic_bell , italic_bell , italic_bell , italic_bell , italic_seven , italic_seven ] ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_r start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT = [ italic_orange , italic_orange , italic_orange , italic_orange , italic_grapes , italic_grapes , italic_pear , italic_pear , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_pear , italic_pear , italic_melon , italic_melon , italic_blueberry , italic_blueberry , italic_blueberry , italic_blueberry , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_strawberry , italic_strawberry , italic_bell , italic_bell , italic_star , italic_bell , italic_seven , italic_seven ] ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_i : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_distribution ( italic_i ) = italic_if ( italic_i < 24 , 1 / 24 , 0 ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i ) = italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT . ( italic_i roman_mod 24 ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i ) = italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT . ( italic_i roman_mod 24 ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i ) = italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT . ( italic_i roman_mod 24 ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i ) = italic_r start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT . ( italic_i roman_mod 24 ) ; end_CELL start_CELL end_CELL end_ROW end_ARRAY
Figure 2: The mCRL2 data types for the five-play-lines and ten-play-lines games

The five-play-line game requires five credits to play. It corresponds to the winning lines indicated with 1 to 5 at the upper part of the cabinet. Each winning line has length 3 and considers columns A–C. If one of the combinations at the top occurs at a winning line, then the corresponding amount is payed out. For instance, the combination star-star-star yields 200 credits, and three bells yield 40. If multiple winning lines show winning combinations, the payout is added up. The stars have a double role. A star in column one is also an orange, a star in column two doubles as a pear, a star in the third column is also a blueberry, and a star in the last column is also a bell. So, the combination star-orange-orange is also good for 40 credits, as are pear-star-pear and blueberry-blueberry-star. The combination bell-bell-star is not relevant for the five-play-line game, as the five winning lines only use the left three columns.

The game does not use the hold buttons, and in that sense is similar to the three column slot machine from Section 3.2, albeit more complex. The expected reward for each round is exactly the same, and therefore it suffices to analyse a single round of the game.

The behavioural model in mCRL2 is provided in Figures 2 and 3. In Figure 2 the basic data types are provided that are both used in the five-play-lines game and the ten-play-lines games. The sort 𝑆𝑦𝑚𝑏𝑜𝑙𝑆𝑦𝑚𝑏𝑜𝑙\mathit{Symbol}italic_Symbol contains the nine symbols that play a role. Each reel is modelled as a list of length 24. The reels are r1subscript𝑟1r_{1}italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, r2subscript𝑟2r_{2}italic_r start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, r3subscript𝑟3r_{3}italic_r start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT and r4subscript𝑟4r_{4}italic_r start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT, counted from left to right. So, r1subscript𝑟1r_{1}italic_r start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is the left most reel, containing an orange, an orange, a star, etc.

The functions 𝑔𝑒𝑡j(i)subscript𝑔𝑒𝑡𝑗𝑖\mathit{get}_{j}(i)italic_get start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ( italic_i ) get the i𝑖iitalic_i-th symbol from reel j𝑗jitalic_j. As each reel has length 24, a symbol at position i𝑖iitalic_i is put at the lowest line of the display of the slot machine with probability 124124\frac{1}{24}divide start_ARG 1 end_ARG start_ARG 24 end_ARG, provided i<24𝑖24i<24italic_i < 24. This is defined in the mapping 𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛\mathit{distribution}italic_distribution.

map𝑝𝑟𝑖𝑐𝑒:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙;𝑟𝑒𝑤𝑎𝑟𝑑:××;vari1,i2,i3:;eqn𝑝𝑟𝑖𝑐𝑒(s1,s2,s3)=𝑖𝑓(s1𝑠𝑡𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑠𝑡𝑎𝑟,200,𝑖𝑓(s1s2s2s3s1{𝑠𝑒𝑣𝑒𝑛,𝑚𝑒𝑙𝑜𝑛,𝑔𝑟𝑎𝑝𝑒𝑠,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦},80,𝑖𝑓(s1s2s2s3s1{𝑏𝑒𝑙𝑙,𝑝𝑒𝑎𝑟,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑜𝑟𝑎𝑛𝑔𝑒},40,𝑖𝑓(s1𝑠𝑡𝑎𝑟s2𝑜𝑟𝑎𝑛𝑔𝑒s3𝑜𝑟𝑎𝑛𝑔𝑒,40,𝑖𝑓(s1𝑝𝑒𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑝𝑒𝑎𝑟,40,𝑖𝑓(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s2𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s3𝑠𝑡𝑎𝑟,40,0))))));𝑟𝑒𝑤𝑎𝑟𝑑(i1,i2,i3)=𝑝𝑟𝑖𝑐𝑒(𝑔𝑒𝑡1(i1+1),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3+1))+% line 1𝑝𝑟𝑖𝑐𝑒(𝑔𝑒𝑡1(i1+2),𝑔𝑒𝑡2(i2+2),𝑔𝑒𝑡3(i3+2))+% line 2𝑝𝑟𝑖𝑐𝑒(𝑔𝑒𝑡1(i1),𝑔𝑒𝑡2(i2),𝑔𝑒𝑡3(i3))+% line 3𝑝𝑟𝑖𝑐𝑒(𝑔𝑒𝑡1(i1),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3+2))+% line 4𝑝𝑟𝑖𝑐𝑒(𝑔𝑒𝑡1(i1+2),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3));% line 5act𝑑𝑖𝑠𝑝𝑙𝑎𝑦:;initdist i1,i2,i3:[𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i1)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i2)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i3)].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(reward(i1,i2,i3))δ;\begin{array}[]{ll@{\hspace{-1.0cm}}r}\textbf{map}&\mathit{price}:\mathit{% Symbol}\times\mathit{Symbol}\times\mathit{Symbol}\rightarrow\mathbb{N};\\ &\mathit{reward}:\mathbb{N}\times\mathbb{N}\times\mathbb{N}\rightarrow\mathbb{% N};\\ \textbf{var}&i_{1},i_{2},i_{3}:\mathbb{N};\\ \textbf{eqn}&\mathit{price}(s_{1},s_{2},s_{3})=\mathit{if}(s_{1}\approx\mathit% {star}\wedge s_{2}\approx\mathit{star}\wedge s_{3}\approx\mathit{star},200,\\ &\hskip 79.6678pt\mathit{if}(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3}\wedge s% _{1}\in\{\mathit{seven},\mathit{melon},\mathit{grapes},\mathit{strawberry}\},8% 0,\\ &\hskip 79.6678pt\mathit{if}(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3}\wedge s% _{1}\in\{\mathit{bell},\mathit{pear},\mathit{blueberry},\mathit{orange}\},40,% \\ &\hskip 79.6678pt\mathit{if}(s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{orange}\wedge s_{3}\approx\mathit{orange},40,\\ &\hskip 79.6678pt\mathit{if}(s_{1}\approx\mathit{pear}\wedge s_{2}\approx% \mathit{star}\wedge s_{3}\approx\mathit{pear},40,\\ &\hskip 79.6678pt\mathit{if}(s_{1}\approx\mathit{blueberry}\wedge s_{2}\approx% \mathit{blueberry}\approx s_{3}\approx\mathit{star},40,0))))));\\ &\mathit{reward}(i_{1},i_{2},i_{3})=\mathit{price}(\mathit{get}_{1}(i_{1}{+}1)% ,\mathit{get}_{2}(i_{2}{+}1),\mathit{get}_{3}(i_{3}{+}1))+{}&\textrm{\% line 1% }\\ &\hskip 83.93553pt\mathit{price}(\mathit{get}_{1}(i_{1}{+}2),\mathit{get}_{2}(% i_{2}{+}2),\mathit{get}_{3}(i_{3}{+}2))+{}&\textrm{\% line 2}\\ &\hskip 83.93553pt\mathit{price}(\mathit{get}_{1}(i_{1}),\mathit{get}_{2}(i_{2% }),\mathit{get}_{3}(i_{3}))+{}&\textrm{\% line 3}\\ &\hskip 83.93553pt\mathit{price}(\mathit{get}_{1}(i_{1}),\mathit{get}_{2}(i_{2% }{+}1),\mathit{get}_{3}(i_{3}{+}2))+{}&\textrm{\% line 4}\\ &\hskip 83.93553pt\mathit{price}(\mathit{get}_{1}(i_{1}{+}2),\mathit{get}_{2}(% i_{2}{+}1),\mathit{get}_{3}(i_{3}));&\textrm{\% line 5}\\ \textbf{act}&\mathit{display}:\mathbb{N};\\ \textbf{init}&\textbf{dist }i_{1},i_{2},i_{3}:\mathbb{N}[\mathit{distribution}% (i_{1})*\mathit{distribution}(i_{2})*\mathit{distribution}(i_{3})].\\ &\hskip 113.81102pt\mathit{display}(reward(i_{1},i_{2},i_{3})){\cdot}\delta;\\ \end{array}start_ARRAY start_ROW start_CELL map end_CELL start_CELL italic_price : italic_Symbol × italic_Symbol × italic_Symbol → blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_reward : blackboard_N × blackboard_N × blackboard_N → blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_price ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) = italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star , 200 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∈ { italic_seven , italic_melon , italic_grapes , italic_strawberry } , 80 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∈ { italic_bell , italic_pear , italic_blueberry , italic_orange } , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_orange , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_pear , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_blueberry ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star , 40 , 0 ) ) ) ) ) ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_reward ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) = italic_price ( italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 1 ) ) + end_CELL start_CELL % line 1 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 2 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ) + end_CELL start_CELL % line 3 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 4 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ) ; end_CELL start_CELL % line 5 end_CELL end_ROW start_ROW start_CELL act end_CELL start_CELL italic_display : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL dist italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : blackboard_N [ italic_distribution ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ∗ italic_distribution ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ∗ italic_distribution ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display ( italic_r italic_e italic_w italic_a italic_r italic_d ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ) ⋅ italic_δ ; end_CELL start_CELL end_CELL end_ROW end_ARRAY
Figure 3: The mCRL2 specification of the five-play-lines game

The behaviour of the five-play-line game is specified in mCRL2 in Figure 3. It describes only a single run of this game, as only this is interesting. At the init it is stated that variables i1subscript𝑖1i_{1}italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, i2subscript𝑖2i_{2}italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT and i3subscript𝑖3i_{3}italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT are chosen according to the distribution given above. Each ijsubscript𝑖𝑗i_{j}italic_i start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT is an index in reel j𝑗jitalic_j smaller than 24, chosen with probability 124124\frac{1}{24}divide start_ARG 1 end_ARG start_ARG 24 end_ARG. Based on the values i1subscript𝑖1i_{1}italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, i2subscript𝑖2i_{2}italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, i3subscript𝑖3i_{3}italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT a reward is displayed, which is defined using the mappings 𝑟𝑒𝑤𝑎𝑟𝑑𝑟𝑒𝑤𝑎𝑟𝑑\mathit{reward}italic_reward and 𝑝𝑟𝑖𝑐𝑒𝑝𝑟𝑖𝑐𝑒\mathit{price}italic_price. The mapping 𝑟𝑒𝑤𝑎𝑟𝑑𝑟𝑒𝑤𝑎𝑟𝑑\mathit{reward}italic_reward encodes the winning lines and the mapping 𝑝𝑟𝑖𝑐𝑒𝑝𝑟𝑖𝑐𝑒\mathit{price}italic_price represents the price each winning line provides as indicated at the top of the slot machine.

We are interested in the expected return to player of this game, given by the following formula, which only looks at the payout of a single run. Recall that playing this game costs five credits.

supn:.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(n)(n5).\sup n:\mathbb{N}.\langle\mathit{display}(n)\rangle(n-5).roman_sup italic_n : blackboard_N . ⟨ italic_display ( italic_n ) ⟩ ( italic_n - 5 ) .

This formula evaluates to 0.29800.2980-0.2980- 0.2980. As a game costs 5 credits, the loss per credit is 0.29805=0.05960.298050.0596\frac{-0.2980}{5}=0.0596divide start_ARG - 0.2980 end_ARG start_ARG 5 end_ARG = 0.0596. Our analysis therefore yields a return to player of 94%percent9494\%94 %, which is close to the RTP of 95% reported on the website [28].

4.3 The ten-play-lines game

map 𝑝𝑟𝑖𝑐𝑒:×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙|×𝑆𝑦𝑚𝑏𝑜𝑙;𝑟𝑒𝑤𝑎𝑟𝑑:×××;varn,i1,i2,i3,i4:;s1,s2,s3:𝑆𝑦𝑚𝑏𝑜𝑙;eqn𝑝𝑟𝑖𝑐𝑒(n,s1,s2,s3)=𝑖𝑓(s1s2s2s3,𝑖𝑓(s1𝑠𝑡𝑎𝑟,200,𝑖𝑓(s1{𝑠𝑒𝑣𝑒𝑛,𝑚𝑒𝑙𝑜𝑛,𝑔𝑟𝑎𝑝𝑒𝑠,𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦},80,𝑖𝑓(s1{𝑏𝑒𝑙𝑙,𝑝𝑒𝑎𝑟,𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,𝑜𝑟𝑎𝑛𝑔𝑒},40,0))),𝑖𝑓(n1,𝑖𝑓(s1𝑠𝑡𝑎𝑟s2𝑜𝑟𝑎𝑛𝑔𝑒s3𝑜𝑟𝑎𝑛𝑔𝑒,40,𝑖𝑓(s1𝑝𝑒𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑝𝑒𝑎𝑟,40,𝑖𝑓(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s2𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s3𝑠𝑡𝑎𝑟,40,0))),𝑖𝑓(s1𝑠𝑡𝑎𝑟s2𝑝𝑒𝑎𝑟s3𝑝𝑒𝑎𝑟,40,𝑖𝑓(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s2𝑠𝑡𝑎𝑟s3𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,40,𝑖𝑓(s1𝑏𝑒𝑙𝑙s2𝑏𝑒𝑙𝑙s3𝑠𝑡𝑎𝑟,40,0)))));𝑟𝑒𝑤𝑎𝑟𝑑(i1,i2,i3,i4)=𝑝𝑟𝑖𝑐𝑒(1,𝑔𝑒𝑡1(i1+1),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3+1))+% line 1 𝑝𝑟𝑖𝑐𝑒(1,𝑔𝑒𝑡1(i1+2),𝑔𝑒𝑡2(i2+2),𝑔𝑒𝑡3(i3+2))+% line 2 𝑝𝑟𝑖𝑐𝑒(1,𝑔𝑒𝑡1(i1),𝑔𝑒𝑡2(i2),𝑔𝑒𝑡3(i3))+% line 3 𝑝𝑟𝑖𝑐𝑒(1,𝑔𝑒𝑡1(i1),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3+2))+% line 4 𝑝𝑟𝑖𝑐𝑒(1,𝑔𝑒𝑡1(i1+2),𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3))+% line 5 𝑝𝑟𝑖𝑐𝑒(2,𝑔𝑒𝑡2(i2+1),𝑔𝑒𝑡3(i3+1),𝑔𝑒𝑡4(i4+1))+% line 6 𝑝𝑟𝑖𝑐𝑒(2,𝑔𝑒𝑡2(i2+2),𝑔𝑒𝑡3(i3+2),𝑔𝑒𝑡4(i4+2))+% line 7 𝑝𝑟𝑖𝑐𝑒(2,𝑔𝑒𝑡2(i2),𝑔𝑒𝑡3(i3),𝑔𝑒𝑡4(i4))+% line 8 𝑝𝑟𝑖𝑐𝑒(2,𝑔𝑒𝑡2(i2),𝑔𝑒𝑡3(i3+1),𝑔𝑒𝑡4(i4+2))+% line 9 𝑝𝑟𝑖𝑐𝑒(2,𝑔𝑒𝑡2(i2+2),𝑔𝑒𝑡3(i3+1),𝑔𝑒𝑡4(i4));% line 10act𝑑𝑖𝑠𝑝𝑙𝑎𝑦:;initdist i1,i2,i3,i4:[𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i1)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i2)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i3)𝑑𝑖𝑠𝑡𝑟𝑖𝑏𝑢𝑡𝑖𝑜𝑛(i4)].𝑑𝑖𝑠𝑝𝑙𝑎𝑦(𝑟𝑒𝑤𝑎𝑟𝑑(i1,i2,i3,i4)).δ;\begin{array}[]{ll@{\hspace{-1.6cm}}r}\textbf{map }&\mathit{price}:\mathbb{N}% \times\mathit{Symbol}\times\mathit{Symbol}|\times\mathit{Symbol}\rightarrow% \mathbb{N};\\ &\mathit{reward}:\mathbb{N}\times\mathbb{N}\times\mathbb{N}\times\mathbb{N}% \rightarrow\mathbb{N};\\ \textbf{var}&n,i_{1},i_{2},i_{3},i_{4}:\mathbb{N};\\ &s_{1},s_{2},s_{3}:\mathit{Symbol;}\\ \textbf{eqn}&\mathit{price}(n,s_{1},s_{2},s_{3})=\mathit{if}(s_{1}\approx s_{2% }\wedge s_{2}\approx s_{3},\\ &\hskip 102.43008pt\mathit{if}(s_{1}\approx\mathit{star},200,\\ &\hskip 102.43008pt\mathit{if}(s_{1}\in\{\mathit{seven},\mathit{melon},\mathit% {grapes},\mathit{strawberry}\},80,\\ &\hskip 102.43008pt\mathit{if}(s_{1}\in\{\mathit{bell},\mathit{pear},\mathit{% blueberry},\mathit{orange}\},40,0))),\\ &\hskip 91.04872pt\mathit{if}(n\approx 1,\\ &\hskip 102.43008pt\mathit{if}(s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{orange}\wedge s_{3}\approx\mathit{orange},40,\\ &\hskip 102.43008pt\mathit{if}(s_{1}\approx\mathit{pear}\wedge s_{2}\approx% \mathit{star}\wedge s_{3}\wedge\mathit{pear},40,\\ &\hskip 102.43008pt\mathit{if}(s_{1}\approx\mathit{blueberry}\wedge s_{2}% \approx\mathit{blueberry}\wedge s_{3}\approx\mathit{star},40,0))),\\ &\hskip 91.04872pt\mathit{if}(s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{pear}\wedge s_{3}\wedge\mathit{pear},40,\\ &\hskip 91.04872pt\mathit{if}(s_{1}\approx\mathit{blueberry}\wedge s_{2}% \approx\mathit{star}\wedge s_{3}\approx\mathit{blueberry},40,\\ &\hskip 91.04872pt\mathit{if}(s_{1}\approx\mathit{bell}\wedge s_{2}\approx% \mathit{bell}\approx s_{3}\approx\mathit{star},40,0)))));\\ &\mathit{reward}(i_{1},i_{2},i_{3},i_{4})=\mathit{price}(1,\mathit{get}_{1}(i_% {1}{+}1),\mathit{get}_{2}(i_{2}{+}1),\mathit{get}_{3}(i_{3}{+}1))+{}&\textrm{% \% line 1\leavevmode\nobreak\ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(1,\mathit{get}_{1}(i_{1}{+}2),\mathit{get}_{2% }(i_{2}{+}2),\mathit{get}_{3}(i_{3}{+}2))+{}&\textrm{\% line 2\leavevmode% \nobreak\ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(1,\mathit{get}_{1}(i_{1}),\mathit{get}_{2}(i_% {2}),\mathit{get}_{3}(i_{3}))+{}&\textrm{\% line 3\leavevmode\nobreak\ % \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(1,\mathit{get}_{1}(i_{1}),\mathit{get}_{2}(i_% {2}{+}1),\mathit{get}_{3}(i_{3}{+}2))+{}&\textrm{\% line 4\leavevmode\nobreak% \ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(1,\mathit{get}_{1}(i_{1}{+}2),\mathit{get}_{2% }(i_{2}{+}1),\mathit{get}_{3}(i_{3}))+{}&\textrm{\% line 5\leavevmode\nobreak% \ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(2,\mathit{get}_{2}(i_{2}{+}1),\mathit{get}_{3% }(i_{3}{+}1),\mathit{get}_{4}(i_{4}{+}1))+{}&\textrm{\% line 6\leavevmode% \nobreak\ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(2,\mathit{get}_{2}(i_{2}{+}2),\mathit{get}_{3% }(i_{3}{+}2),\mathit{get}_{4}(i_{4}{+}2))+{}&\textrm{\% line 7\leavevmode% \nobreak\ \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(2,\mathit{get}_{2}(i_{2}),\mathit{get}_{3}(i_% {3}),\mathit{get}_{4}(i_{4}))+{}&\textrm{\% line 8\leavevmode\nobreak\ % \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(2,\mathit{get}_{2}(i_{2}),\mathit{get}_{3}(i_% {3}{+}1),\mathit{get}_{4}(i_{4}+2))+{}&\textrm{\% line 9\leavevmode\nobreak\ % \leavevmode\nobreak\ }\\ &\hskip 28.45274pt\mathit{price}(2,\mathit{get}_{2}(i_{2}{+}2),\mathit{get}_{3% }(i_{3}{+}1),\mathit{get}_{4}(i_{4}));&\textrm{\% line 10}\\ \textbf{act}&\mathit{display}:\mathbb{N};\\ \textbf{init}&\textbf{dist }i_{1},i_{2},i_{3},i_{4}:\mathbb{N}[\mathit{% distribution}(i_{1})*\mathit{distribution}(i_{2})*\mathit{distribution}(i_{3})% *\mathit{distribution}(i_{4})].\\ &\hskip 85.35826pt\mathit{display}(\mathit{reward}(i_{1},i_{2},i_{3},i_{4})).% \delta;\end{array}start_ARRAY start_ROW start_CELL map end_CELL start_CELL italic_price : blackboard_N × italic_Symbol × italic_Symbol | × italic_Symbol → blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_reward : blackboard_N × blackboard_N × blackboard_N × blackboard_N → blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_n , italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_price ( italic_n , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) = italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star , 200 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∈ { italic_seven , italic_melon , italic_grapes , italic_strawberry } , 80 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∈ { italic_bell , italic_pear , italic_blueberry , italic_orange } , 40 , 0 ) ) ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_n ≈ 1 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_orange , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ italic_pear , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star , 40 , 0 ) ) ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ italic_pear , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_blueberry , 40 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_bell ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_bell ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star , 40 , 0 ) ) ) ) ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_reward ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) = italic_price ( 1 , italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 1 ) ) + end_CELL start_CELL % line 1 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 1 , italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 2 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 1 , italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ) + end_CELL start_CELL % line 3 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 1 , italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 4 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 1 , italic_get start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ) + end_CELL start_CELL % line 5 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 2 , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT + 1 ) ) + end_CELL start_CELL % line 6 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 2 , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 7 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 2 , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) + end_CELL start_CELL % line 8 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 2 , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT + 2 ) ) + end_CELL start_CELL % line 9 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_price ( 2 , italic_get start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + 2 ) , italic_get start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + 1 ) , italic_get start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) ; end_CELL start_CELL % line 10 end_CELL end_ROW start_ROW start_CELL act end_CELL start_CELL italic_display : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL dist italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_N [ italic_distribution ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ∗ italic_distribution ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ∗ italic_distribution ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ∗ italic_distribution ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_display ( italic_reward ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) . italic_δ ; end_CELL start_CELL end_CELL end_ROW end_ARRAY
Figure 4: The mCRL2 behaviour of the ten-play-lines game

The ten-play-line game is very comparable to the five-play-line game. The differences are that playing it costs 10 credits, but in return the payout is now in accordance to the 10 play lines indicated at the top of the cabinet. The additional five play lines use columns B–D, and the overall payout is the sum of all winning sequences of three symbols over all 10 play lines.

The behaviour of this game is specified in Figure 4. We use a parameter n𝑛nitalic_n in 𝑝𝑟𝑖𝑐𝑒(n,s1,s2,s3)𝑝𝑟𝑖𝑐𝑒𝑛subscript𝑠1subscript𝑠2subscript𝑠3\mathit{price}(n,s_{1},s_{2},s_{3})italic_price ( italic_n , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) to indicate in which column the sequence s1subscript𝑠1s_{1}italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, s2subscript𝑠2s_{2}italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, s3subscript𝑠3s_{3}italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT starts. If s1subscript𝑠1s_{1}italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is located in column 1 the winning combinations with a 𝑠𝑡𝑎𝑟𝑠𝑡𝑎𝑟\mathit{star}italic_star are different than when s1subscript𝑠1s_{1}italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is located in column 2.

The formula for the expected average gain of this formula is the same as for the five-play-line game, except that each game now costs 10 credits;

supn:.𝑑𝑖𝑠𝑝𝑙𝑎𝑦(n)(n10).\sup n:\mathbb{N}.\langle\mathit{display}(n)\rangle(n-10).roman_sup italic_n : blackboard_N . ⟨ italic_display ( italic_n ) ⟩ ( italic_n - 10 ) .

Evaluating this formula yields 0.59600.5960-0.5960- 0.5960 which is twice the average expected loss for the five-play-lines game. This also yields a 94% return to player, exactly the same as for the five-play-lines game. Apparently, there are no extra winning combinations for the ten-play-lines game from which a player can benefit. This is in contrast to [28] which states a RTP of 97.50% for the ten-play-lines game.

4.4 The reel game

sort 𝑆𝑦𝑚𝑏𝑜𝑙=struct 𝑜𝑟𝑎𝑛𝑔𝑒𝑔𝑟𝑎𝑝𝑒𝑠𝑝𝑒𝑎𝑟𝑚𝑒𝑙𝑜𝑛𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦𝑏𝑒𝑙𝑙𝑠𝑒𝑣𝑒𝑛𝑠𝑡𝑎𝑟;map 𝑐ℎ𝑒𝑐𝑘:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙;𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛4,𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛3,𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛2:𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙×𝑆𝑦𝑚𝑏𝑜𝑙𝔹;var s1,s2,s3,s4:𝑆𝑦𝑚𝑏𝑜𝑙;eqn 𝑐ℎ𝑒𝑐𝑘(s1,s2,s3,s4)=𝑖𝑓(𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛4(s1,s2,s3,s4),𝑖𝑓((s1𝑠𝑡𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑠𝑡𝑎𝑟s4𝑠𝑡𝑎𝑟),200,𝑖𝑓((s1𝑔𝑟𝑎𝑝𝑒𝑠s1𝑚𝑒𝑙𝑜𝑛s1𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦s1𝑠𝑒𝑣𝑒𝑛),64,20)),𝑖𝑓(𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛3(s1,s2,s3,s4),𝑖𝑓((s1𝑠𝑡𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑠𝑡𝑎𝑟),100,𝑖𝑓((s1𝑔𝑟𝑎𝑝𝑒𝑠s1𝑚𝑒𝑙𝑜𝑛s1𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦s1𝑠𝑒𝑣𝑒𝑛),16,8)),𝑖𝑓(𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛2(s1,s2,s3,s4),𝑖𝑓((s1𝑠𝑡𝑎𝑟s2𝑠𝑡𝑎𝑟),8,𝑖𝑓((s1𝑔𝑟𝑎𝑝𝑒𝑠s1𝑚𝑒𝑙𝑜𝑛s1𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦s1𝑠𝑒𝑣𝑒𝑛),4,2)),0)));𝑐ℎ𝑒𝑐𝑘𝑖𝑛4(s1,s2,s3,s4)=(s1s2s2s3s3s4)(s1𝑠𝑡𝑎𝑟s2𝑜𝑟𝑎𝑛𝑔𝑒s3𝑜𝑟𝑎𝑛𝑔𝑒s4𝑜𝑟𝑎𝑛𝑔𝑒)(s1𝑝𝑒𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑝𝑒𝑎𝑟s4𝑝𝑒𝑎𝑟)(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s2𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s3𝑠𝑡𝑎𝑟s4𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦)(s1𝑏𝑒𝑙𝑙s2𝑏𝑒𝑙𝑙s3𝑏𝑒𝑙𝑙s4𝑠𝑡𝑎𝑟);𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛3(s1,s2,s3,s4)=(s1s2s2s3)(s1𝑠𝑡𝑎𝑟s2𝑜𝑟𝑎𝑛𝑔𝑒s3𝑜𝑟𝑎𝑛𝑔𝑒)(s1𝑝𝑒𝑎𝑟s2𝑠𝑡𝑎𝑟s3𝑝𝑒𝑎𝑟)(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s2𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦s3𝑠𝑡𝑎𝑟);𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛2(s1,s2,s3,s4)=(s1s2)(s1𝑠𝑡𝑎𝑟s2𝑜𝑟𝑎𝑛𝑔𝑒)(s1𝑝𝑒𝑎𝑟s2𝑠𝑡𝑎𝑟);\begin{array}[]{@{\hspace{-0.5cm}}ll@{\hspace{-1.6cm}}r}\textbf{sort }&\mathit% {Symbol}=\textbf{struct }\mathit{orange}\mid\mathit{grapes}\mid\mathit{pear}% \mid\mathit{melon}\mid\mathit{blueberry}\mid\mathit{strawberry}\mid\mathit{% bell}\mid\mathit{seven}\mid\mathit{star};\\ \textbf{map }&\mathit{check}:\mathit{Symbol}\times\mathit{Symbol}\times\mathit% {Symbol}\times\mathit{Symbol}\rightarrow\mathbb{N};\\ &\mathit{checkwin}_{4},\mathit{checkwin}_{3},\mathit{checkwin}_{2}:\mathit{% Symbol}\times\mathit{Symbol}\times\mathit{Symbol}\times\mathit{Symbol}% \rightarrow\mathbb{B};\\ \textbf{var }&s_{1},s_{2},s_{3},s_{4}:\mathit{Symbol};\\ \textbf{eqn }&\mathit{check}(s_{1},s_{2},s_{3},s_{4})=\\ &\hskip 28.45274pt\mathit{if}(\mathit{checkwin}_{4}(s_{1},s_{2},s_{3},s_{4}),% \\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{star}\wedge s_{3}\approx\mathit{star}\wedge s_{4}\approx\mathit{star})% ,200,\\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{grapes}\vee s_{1}\approx% \mathit{melon}\vee s_{1}\approx\mathit{strawberry}\vee s_{1}\approx\mathit{% seven}),64,20)),\\ &\hskip 28.45274pt\mathit{if}(\mathit{checkwin}_{3}(s_{1},s_{2},s_{3},s_{4}),% \\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{star}\wedge s_{3}\approx\mathit{star}),100,\\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{grapes}\vee s_{1}\approx% \mathit{melon}\vee s_{1}\approx\mathit{strawberry}\vee s_{1}\approx\mathit{% seven}),16,8)),\\ &\hskip 28.45274pt\mathit{if}(\mathit{checkwin}_{2}(s_{1},s_{2},s_{3},s_{4}),% \\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{star}\wedge s_{2}\approx% \mathit{star}),8,\\ &\hskip 56.9055pt\mathit{if}((s_{1}\approx\mathit{grapes}\vee s_{1}\approx% \mathit{melon}\vee s_{1}\approx\mathit{strawberry}\vee s_{1}\approx\mathit{% seven}),4,2)),0)));\\ &\mathit{checkin}_{4}(s_{1},s_{2},s_{3},s_{4})=\\ &\hskip 56.9055pt(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3}\wedge s_{3}% \approx s_{4})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{star}\wedge s_{2}\approx\mathit{orange}% \wedge s_{3}\approx\mathit{orange}\wedge s_{4}\approx\mathit{orange})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{pear}\wedge s_{2}\approx\mathit{star}% \wedge s_{3}\approx\mathit{pear}\wedge s_{4}\approx\mathit{pear})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{blueberry}\wedge s_{2}\approx\mathit{% blueberry}\wedge s_{3}\approx\mathit{star}\wedge s_{4}\approx\mathit{blueberry% })\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{bell}\wedge s_{2}\approx\mathit{bell}% \wedge s_{3}\approx\mathit{bell}\wedge s_{4}\approx\mathit{star});\\ &\mathit{checkwin}_{3}(s_{1},s_{2},s_{3},s_{4})=\\ &\hskip 56.9055pt(s_{1}\approx s_{2}\wedge s_{2}\approx s_{3})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{star}\wedge s_{2}\approx\mathit{orange}% \wedge s_{3}\approx\mathit{orange})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{pear}\wedge s_{2}\approx\mathit{star}% \wedge s_{3}\approx\mathit{pear})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{blueberry}\wedge s_{2}\approx\mathit{% blueberry}\wedge s_{3}\approx\mathit{star});\\ &\mathit{checkwin}_{2}(s_{1},s_{2},s_{3},s_{4})=\\ &\hskip 56.9055pt(s_{1}\approx s_{2})\vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{star}\wedge s_{2}\approx\mathit{orange})% \vee{}\\ &\hskip 56.9055pt(s_{1}\approx\mathit{pear}\wedge s_{2}\approx\mathit{star});% \\ \end{array}start_ARRAY start_ROW start_CELL sort end_CELL start_CELL italic_Symbol = struct italic_orange ∣ italic_grapes ∣ italic_pear ∣ italic_melon ∣ italic_blueberry ∣ italic_strawberry ∣ italic_bell ∣ italic_seven ∣ italic_star ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL map end_CELL start_CELL italic_check : italic_Symbol × italic_Symbol × italic_Symbol × italic_Symbol → blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_checkwin start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , italic_checkwin start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_checkwin start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT : italic_Symbol × italic_Symbol × italic_Symbol × italic_Symbol → blackboard_B ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL var end_CELL start_CELL italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : italic_Symbol ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL eqn end_CELL start_CELL italic_check ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) = end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_checkwin start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_star ) , 200 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_grapes ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_melon ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_strawberry ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_seven ) , 64 , 20 ) ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_checkwin start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star ) , 100 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_grapes ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_melon ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_strawberry ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_seven ) , 16 , 8 ) ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_checkwin start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ) , 8 , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_grapes ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_melon ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_strawberry ∨ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_seven ) , 4 , 2 ) ) , 0 ) ) ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_checkin start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) = end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_orange ∧ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_orange ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_pear ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_blueberry ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_bell ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_bell ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_bell ∧ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_star ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_checkwin start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) = end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_orange ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_pear ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_blueberry ∧ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_checkwin start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) = end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange ) ∨ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear ∧ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star ) ; end_CELL start_CELL end_CELL end_ROW end_ARRAY
Figure 5: The mCRL2 data description of the reel game
act𝑝𝑙𝑎𝑦:𝔹×𝔹×𝔹×𝔹;𝑝𝑜𝑖𝑛𝑡𝑠:;glob 𝑑𝑐:𝑆𝑦𝑚𝑏𝑜𝑙;proc𝑃𝑙𝑎𝑦(ℎ𝑜𝑙𝑑1,ℎ𝑜𝑙𝑑2,ℎ𝑜𝑙𝑑3,ℎ𝑜𝑙𝑑4:𝔹,i1,i2,i3,i4:𝑆𝑦𝑚𝑏𝑜𝑙)=𝑝𝑙𝑎𝑦(ℎ𝑜𝑙𝑑1,ℎ𝑜𝑙𝑑2,ℎ𝑜𝑙𝑑3,ℎ𝑜𝑙𝑑4)dist s1:𝑆𝑦𝑚𝑏𝑜𝑙[𝑖𝑓(ℎ𝑜𝑙𝑑1,𝑖𝑓(i1s1,1,0),𝑖𝑓(s1𝑠𝑡𝑎𝑟,124,𝑖𝑓(s1𝑜𝑟𝑎𝑛𝑔𝑒,324,𝑖𝑓(s1𝑔𝑟𝑎𝑝𝑒𝑠,224,𝑖𝑓(s1𝑝𝑒𝑎𝑟,424,𝑖𝑓(s1𝑚𝑒𝑙𝑜𝑛,224,𝑖𝑓(s1𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,424,𝑖𝑓(s1𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,224,𝑖𝑓(s1𝑏𝑒𝑙𝑙,424,𝑖𝑓(s1𝑠𝑒𝑣𝑒𝑛,224,0))))))))))].dist s2:𝑆𝑦𝑚𝑏𝑜𝑙[𝑖𝑓(ℎ𝑜𝑙𝑑2,𝑖𝑓(i2s2,1,0),𝑖𝑓(s2𝑠𝑡𝑎𝑟,124,𝑖𝑓(s2𝑜𝑟𝑎𝑛𝑔𝑒,424,𝑖𝑓(s2𝑔𝑟𝑎𝑝𝑒𝑠,224,𝑖𝑓(s2𝑝𝑒𝑎𝑟,324,𝑖𝑓(s2𝑚𝑒𝑙𝑜𝑛,224,𝑖𝑓(s2𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,424,𝑖𝑓(s2𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,224,𝑖𝑓(s2𝑏𝑒𝑙𝑙,424,𝑖𝑓(s2𝑠𝑒𝑣𝑒𝑛,224,0))))))))))].dist s3:𝑆𝑦𝑚𝑏𝑜𝑙[𝑖𝑓(ℎ𝑜𝑙𝑑3,𝑖𝑓(i3s3,1,0),𝑖𝑓(s3𝑠𝑡𝑎𝑟,124,𝑖𝑓(s3𝑜𝑟𝑎𝑛𝑔𝑒,424,𝑖𝑓(s3𝑔𝑟𝑎𝑝𝑒𝑠,224,𝑖𝑓(s3𝑝𝑒𝑎𝑟,424,𝑖𝑓(s3𝑚𝑒𝑙𝑜𝑛,224,𝑖𝑓(s3𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,324,𝑖𝑓(s3𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,224,𝑖𝑓(s3𝑏𝑒𝑙𝑙,424,𝑖𝑓(s3𝑠𝑒𝑣𝑒𝑛,224,0))))))))))].dist s4:𝑆𝑦𝑚𝑏𝑜𝑙[𝑖𝑓(ℎ𝑜𝑙𝑑4,𝑖𝑓(i4s4,1,0),𝑖𝑓(s4𝑠𝑡𝑎𝑟,124,𝑖𝑓(s4𝑜𝑟𝑎𝑛𝑔𝑒,424,𝑖𝑓(s4𝑔𝑟𝑎𝑝𝑒𝑠,224,𝑖𝑓(s4𝑝𝑒𝑎𝑟,424,𝑖𝑓(s4𝑚𝑒𝑙𝑜𝑛,224,𝑖𝑓(s4𝑏𝑙𝑢𝑒𝑏𝑒𝑟𝑟𝑦,424,𝑖𝑓(s4𝑠𝑡𝑟𝑎𝑤𝑏𝑒𝑟𝑟𝑦,224,𝑖𝑓(s4𝑏𝑒𝑙𝑙,324,𝑖𝑓(s4𝑠𝑒𝑣𝑒𝑛,224,0))))))))))].((𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛4(s1,s2,s3,s4)𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛3(s1,s2,s3,s4)𝑐ℎ𝑒𝑐𝑘𝑤𝑖𝑛2(s1,s2,s3,s4))(𝑝𝑜𝑖𝑛𝑡𝑠(𝑐ℎ𝑒𝑐𝑘(s1,s2,s3,s4))𝑃𝑙𝑎𝑦(𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑑𝑐,𝑑𝑐,𝑑𝑐,𝑑𝑐))(𝑝𝑜𝑖𝑛𝑡𝑠(𝑐ℎ𝑒𝑐k(s1,s2,s3,s4))b1,b2,b3,b4:𝔹.𝑃𝑙𝑎𝑦(b1,b2,b3,b4,s1,s2,s3,s4)));init 𝑃𝑙𝑎𝑦(𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑑𝑐,𝑑𝑐,𝑑𝑐,𝑑𝑐);\begin{array}[]{ll@{\hspace{-1.6cm}}r}\textbf{act}&\mathit{play}:\mathbb{B}% \times\mathbb{B}\times\mathbb{B}\times\mathbb{B};\\ &\mathit{points}:\mathbb{N};\\ \textbf{glob }&\mathit{dc}:\mathit{Symbol};\\ \textbf{proc}&\mathit{Play}(\mathit{hold}_{1},\mathit{hold}_{2},\mathit{hold}_% {3},\mathit{hold}_{4}:\mathbb{B},i_{1},i_{2},i_{3},i_{4}:\mathit{Symbol})=\\ &\hskip 14.22636pt\mathit{play}(\mathit{hold}_{1},\mathit{hold}_{2},\mathit{% hold}_{3},\mathit{hold}_{4}){\cdot}\\ &\hskip 14.22636pt\textbf{dist }s_{1}{:}\mathit{Symbol}[\mathit{if}(\mathit{% hold}_{1},\mathit{if}(i_{1}\approx s_{1},1,0),\mathit{if}(s_{1}\approx\mathit{% star},\frac{1}{24},\mathit{if}(s_{1}\approx\mathit{orange},\frac{3}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{1}\approx\mathit{grapes},\frac{2}{24},% \mathit{if}(s_{1}\approx\mathit{pear},\frac{4}{24},\mathit{if}(s_{1}\approx% \mathit{melon},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{1}\approx\mathit{blueberry},\frac{4}{24},% \mathit{if}(s_{1}\approx\mathit{strawberry},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{1}\approx\mathit{bell},\frac{4}{24},\mathit{% if}(s_{1}\approx\mathit{seven},\frac{2}{24},0))))))))))].\\ &\hskip 14.22636pt\textbf{dist }s_{2}{:}\mathit{Symbol}[\mathit{if}(\mathit{% hold}_{2},\mathit{if}(i_{2}\approx s_{2},1,0),\mathit{if}(s_{2}\approx\mathit{% star},\frac{1}{24},\mathit{if}(s_{2}\approx\mathit{orange},\frac{4}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{2}\approx\mathit{grapes},\frac{2}{24},% \mathit{if}(s_{2}\approx\mathit{pear},\frac{3}{24},\mathit{if}(s_{2}\approx% \mathit{melon},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{2}\approx\mathit{blueberry},\frac{4}{24},% \mathit{if}(s_{2}\approx\mathit{strawberry},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{2}\approx\mathit{bell},\frac{4}{24},\mathit{% if}(s_{2}\approx\mathit{seven},\frac{2}{24},0))))))))))].\\ &\hskip 14.22636pt\textbf{dist }s_{3}{:}\mathit{Symbol}[\mathit{if}(\mathit{% hold}_{3},\mathit{if}(i_{3}\approx s_{3},1,0),\mathit{if}(s_{3}\approx\mathit{% star},\frac{1}{24},\mathit{if}(s_{3}\approx\mathit{orange},\frac{4}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{3}\approx\mathit{grapes},\frac{2}{24},% \mathit{if}(s_{3}\approx\mathit{pear},\frac{4}{24},\mathit{if}(s_{3}\approx% \mathit{melon},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{3}\approx\mathit{blueberry},\frac{3}{24},% \mathit{if}(s_{3}\approx\mathit{strawberry},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{3}\approx\mathit{bell},\frac{4}{24},\mathit{% if}(s_{3}\approx\mathit{seven},\frac{2}{24},0))))))))))].\\ &\hskip 14.22636pt\textbf{dist }s_{4}{:}\mathit{Symbol}[\mathit{if}(\mathit{% hold}_{4},\mathit{if}(i_{4}\approx s_{4},1,0),\mathit{if}(s_{4}\approx\mathit{% star},\frac{1}{24},\mathit{if}(s_{4}\approx\mathit{orange},\frac{4}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{4}\approx\mathit{grapes},\frac{2}{24},% \mathit{if}(s_{4}\approx\mathit{pear},\frac{4}{24},\mathit{if}(s_{4}\approx% \mathit{melon},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{4}\approx\mathit{blueberry},\frac{4}{24},% \mathit{if}(s_{4}\approx\mathit{strawberry},\frac{2}{24},\\ &\hskip 118.07875pt\mathit{if}(s_{4}\approx\mathit{bell},\frac{3}{24},\mathit{% if}(s_{4}\approx\mathit{seven},\frac{2}{24},0))))))))))].\\ &\hskip 14.22636pt((\mathit{checkwin}_{4}(s_{1},s_{2},s_{3},s_{4})\vee\mathit{% checkwin}_{3}(s_{1},s_{2},s_{3},s_{4})\vee\mathit{checkwin}_{2}(s_{1},s_{2},s_% {3},s_{4}))\\ &\hskip 28.45274pt\rightarrow(\mathit{points}(\mathit{check}(s_{1},s_{2},s_{3}% ,s_{4})){\cdot}\\ &\hskip 44.10185pt\mathit{Play}(\mathit{false},\mathit{false},\mathit{false},% \mathit{false},\mathit{dc},\mathit{dc},\mathit{dc},\mathit{dc}))\\ &\hskip 28.45274pt\diamond\leavevmode\nobreak\ \leavevmode\nobreak\ % \leavevmode\nobreak\ (\mathit{points}(\mathit{chec}k(s_{1},s_{2},s_{3},s_{4}))% {\cdot}\\ &\hskip 44.10185pt\sum_{b_{1},b_{2},b_{3},b_{4}:\mathbb{B}}.\mathit{Play}(b_{1% },b_{2},b_{3},b_{4},s_{1},s_{2},s_{3},s_{4})));\\ \textbf{init }&\mathit{Play}(\mathit{false},\mathit{false},\mathit{false},% \mathit{false},\mathit{dc},\mathit{dc},\mathit{dc},\mathit{dc});\end{array}start_ARRAY start_ROW start_CELL act end_CELL start_CELL italic_play : blackboard_B × blackboard_B × blackboard_B × blackboard_B ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_points : blackboard_N ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL glob end_CELL start_CELL italic_dc : italic_Symbol ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL proc end_CELL start_CELL italic_Play ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_B , italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : italic_Symbol ) = end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_play ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_hold start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ⋅ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL dist italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT : italic_Symbol [ italic_if ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_if ( italic_i start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , 1 , 0 ) , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_star , divide start_ARG 1 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_orange , divide start_ARG 3 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_grapes , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_pear , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_melon , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_blueberry , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_strawberry , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_bell , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≈ italic_seven , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , 0 ) ) ) ) ) ) ) ) ) ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL dist italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT : italic_Symbol [ italic_if ( italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_if ( italic_i start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , 1 , 0 ) , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_star , divide start_ARG 1 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_orange , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_grapes , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_pear , divide start_ARG 3 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_melon , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_blueberry , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_strawberry , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_bell , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ≈ italic_seven , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , 0 ) ) ) ) ) ) ) ) ) ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL dist italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT : italic_Symbol [ italic_if ( italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_if ( italic_i start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , 1 , 0 ) , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_star , divide start_ARG 1 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_orange , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_grapes , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_pear , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_melon , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_blueberry , divide start_ARG 3 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_strawberry , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_bell , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ≈ italic_seven , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , 0 ) ) ) ) ) ) ) ) ) ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL dist italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : italic_Symbol [ italic_if ( italic_hold start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , italic_if ( italic_i start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , 1 , 0 ) , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_star , divide start_ARG 1 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_orange , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_grapes , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_pear , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_melon , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_blueberry , divide start_ARG 4 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_strawberry , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_bell , divide start_ARG 3 end_ARG start_ARG 24 end_ARG , italic_if ( italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ≈ italic_seven , divide start_ARG 2 end_ARG start_ARG 24 end_ARG , 0 ) ) ) ) ) ) ) ) ) ) ] . end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ( ( italic_checkwin start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ∨ italic_checkwin start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ∨ italic_checkwin start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL → ( italic_points ( italic_check ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) ⋅ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL italic_Play ( italic_false , italic_false , italic_false , italic_false , italic_dc , italic_dc , italic_dc , italic_dc ) ) end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ⋄ ( italic_points ( italic_chec italic_k ( italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) ⋅ end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ∑ start_POSTSUBSCRIPT italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_B end_POSTSUBSCRIPT . italic_Play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ) ) ; end_CELL start_CELL end_CELL end_ROW start_ROW start_CELL init end_CELL start_CELL italic_Play ( italic_false , italic_false , italic_false , italic_false , italic_dc , italic_dc , italic_dc , italic_dc ) ; end_CELL start_CELL end_CELL end_ROW end_ARRAY
Figure 6: The mCRL2 process part of the reel game

The reel game is played on four columns and a single line, where the hold buttons can be used. Playing this game costs one credit. The winning combinations are listed at the lower part of the cabinet. Essentially, a reward is awarded if the first 2, 3 or 4 symbols from left to right are the same. So, for instance, four stars yield 200, three stars at the left yield 100 and two left stars provide 8 credits. As with the play-lines games, stars have a double role, namely as orange in the first column, as pear in the second, as blueberry in the third and as bell in the last columns.

Interestingly, we had difficulties understanding how the hold buttons were supposed to be used. We think that it is useful to explicitly go through some variants we encountered, as it underlines the need for a formal description of the game when communicating the rules to for instance gambling authorities. We summarize the expected payout for the different variants in Table 2.

Table 2: Comparison of variants for the reel game.
Variant Max. expected gain RTP
mCRL2 mCRL2 website
Always allow hold 1.5652 256.52%
Hold with extra cost 0.6916 169.16%
Only hold one round -0.1690 83.10% 88.50%

At a particular moment we got access to the playable version of the TopSpinner [28], which was helpful to increase understanding. However, the average payouts mentioned on the website differ somewhat from our results. There are various explanations for this difference of which one is that we still do not exactly capture the rules of the game, although we consider this unlikely.

Always allow hold buttons

In our initial model, we assume that the hold buttons can always be used, except at the start of the game and directly after a winning combination, as otherwise the winning combination could be fixed, and a player could repeat this winning combination indefinitely.

The data of this model is listed in Figure 5 and the process behaviour in Figure 6. In the process behaviour we use the glob keyword to declare ‘global variables’. The meaning of these variables is that they can be set to any value, without influencing the meaning of the specification. Tools instantiate these variables to appropriate values that allow to optimise the verification efforts.

The most interesting question that we like to ask is what the average maximal return to player is when the player plays the game optimally. The following formula provides this maximal expected gain per game when the player plays 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds rounds:

1𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠μX(𝑟𝑜𝑢𝑛𝑑𝑠:=0).(𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠)0(𝑟𝑜𝑢𝑛𝑑𝑠<𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠)supb1,b2,b3,b4:𝔹.𝑝𝑙𝑎𝑦(b1,b2,b3,b4)supn:.𝑝𝑜𝑖𝑛𝑡𝑠(n)(n1+X(𝑟𝑜𝑢𝑛𝑑𝑠+1))).\begin{array}[]{l}\frac{1}{\mathit{max\_rounds}}*\mu X(\mathit{rounds}{:}% \mathbb{N}{=}0).\\ \hskip 56.9055pt(\mathit{rounds}\approx\mathit{max\_rounds})\wedge 0\vee{}\\ \hskip 56.9055pt(\mathit{rounds}<\mathit{max\_rounds})\wedge{}\\ \hskip 85.35826pt\sup b_{1},b_{2},b_{3},b_{4}{:}\mathbb{B}.\langle\mathit{play% }(b_{1},b_{2},b_{3},b_{4})\rangle\\ \hskip 113.81102pt\sup n{:}\mathbb{N}.\langle\mathit{points}(n)\rangle(n{-}1+X% (\mathit{rounds}{+}1))).\end{array}start_ARRAY start_ROW start_CELL divide start_ARG 1 end_ARG start_ARG italic_max _ italic_rounds end_ARG ∗ italic_μ italic_X ( italic_rounds : blackboard_N = 0 ) . end_CELL end_ROW start_ROW start_CELL ( italic_rounds ≈ italic_max _ italic_rounds ) ∧ 0 ∨ end_CELL end_ROW start_ROW start_CELL ( italic_rounds < italic_max _ italic_rounds ) ∧ end_CELL end_ROW start_ROW start_CELL roman_sup italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_B . ⟨ italic_play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) ⟩ end_CELL end_ROW start_ROW start_CELL roman_sup italic_n : blackboard_N . ⟨ italic_points ( italic_n ) ⟩ ( italic_n - 1 + italic_X ( italic_rounds + 1 ) ) ) . end_CELL end_ROW end_ARRAY (6)

The variable X(𝑟𝑜𝑢𝑛𝑑𝑠)𝑋𝑟𝑜𝑢𝑛𝑑𝑠X(\mathit{rounds})italic_X ( italic_rounds ) in this formula has as value the maximal gain when 𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠\mathit{rounds}italic_rounds games have been played. If the variable 𝑟𝑜𝑢𝑛𝑑𝑠𝑟𝑜𝑢𝑛𝑑𝑠\mathit{rounds}italic_rounds is equal to 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds the gain is set to 00. Otherwise, a round of the game takes place, modelled by the action 𝑝𝑙𝑎𝑦(b1,b2,b3,b4)𝑝𝑙𝑎𝑦subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏4\mathit{play}(b_{1},b_{2},b_{3},b_{4})italic_play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) where the boolean bisubscript𝑏𝑖b_{i}italic_b start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT is true when column i𝑖iitalic_i is set to hold. The formula calculates the supremum over all hold settings. It obtains the points n𝑛nitalic_n that are won, and changes the maximal gain by adding n1𝑛1n-1italic_n - 1 to the maximal gain. Note the use of supn:.\sup n{:}\mathbb{N}.\ldotsroman_sup italic_n : blackboard_N . …. As the amount that is won is uniquely defined, this supremum only acts as a binder for the variable n𝑛nitalic_n.

The results are unexpected and are provided in the graph in Figure 7 as the continuous blue line. On the x𝑥xitalic_x-axis the number of iteratively played games are indicated and on the y𝑦yitalic_y-axis the maximal average gain per game is depicted. When playing one game the average loss is 0.460.46-0.46- 0.46 credits, which is understandable as the player cannot influence the game with the hold buttons. When playing at most two games the minimal loss is 0.240.24-0.24- 0.24 per game. But when optimally playing four games there is already an average profit of 0.110.110.110.11 credits. This increases to an average profit for the perfect player per game of more than 1.51.51.51.5 credits if the game is played for more than 200 rounds.

20202020404040406060606080808080100100100100120120120120140140140140160160160160180180180180200200200200𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds11-1- 10011112222max exp. gain always allow hold hold with extra cost hold one round
Figure 7: The maximal expected gain per game for the reel game during 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠\mathit{max\_rounds}italic_max _ italic_rounds games

Hold with extra cost

The question arises whether it is really possible to have an expected profit on this actual machine. After some discussion, the company suggested that when applying the hold buttons, an extra credit had to be paid. This is easily modelled by changing the last part of Formula (6) n1+X(𝑟𝑜𝑢𝑛𝑑𝑠+1)𝑛1𝑋𝑟𝑜𝑢𝑛𝑑𝑠1n-1+X(\mathit{rounds}{+}1)italic_n - 1 + italic_X ( italic_rounds + 1 ) into n𝑖𝑓(b1b2b3b4,2,1)+X(𝑟𝑜𝑢𝑛𝑑𝑠+1)𝑛𝑖𝑓subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏421𝑋𝑟𝑜𝑢𝑛𝑑𝑠1n-\mathit{if}(b_{1}{\vee}b_{2}{\vee}b_{3}{\vee}b_{4},2,1)+X(\mathit{rounds}{+}1)italic_n - italic_if ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∨ italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∨ italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∨ italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , 2 , 1 ) + italic_X ( italic_rounds + 1 ). The results are depicted in Figure 7 as the middle purple dashed line. Clearly, the average gain is less, but in the long run the player can still obtain a gain of 0.690.690.690.69 per game. It is unlikely that this is actually the case.

Only hold for one round

After more discussion, and especially, looking at the slot machine simulator [28], it appears that when the hold buttons are used in a certain round, they cannot be used in the next round.

We model this by replacing the following line in the model in Figure 6:

b1,b2,b3,b4:𝔹.𝑃𝑙𝑎𝑦(b1,b2,b3,b4,s1,s2,s3,s4)formulae-sequencesubscript:subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏4𝔹𝑃𝑙𝑎𝑦subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏4subscript𝑠1subscript𝑠2subscript𝑠3subscript𝑠4\begin{array}[]{l}\sum_{b_{1},b_{2},b_{3},b_{4}:\mathbb{B}}.\mathit{Play}(b_{1% },b_{2},b_{3},b_{4},s_{1},s_{2},s_{3},s_{4})\end{array}start_ARRAY start_ROW start_CELL ∑ start_POSTSUBSCRIPT italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_B end_POSTSUBSCRIPT . italic_Play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) end_CELL end_ROW end_ARRAY

by

(ℎ𝑜𝑙𝑑1ℎ𝑜𝑙𝑑2ℎ𝑜𝑙𝑑3ℎ𝑜𝑙𝑑4)𝑃𝑙𝑎𝑦(𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑓𝑎𝑙𝑠𝑒,𝑑𝑐,𝑑𝑐,𝑑𝑐,𝑑𝑐)b1,b2,b3,b4:𝔹𝑃𝑙𝑎𝑦(b1,b2,b3,b4,s1,s2,s3,s4).subscriptℎ𝑜𝑙𝑑1subscriptℎ𝑜𝑙𝑑2subscriptℎ𝑜𝑙𝑑3subscriptℎ𝑜𝑙𝑑4absent𝑃𝑙𝑎𝑦𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒𝑑𝑐𝑑𝑐𝑑𝑐𝑑𝑐subscript:subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏4𝔹𝑃𝑙𝑎𝑦subscript𝑏1subscript𝑏2subscript𝑏3subscript𝑏4subscript𝑠1subscript𝑠2subscript𝑠3subscript𝑠4\begin{array}[]{l}(\mathit{hold}_{1}{\vee}\mathit{hold}_{2}{\vee}\mathit{hold}% _{3}{\vee}\mathit{hold}_{4})\\ \hskip 56.9055pt\rightarrow\mathit{Play}(\mathit{false},\mathit{false},\mathit% {false},\mathit{false},\mathit{dc},\mathit{dc},\mathit{dc},\mathit{dc})\\ \hskip 56.9055pt\leavevmode\nobreak\ \diamond\,\sum_{b_{1},b_{2},b_{3},b_{4}:% \mathbb{B}}\mathit{Play}(b_{1},b_{2},b_{3},b_{4},s_{1},s_{2},s_{3},s_{4}).\end% {array}start_ARRAY start_ROW start_CELL ( italic_hold start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∨ italic_hold start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ∨ italic_hold start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ∨ italic_hold start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) end_CELL end_ROW start_ROW start_CELL → italic_Play ( italic_false , italic_false , italic_false , italic_false , italic_dc , italic_dc , italic_dc , italic_dc ) end_CELL end_ROW start_ROW start_CELL ⋄ ∑ start_POSTSUBSCRIPT italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT : blackboard_B end_POSTSUBSCRIPT italic_Play ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_b start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT , italic_s start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) . end_CELL end_ROW end_ARRAY

This expresses that if one of the hold button is pressed, the next round is played with all variables representing the hold buttons set to 𝑓𝑎𝑙𝑠𝑒𝑓𝑎𝑙𝑠𝑒\mathit{false}italic_false. Otherwise, if no hold button is pressed, the hold buttons in the next round can be set at will.

In the web simulator there is no additional fee for using the hold buttons, so we use Formula (6) without alteration. Evaluating Formula (6) yields rewards conforming to the lower, grey dotted line in Figure 7. On the long run, when playing optimally, a loss of 0.170.17-0.17- 0.17 per game is expected, i.e., a return to player of 83%percent8383\%83 %. This result is not in line with the stated RTP of 88.5%percent88.588.5\%88.5 % on the website [28].

Validation

Comparing the RTP from our mCRL2 model with the RTPs stated on the website [28], we see discrepancies. This is similar to the five-play-lines and ten-play-lines game where the website claims RTPs of respectively 95%percent9595\%95 % and 97.5%percent97.597.5\%97.5 %, whereas we find an RTP of 94%percent9494\%94 % for both games. In order to exclude mistakes from our side, we also modelled and analysed the games using the model checkers Storm [18] and Prism [24]. Both tools yield the same results as mCRL2.

Optimal strategies

Refer to caption
Figure 8: Decision tree representing (parts of) the optimal player strategy for the reels game where a button holds only for one round.

An interesting question as a player is when and which buttons to hold in order to achieve the best RTP. For the reel game in which the buttons can only be held for one round, we can extract the player strategy leading to the optimal RTP of 83%. To this end, we use the Storm model checker [18] and export the optimal strategy which details for each possible reel outcome which buttons should be held. In order to achieve a small and human understandable strategy, we employ the tool dtControl [1] to create a decision tree from the obtained strategy.

Figure 8 depicts a part of the decision tree for the reels game in which a button can only be held for one round. A node of the form ‘fruit𝑥𝑦𝑥𝑦\mathit{x}\mathit{y}italic_xy’ represents the check whether reels x𝑥xitalic_x and y𝑦yitalic_y show the same fruit symbol, ‘star𝑥𝑦𝑥𝑦\mathit{x}\mathit{y}italic_xy’ checks whether both reels show the star symbol. The player strategy is given by ‘hold𝑥𝑦𝑧𝑥𝑦𝑧\mathit{x}\mathit{y}\mathit{z}italic_xyz’ which represents that the player should hold the indicated columns.

The obtained strategy leads to some interesting insights. For instance, stars are higher valued than fruits. This can for instance be seen in the case where reels 1, 3 and 4 show the same fruit symbol (‘fruit13’, ‘fruit14’) but reels 2 and 3 also show stars (‘star23’). The outcome then is ‘hold23’ meaning that the player should hold the buttons for the two stars instead of the three buttons for the equal fruits. Similarly, if stars are present in reels 1 and 3, and the fruits in reel 2, 3, and 4 are equal, then the buttons 1 and 3 for the stars should be held.

5 Conclusion

We analysed the behaviour of slot machines and came to the conclusion that process specification and modal formulas are a suitable set of means to analyse them. Once set up, a formal model of the slot machine has several benefits. First, there is a clear and unambiguous description of the behaviour of the slot machine. Second, the specifications and formulas can easily be adapted to investigate variations of the slot machines or particular scenarios that players could employ. Third, the analysis via model checking computes exact values and therefore provides verified results. Fourth, the approach is compositional and therefore allows to model a complete slot machine by combining the models for the individual games. And finally, the player strategies can automatically be extracted, which allows better insights into the game mechanics.

While modeling the slot machines, we observed that it is not very easy to figure out what the exact rules of games are, not even for ‘simple’ slot machines. This is in line with what we found in board games as well [14]. It would therefore be useful to describe such games in a standardised formal way. This allows to communicate the rules of the games with gaming authorities that verify that the return-to-player is within acceptable and legal bounds.

5.1 Future work

There are a quite a few interesting aspects of slot machines that deserve further investigation.

Apart from the RTP, we could check whether the loss per hour is limited, even when a player employs a particularly bad strategy. Another question could be what the game characteristics are, when the player has a limited amount of money or a limited amount of rounds left. Note that the approach with quantitative modal logics is quite suitable to address such questions.

Using various tools we derived explicit optimal strategies for players, especially for variations of the reel game. These strategies are remarkably complex. In particular these strategies can take into account how many games the player is still planning to play. As yet, there are no easy ways to extract such strategies in the mCRL2 toolset, comparable to finding evidence and counter examples as can be provided for non-quantitive model checking [30]. It would be very useful to extend the quantitive checkers of mCRL2 with such capabilities, similar to e.g., [18, 24].

Another issue that can occur is that it can be computationally complex to evaluate a formula. This is essentially done by translating the specification and the formula to a parameterised real equation system that is subsequently solved [15] very much in line with how boolean formulas are solved using boolean equation systems [13]. But the size of these equation systems can grow rapidly. Solving formula (6) for 𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠=200𝑚𝑎𝑥_𝑟𝑜𝑢𝑛𝑑𝑠200\mathit{max\_rounds}=200italic_max _ italic_rounds = 200 requires more than 1M pres variables. Typical solutions here lie in using symbolic methods that can handle much larger systems, such as [25] for non-probabilistic and [23, 19] for probabilistic models.

Data availability.

The process descriptions of slot machines and the formulas are provided in the examples directory of the mCRL2 toolset (www.mcrl2.org) which is distributed under the liberal BOOST licence allowing its free use.

References

  • [1] P. Ashok, M. Jackermeier, J. Kretínský, Ch. Weinhuber, M. Weininger, and M. Yadav. dtcontrol 2.0: Explainable strategy representation via decision tree learning steered by experts. In J.F. Groote and K.G. Larsen, editors, Tools and Algorithms for the Construction and Analysis of Systems - 27th International Conference, TACAS 2021, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2021, Luxembourg City, Luxembourg, March 27 - April 1, 2021, Proceedings, Part II, volume 12652 of Lecture Notes in Computer Science, pages 326–345. Springer, 2021.
  • [2] I. Balabanov, Tand Zankinski and B. Shumanov. Slot machine RTP optimization and symbols wins equalization with discrete differential evolution. In I. Lirkov, S.D. Margenov, and J. Wasniewski, editors, Large-Scale Scientific Computing - 10th International Conference, LSSC 2015, Sozopol, Bulgaria, June 8-12, 2015. Revised Selected Papers, volume 9374 of Lecture Notes in Computer Science, pages 210–217. Springer, 2015.
  • [3] T. Balabanov, I. Zankinski, and B. Shumanov. Slot machines RTP optimization with genetic algorithms. In I. Dimov, S. Fidanova, and I. Lirkov, editors, Numerical Methods and Applications - 8th International Conference, NMA 2014, Borovets, Bulgaria, August 20-24, 2014, Revised Selected Papers, volume 8962 of Lecture Notes in Computer Science, pages 55–61. Springer, 2014.
  • [4] C. Barboianu. The mathematics of slots: Configurations, combinations, probabilities. Infarom Publishing, 2013.
  • [5] G.D.I. Barr and I.N. Durbach. A Monte Carlo analysis of hypothetical multi-line slot machine play. International Gambling Studies, 8(3):265–280, 2008.
  • [6] J.C. Bradfield and C. Stirling. Local model checking for infinite state spaces. Theor. Comput. Sci., 96(1):157–174, 1992.
  • [7] S. Cranen, J.F. Groote, and M.A. Reniers. A linear translation from CTL* to the first-order modal μ𝜇\muitalic_μ-calculus. Theor. Comput. Sci., 412(28):3129–3139, 2011.
  • [8] JVH Gaming/Errèl Industries B.V. JVH Gaming. marktleider met voorbeeldfunctie, Accessed April 2024. https://www.jvhgaming.com.
  • [9] H. Garavel, F. Lang, R. Mateescu, and Wendelin Serwe. CADP 2011: a toolbox for the construction and analysis of distributed processes. Int. J. Softw. Tools Technol. Transf., 15(2):89–107, 2013.
  • [10] T. Gawlitza and H. Seidl. Precise fixpoint computation through strategy iteration. In R. De Nicola, editor, Programming Languages and Systems, 16th European Symposium on Programming, ESOP 2007, Held as Part of the Joint European Conferences on Theory and Practics of Software, ETAPS 2007, Braga, Portugal, March 24 - April 1, 2007, Proceedings, volume 4421 of Lecture Notes in Computer Science, pages 300–315. Springer, 2007.
  • [11] T.M. Gawlitza and H. Seidl. Solving systems of rational equations through strategy iteration. ACM Trans. Program. Lang. Syst., 33(3):11:1–11:48, 2011.
  • [12] J.F. Groote and J.J.A. Keiren. Tutorial: Designing distributed software in mcrl2. In Kirstin Peters and Tim A. C. Willemse, editors, Formal Techniques for Distributed Objects, Components, and Systems - 41st IFIP WG 6.1 International Conference, FORTE 2021, Held as Part of the 16th International Federated Conference on Distributed Computing Techniques, DisCoTec 2021, Valletta, Malta, June 14-18, 2021, Proceedings, volume 12719 of Lecture Notes in Computer Science, pages 226–243. Springer, 2021.
  • [13] J.F. Groote and M.R. Mousavi. Modeling and Analysis of Communicating Systems. MIT Press, 2014.
  • [14] J.F. Groote, F. Wiedijk, and H. Zantema. A probabilistic analysis of the game of the goose. SIAM Rev., 58(1):143–155, 2016.
  • [15] J.F. Groote and T.A.C. Willemse. Real equation systems with alternating fixed-points. In G.A. Pérez and J.-F. Raskin, editors, 34th International Conference on Concurrency Theory, CONCUR 2023, September 18-23, 2023, Antwerp, Belgium, volume 279 of LIPIcs, pages 28:1–28:17. Schloss Dagstuhl - Leibniz-Zentrum für Informatik, 2023.
  • [16] A. Hartmanns and H. Hermanns. The modest toolset: An integrated environment for quantitative modelling and verification. In E. Ábrahám and K. Havelund, editors, Tools and Algorithms for the Construction and Analysis of Systems - 20th International Conference, TACAS 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5-13, 2014. Proceedings, volume 8413 of Lecture Notes in Computer Science, pages 593–598. Springer, 2014.
  • [17] M. Hennessy and R. Milner. On observing nondeterminism and concurrency. In J. W. de Bakker and Jan van Leeuwen, editors, Automata, Languages and Programming, 7th Colloquium, Noordweijkerhout, The Netherlands, July 14-18, 1980, Proceedings, volume 85 of Lecture Notes in Computer Science, pages 299–309. Springer, 1980.
  • [18] C. Hensel, S. Junges, J.-P. Katoen, T. Quatmann, and M. Volk. The probabilistic model checker Storm. Int. J. Softw. Tools Technol. Transf., 24(4):589–610, 2022.
  • [19] Ch. Hensel. The probabilistic model checker Storm: symbolic methods for probabilistic model checking. PhD thesis, RWTH Aachen University, Germany, 2018.
  • [20] P.-A. Kamanas, A. Sifaleras, and N. Samaras. Slot machine RTP optimization using variable neighborhood search. Mathematical Problems in Engineering, 2021(1):8784065, 2021.
  • [21] Kansspelautoriteit. Spelen op een speelautomaat, Accessed April 2024. https://kansspelautoriteit.nl/veilig-spelen/spelen-speelautomaat.
  • [22] D. Keremedchiev, P. Tomov, and M. Barova. Slot machine base game evolutionary RTP optimization. In I. Dimov, I. Faragó, and L.G. Vulkov, editors, Numerical Analysis and Its Applications - 6th International Conference, NAA 2016, Lozenetz, Bulgaria, June 15-22, 2016, Revised Selected Papers, volume 10187 of Lecture Notes in Computer Science, pages 406–413, 2016.
  • [23] M.Z. Kwiatkowska, G. Norman, and D. Parker. Probabilistic symbolic model checking with PRISM: a hybrid approach. Int. J. Softw. Tools Technol. Transf., 6(2):128–142, 2004.
  • [24] M.Z. Kwiatkowska, G. Norman, and D. Parker. PRISM 4.0: Verification of probabilistic real-time systems. In G. Gopalakrishnan and S. Qadeer, editors, Computer Aided Verification - 23rd International Conference, CAV 2011, Snowbird, UT, USA, July 14-20, 2011. Proceedings, volume 6806 of Lecture Notes in Computer Science, pages 585–591. Springer, 2011.
  • [25] M. Laveaux, W. Wesselink, and T.A.C. Willemse. On-the-fly solving for symbolic parity games. In Dana Fisman and Grigore Rosu, editors, Tools and Algorithms for the Construction and Analysis of Systems - 28th International Conference, TACAS 2022, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2022, Munich, Germany, April 2-7, 2022, Proceedings, Part II, volume 13244 of Lecture Notes in Computer Science, pages 137–155. Springer, 2022.
  • [26] H. Mao, Y. Chen, M. Jaeger, T.D. Nielsen, K.G. Larsen, and B. Nielsen. Learning markov decision processes for model checking. In U. Fahrenberg, A. Legay, and C.R. Thrane, editors, Proceedings Quantities in Formal Methods, QFM 2012, Paris, France, 28 August 2012, volume 103 of EPTCS, pages 49–63, 2012.
  • [27] R. Milner. A Calculus of Communicating Systems, volume 92 of Lecture Notes in Computer Science. Springer, 1980.
  • [28] Gokkasten Online NL. Topspinner. https://www.gokkastenonline.nl/topspinner/. Accessed: June 2024.
  • [29] Speelautomatenbesluit 2000, 2024. Regulations regarding slot machines, part of the Dutch Civil Code.
  • [30] W. Wesselink and T.A.C. Willemse. Evidence extraction from parameterised boolean equation systems. In C. Benzmüller and J. Otten, editors, Proceedings of the 3rd International Workshop on Automated Reasoning in Quantified Non-Classical Logics (ARQNL 2018) affiliated with the International Joint Conference on Automated Reasoning (IJCAR 2018), Oxford, UK, July 18, 2018, volume 2095 of CEUR Workshop Proceedings, pages 86–100. CEUR-WS.org, 2018.