diff --git a/Peaceable_Armies_of_Queens.ipynb b/Peaceable_Armies_of_Queens.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..cb5709d33cbee483b97b8494802110b33bf58800
--- /dev/null
+++ b/Peaceable_Armies_of_Queens.ipynb
@@ -0,0 +1,799 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Peaceable Armies of Queens\n",
+    "\n",
+    "The paper [Models and symmetry breaking for 'peaceable armies of queens'](https://link.springer.com/chapter/10.1007/978-3-540-24664-0_19) by Smith, Petrie and Gent describes a challenging constraint programming problem. \n",
+    "A variation of the problem can be found on page 329 of the [Handbook on Constraint Programming](https://www.elsevier.com/books/handbook-of-constraint-programming/rossi/978-0-444-52726-4).\n",
+    "\n",
+    "The challenge is to place two equal-sized armies of white and black queens onto a chessboard. We can distinguish between two problems:\n",
+    "\n",
+    "* checking whether two armies of n queens can be placed on a dim*dim chessboard,\n",
+    "\n",
+    "* for a given board of size dim*dim find the maximal size n of armies that can be placed onto the board, i.e., solving an optimisation problem.\n",
+    "\n",
+    "In this notebook, we take a look at both of the problems and visualize them with the `ANIMATION_FUNCTION`."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Checking\n",
+    "\n",
+    "First we will take a look at the model for the checking problem. This problem is quite straightforward to encode in B. Most of the lines in the DEFINITIONS section are for our visualization with the `ANIMATION_FUNCTION`.\n",
+    "\n",
+    "We will load (`::load`), set up the constants (`:constants`), and initialize the machine (`:init`), before we visualize it (`:show`)."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Loaded machine: JustQueens"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "::load\n",
+    "MACHINE JustQueens\n",
+    "DEFINITIONS\n",
+    "      SET_PREF_TIME_OUT == 1000000;\n",
+    "      SET_PREF_MAX_INITIALISATIONS == 1;\n",
+    "      ANIMATION_IMG0 == \"images/ChessPieces/Chess_emptyl45.gif\";\n",
+    "      ANIMATION_IMG1 == \"images/ChessPieces/Chess_emptyd45.gif\";\n",
+    "      ANIMATION_IMG2 == \"images/ChessPieces/Chess_qdl45.gif\";\n",
+    "      ANIMATION_IMG3 == \"images/ChessPieces/Chess_qdd45.gif\";\n",
+    "      ANIMATION_IMG6 == \"images/ChessPieces/Chess_qll45.gif\";\n",
+    "      ANIMATION_IMG7 == \"images/ChessPieces/Chess_qld45.gif\";\n",
+    "      BWOFFSET(xx,yy) == (xx+yy) mod 2;\n",
+    "      ANIMATION_FUNCTION_DEFAULT == ( {r,c,i|r:1..dim & c:1..dim & i=(r+c) mod 2 }  );\n",
+    "      ANIMATION_FUNCTION == ( UNION(k).(k:1..n| {(blackc(k),blackr(k),2+BWOFFSET(blackc(k),blackr(k)))}) \\/\n",
+    "                              UNION(k).(k:1..n| {(whitec(k),whiter(k),6+BWOFFSET(whitec(k),whiter(k)))})    );\n",
+    "      ORDERED(c,r) == (!i.(i:1..(n-1) => c(i) <= c(i+1)) &\n",
+    "                       !i.(i:1..(n-1) => (c(i)=c(i+1) => r(i) < r(i+1))))\n",
+    "CONSTANTS n, dim, blackc, blackr, whitec, whiter\n",
+    "PROPERTIES\n",
+    " n = 8 & dim = 8 &\n",
+    " blackc : 1..n --> 1..dim &\n",
+    " whitec : 1..n --> 1..dim &\n",
+    " blackr : 1..n --> 1..dim &\n",
+    " whiter : 1..n --> 1..dim &\n",
+    " ORDERED(blackc,blackr) &  /* ensures proper ordering + that we do not place two queens on same square */\n",
+    " ORDERED(whitec,whiter) &\n",
+    "\n",
+    " !(i,j).(i:1..n & j:1..n => blackc(i) /= whitec(j)) &\n",
+    " !(i,j).(i:1..n & j:1..n => blackr(i) /= whiter(j)) &\n",
+    " !(i,j).(i:1..n & j:1..n => blackr(i) /= whiter(j) + (blackc(i)-whitec(j))) &\n",
+    " !(i,j).(i:1..n & j:1..n => blackr(i) /= whiter(j) - (blackc(i)-whitec(j))) &\n",
+    "\n",
+    "  whitec(1) < blackc(1) /* symmetry breaking */\n",
+    "END"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine constants set up using operation 0: $setup_constants()"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":constants"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine initialised using operation 1: $initialise_machine()"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":init"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<table style=\"font-family:monospace\"><tbody>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "</tbody></table>"
+      ],
+      "text/plain": [
+       "<Animation function visualisation>"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":show"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Setting up constants\n",
+    "\n",
+    "This machine is a great one to understand setting up various constants within jupyter notebook. \n",
+    "If you reload the machine (by pressing `SHIFT`+`ENTER` in the code cell with our machine code) you can change the constants for the queens to change their positions on the board.\n",
+    "\n",
+    "Try it out! Reload the machine and run the next cell. Then, initialise and visualise as ususal.\n",
+    "\n",
+    "You can change the collums of the queens with the constants `blackc`/`whitec` and the rows with the constants `blackr`/`whiter`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine constants set up using operation 0: $setup_constants()"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":constants blackc(2)=2 & blackr(2)=6"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine constants set up using operation 0: $setup_constants()"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":constants whitec(2)=4 & whiter(2)=4"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine initialised using operation 1: $initialise_machine()"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":init"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<table style=\"font-family:monospace\"><tbody>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "</tbody></table>"
+      ],
+      "text/plain": [
+       "<Animation function visualisation>"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":show"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Optimization\n",
+    "\n",
+    "One can obviously use the above model to try and manually find a maximal value of n for a given board size dim. Below, we have encoded this process as B constraints, by setting up the problem twice: once for the army size n and a second time for army size n+1. The second encoding is wrapped into a negated existential quantification.\n",
+    "\n",
+    "ProB solves this optimisation problem in about 660 seconds for a board size of 8. This is very competitive with the timings reported in the above mentioned constraint solving paper using new symmetry breaking techniques and much more low-level encoding on state of the art constraint solving libraries such as ILOG.\n",
+    "\n",
+    "To find out how long our jupyter notebook kernel needs to run this, we can use the command `:time`:\n",
+    "\n",
+    "Times and specs:\n",
+    "```\n",
+    "Acer TravelMate X349-G2-M, \n",
+    "8 GB RAM, \n",
+    "Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2.70 GHz Prozessor, \n",
+    "Windows 10 OS\n",
+    "\n",
+    "dim=5 --> optimum n=4 0.326799900 secs\n",
+    "dim=6 --> optimum n=5 0.954069900 secs\n",
+    "dim=7 --> optimum n=7 19.829867700 secs\n",
+    "dim=8 --> optimum n=9 658.281314000 secs\n",
+    "```\n",
+    "\n",
+    "If you want to check out the optimization for dim=5, dim=6, dim=8, you can do so by changing the constant in the `PROPERTIES` section of the machine code cell.\n",
+    "\n",
+    "*EDITOR'S NOTE* : 660 seconds are 11 minutes, and that is why we only recomment to work with dim=5, dim=6 and dim=7 for the purposes of this notebook. However, if you really want to try out dim=8... You know how to."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Loaded machine: JustQueens_FindOptimal_CBC"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "::load\n",
+    "MACHINE JustQueens_FindOptimal_CBC\n",
+    "DEFINITIONS\n",
+    "      SET_PREF_TIME_OUT == 1000000;\n",
+    "      SET_PREF_MAX_INITIALISATIONS == 1;\n",
+    "      ANIMATION_IMG0 == \"images/ChessPieces/Chess_emptyl45.gif\";\n",
+    "      ANIMATION_IMG1 == \"images/ChessPieces/Chess_emptyd45.gif\";\n",
+    "      ANIMATION_IMG2 == \"images/ChessPieces/Chess_qdl45.gif\";\n",
+    "      ANIMATION_IMG3 == \"images/ChessPieces/Chess_qdd45.gif\";\n",
+    "      ANIMATION_IMG6 == \"images/ChessPieces/Chess_qll45.gif\";\n",
+    "      ANIMATION_IMG7 == \"images/ChessPieces/Chess_qld45.gif\";\n",
+    "      BWOFFSET(xx,yy) == (xx+yy) mod 2;\n",
+    "      ANIMATION_FUNCTION_DEFAULT == ( {r,c,i|r:1..dim & c:1..dim & i=(r+c) mod 2 }  );\n",
+    "      ANIMATION_FUNCTION == ( UNION(k).(k:1..n| {(blackc(k),blackr(k),2+BWOFFSET(blackc(k),blackr(k)))}) \\/\n",
+    "                              UNION(k).(k:1..n| {(whitec(k),whiter(k),6+BWOFFSET(whitec(k),whiter(k)))})    );\n",
+    "      ORDERED(c,r,nn) == (!i.(i:1..(nn-1) => c(i) <= c(i+1)) &\n",
+    "                          !i.(i:1..(nn-1) => (c(i)=c(i+1) => r(i) < r(i+1))));\n",
+    "      CHECK_TYPE(bc,br,wc,wr,nn) == (\n",
+    "             bc : 1..nn --> 1..dim &\n",
+    "             wc : 1..nn --> 1..dim &\n",
+    "             br : 1..nn --> 1..dim &\n",
+    "             wr : 1..nn --> 1..dim );\n",
+    "      CHECK_DIAGONALS(bc,br,wc,wr,nn) == (\n",
+    "             !(i,j).(i:1..nn & j:1..nn => bc(i) /= wc(j)) &\n",
+    "             !(i,j).(i:1..nn & j:1..nn => br(i) /= wr(j)) &\n",
+    "             !(i,j).(i:1..nn & j:1..nn => br(i) /= wr(j) + (bc(i)-wc(j))) &\n",
+    "             !(i,j).(i:1..nn & j:1..nn => br(i) /= wr(j) - (bc(i)-wc(j)))\n",
+    "           )\n",
+    "CONSTANTS n, dim, blackc, blackr, whitec, whiter\n",
+    "PROPERTIES\n",
+    " n : 1..16 & dim = 7 & // <------------------------------------YOU CAN CHANGE dim HERE \n",
+    "\n",
+    " CHECK_TYPE(blackc, blackr, whitec, whiter, n) &\n",
+    " ORDERED(blackc,blackr,n) &  /* ensures proper ordering + that we do not place two queens on same square */\n",
+    " ORDERED(whitec,whiter,n) &\n",
+    " CHECK_DIAGONALS(blackc, blackr, whitec, whiter, n) &\n",
+    " whitec(1) < blackc(1) /* symmetry breaking */ &\n",
+    "\n",
+    " /* Repeat constraints for n+1 and assert that it cannot be solved */\n",
+    "  not( #(n1,blackc1, blackr1, whitec1, whiter1).\n",
+    "        (n1=n+1 & /* n1:2..17 & */\n",
+    "         CHECK_TYPE(blackc1, blackr1, whitec1, whiter1, n1) &\n",
+    "         ORDERED(blackc1,blackr1,n1) &  /* ensures proper ordering + that we do not place two queens on same square */\n",
+    "         ORDERED(whitec1,whiter1,n1) &\n",
+    "         CHECK_DIAGONALS(blackc1, blackr1, whitec1, whiter1, n1) &\n",
+    "         whitec1(1) < blackc1(1) /* symmetry breaking */\n",
+    "      )\n",
+    "     )\n",
+    "END"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "Execution time: 17.606007400 seconds"
+      ],
+      "text/plain": [
+       "Execution time: 17.606007400 seconds"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "Machine constants set up using operation 0: $setup_constants()"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":time :constants"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Machine initialised using operation 1: $initialise_machine()"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":init"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "$7$"
+      ],
+      "text/plain": [
+       "7"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "<table style=\"font-family:monospace\"><tbody>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"7\" src=\"images/ChessPieces/Chess_qld45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"6\" src=\"images/ChessPieces/Chess_qll45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "</tr>\n",
+       "<tr>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"1\" src=\"images/ChessPieces/Chess_emptyd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"0\" src=\"images/ChessPieces/Chess_emptyl45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"3\" src=\"images/ChessPieces/Chess_qdd45.gif\"/></td>\n",
+       "<td style=\"padding:0px\"><img alt=\"2\" src=\"images/ChessPieces/Chess_qdl45.gif\"/></td>\n",
+       "</tr>\n",
+       "</tbody></table>"
+      ],
+      "text/plain": [
+       "<Animation function visualisation>"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":show"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "Enter a B expression or predicate to evaluate it. To load a B machine, enter its source code directly, or use `:load` to load an external machine file.\n",
+       "\n",
+       "You can also use any of the following commands. For more help on a particular command, run `:help commandname`.\n",
+       "\n",
+       "## Evaluation\n",
+       "\n",
+       "* `:eval` - Evaluate a formula and display the result.\n",
+       "* `:solve` - Solve a predicate with the specified solver.\n",
+       "* `:table` - Display an expression as a table.\n",
+       "* `:type` - Display the static type of a formula.\n",
+       "* `:prettyprint` - Pretty-print a predicate.\n",
+       "* `:let` - Evaluate an expression and store it in a local variable.\n",
+       "* `:unlet` - Remove a local variable.\n",
+       "* `:assert` - Ensure that the predicate is true, and show an error otherwise.\n",
+       "\n",
+       "## Animation\n",
+       "\n",
+       "* `::load` - Load a B machine from the given source code.\n",
+       "* `:load` - Load a machine from a file.\n",
+       "* `:constants` - Set up the current machine's constants.\n",
+       "* `:init` - Initialise the current machine with the specified predicate\n",
+       "* `:exec` - Execute an operation.\n",
+       "* `:browse` - Show information about the current state.\n",
+       "* `:trace` - Display all states and executed operations in the current trace.\n",
+       "* `:goto` - Go to the state with the specified index in the current trace.\n",
+       "* `:find` - Try to find a state for which the given predicate is true (in addition to the machine's invariant).\n",
+       "\n",
+       "## Visualisation\n",
+       "\n",
+       "* `:show` - Show the machine's animation function visualisation for the current state.\n",
+       "* `:dot` - Execute and show a dot visualisation.\n",
+       "\n",
+       "## Verification\n",
+       "\n",
+       "* `:check` - Check the machine's properties, invariant, or assertions in the current state.\n",
+       "* `:modelcheck` - Run the ProB model checker on the current model.\n",
+       "\n",
+       "## Other\n",
+       "\n",
+       "* `::render` - Render some content with the specified MIME type.\n",
+       "* `:bsymb` - Load all bsymb.sty command definitions, so that they can be used in $\\LaTeX$ formulas in Markdown cells.\n",
+       "* `:groovy` - Evaluate the given Groovy expression.\n",
+       "* `:help` - Display help for a specific command, or general help about the REPL.\n",
+       "* `:pref` - View or change the value of one or more preferences.\n",
+       "* `:stats` - Show statistics about the state space.\n",
+       "* `:time` - Execute the given command and measure how long it takes to execute.\n",
+       "* `:version` - Display version info about the ProB CLI and ProB 2.\n"
+      ],
+      "text/plain": [
+       "Enter a B expression or predicate to evaluate it. To load a B machine, enter its source code directly, or use :load to load an external machine file.\n",
+       "You can also use any of the following commands. For more help on a particular command, run :help commandname.\n",
+       "\n",
+       "Evaluation:\n",
+       ":eval - Evaluate a formula and display the result.\n",
+       ":solve - Solve a predicate with the specified solver.\n",
+       ":table - Display an expression as a table.\n",
+       ":type - Display the static type of a formula.\n",
+       ":prettyprint - Pretty-print a predicate.\n",
+       ":let - Evaluate an expression and store it in a local variable.\n",
+       ":unlet - Remove a local variable.\n",
+       ":assert - Ensure that the predicate is true, and show an error otherwise.\n",
+       "\n",
+       "Animation:\n",
+       "::load - Load a B machine from the given source code.\n",
+       ":load - Load a machine from a file.\n",
+       ":constants - Set up the current machine's constants.\n",
+       ":init - Initialise the current machine with the specified predicate\n",
+       ":exec - Execute an operation.\n",
+       ":browse - Show information about the current state.\n",
+       ":trace - Display all states and executed operations in the current trace.\n",
+       ":goto - Go to the state with the specified index in the current trace.\n",
+       ":find - Try to find a state for which the given predicate is true (in addition to the machine's invariant).\n",
+       "\n",
+       "Visualisation:\n",
+       ":show - Show the machine's animation function visualisation for the current state.\n",
+       ":dot - Execute and show a dot visualisation.\n",
+       "\n",
+       "Verification:\n",
+       ":check - Check the machine's properties, invariant, or assertions in the current state.\n",
+       ":modelcheck - Run the ProB model checker on the current model.\n",
+       "\n",
+       "Other:\n",
+       "::render - Render some content with the specified MIME type.\n",
+       ":bsymb - Load all bsymb.sty command definitions, so that they can be used in $\\LaTeX$ formulas in Markdown cells.\n",
+       ":groovy - Evaluate the given Groovy expression.\n",
+       ":help - Display help for a specific command, or general help about the REPL.\n",
+       ":pref - View or change the value of one or more preferences.\n",
+       ":stats - Show statistics about the state space.\n",
+       ":time - Execute the given command and measure how long it takes to execute.\n",
+       ":version - Display version info about the ProB CLI and ProB 2.\n"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    ":help"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "ProB 2",
+   "language": "prob",
+   "name": "prob2"
+  },
+  "language_info": {
+   "codemirror_mode": "prob2_jupyter_repl",
+   "file_extension": ".prob",
+   "mimetype": "text/x-prob2-jupyter-repl",
+   "name": "prob"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}