diff --git a/xml/chapter3/section3/subsection5.xml b/xml/chapter3/section3/subsection5.xml
index ab5b57998..c20841f95 100755
--- a/xml/chapter3/section3/subsection5.xml
+++ b/xml/chapter3/section3/subsection5.xml
@@ -1561,6 +1561,53 @@ const answer = v_prod(v_sum("a", "b"), v_sum("c", "d"));
expression-oriented style in terms of the imperative implementation,
it is very difficult to do the converse.
+
+
+ make_connector
+ has_value
+ for_each_except
+ inform_about_value
+ multiplier_2
+ adder
+ constant
+
+// Solution provided by GitHub user clean99
+
+function cminus(x, y) {
+ const z = make_connector();
+ const u = make_connector();
+ const v = make_connector();
+ constant(-1, u);
+ multiplier(u, y, v);
+ adder(x, v, z);
+ return z;
+}
+
+function cmul(x, y) {
+ const z = make_connector();
+ multiplier(x, y, z);
+ return z;
+}
+
+function cdiv(x, y) {
+ const z = make_connector();
+ const u = make_connector();
+ const v = make_connector();
+ constant(1, v);
+ // y * u = 1 -> u = 1 / y
+ multiplier(y, u, v);
+ multiplier(x, u, z);
+ return z;
+}
+
+function cv(val) {
+ const x = make_connector();
+ constant(val, x);
+ return x;
+}
+
+
+
propagation of constraints