diff --git a/doc/userdoc.org b/doc/userdoc.org
index d2abb3de63b7e94872f0fd35ad6d73515701ce5d..e05ae27300df10a61b6d6aa7074111e9d7865396 100644
--- a/doc/userdoc.org
+++ b/doc/userdoc.org
@@ -1422,8 +1422,123 @@ they follow a few rules.
   #+end_src
 
 - Shift operators ~<<~ and ~>>~ are not used to define binary operators
-  between two basic types
-- Arithmetic operators are defined
+  between two basic types.
+
+- Arithmetic operators (~+~, ~-~, ~*~ and ~/~) are defined for a set of
+  combinations of basic types. We classify them by their returned
+  types.
+
+  - Their is no arithmetic operation that returns a boolean ~B~.
+
+  - Operators that return a natural integer ~N~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall \mathbb{S}_1, \mathbb{S}_2 \in \{\mathbb{B},\mathbb{N}\},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{N}\\
+            \mathtt{*}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{N}\\
+            \mathtt{/}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{N}
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
+    Observe that ~-~ is *not* in the list.
+
+  - Operators that return an integer ~Z~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall \mathbb{S}_1, \mathbb{S}_2 \in \{\mathbb{B},\mathbb{N},\mathbb{Z}\},
+        \mbox{ such that }\mathbb{S}_1 = \mathbb{Z}\mbox{ or }\mathbb{S}_2 = \mathbb{Z},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{Z}\\
+            \mathtt{-}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{Z}\\
+            \mathtt{*}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{Z}\\
+            \mathtt{/}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{Z}
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
+    Finally the following  operator is also defined
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \mathtt{-}: \mathbb{N} \times \mathbb{N} \to \mathbb{Z}
+      \end{equation*}
+    #+end_src
+    The difference of two natural integers returns a /signed/ integer.
+
+  - Operators that return a real ~R~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall \mathbb{S}_1, \mathbb{S}_2 \in \{\mathbb{B},\mathbb{N},\mathbb{Z},\mathbb{R}\},
+        \mbox{ such that }\mathbb{S}_1 = \mathbb{R}\mbox{ or }\mathbb{S}_2 = \mathbb{R},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{R}\\
+            \mathtt{-}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{R}\\
+            \mathtt{*}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{R}\\
+            \mathtt{/}:& \mathbb{S}_1 \times \mathbb{S}_2 \to \mathbb{R}
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
+
+  - Operators that return a small vector ~R^d~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall d \in\{1,2,3\},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{R}^d \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{-}:& \mathbb{R}^d \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{*}:& \mathbb{B} \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{*}:& \mathbb{N} \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{*}:& \mathbb{Z} \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{*}:& \mathbb{R} \times \mathbb{R}^d \to \mathbb{R}^d\\
+            \mathtt{*}:& \mathbb{R}^{d\times d} \times \mathbb{R}^d \to \mathbb{R}^d
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
+
+  - Operators that return a small matrix ~R^dxd~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall d \in\{1,2,3\},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{R}^{d\times d} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{-}:& \mathbb{R}^{d\times d} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{*}:& \mathbb{B} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{*}:& \mathbb{N} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{*}:& \mathbb{Z} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{*}:& \mathbb{R} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}\\
+            \mathtt{*}:& \mathbb{R}^{d\times d} \times \mathbb{R}^{d\times d} \to \mathbb{R}^{d\times d}
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
+
+  - Operators that return a ~string~.
+    #+begin_src latex :results drawer :exports results
+      \begin{equation*}
+        \forall \mathbb{S} \in \{\mathbb{B},\mathbb{N},\mathbb{Z},\mathbb{R}, \mathbb{R}^1,  \mathbb{R}^2,  \mathbb{R}^3, \mathbb{R}^{1\times1}, \mathbb{R}^{2\times2}, \mathbb{R}^{3\times3}\},
+        \quad
+        \left|
+          \begin{array}{rl}
+            \mathtt{+}:& \mathbb{S} \times \mathtt{string} \to \mathtt{string}\\
+            \mathtt{+}:& \mathtt{string} \times \mathbb{S} \to \mathtt{string}\\
+            \mathtt{+}:& \mathtt{string} \times \mathtt{string}  \to \mathtt{string}
+          \end{array}
+        \right.
+      \end{equation*}
+    #+end_src
 
 *** TODO High-level types<<high-level-types>>