diff --git a/monoid-design.md b/monoid-design.md
index ec414b14d3d9b4979f3cf7acdf142838f6928236..6b8ed6678ba18ff5028545a54911d4c1fca50145 100644
--- a/monoid-design.md
+++ b/monoid-design.md
@@ -144,16 +144,16 @@ Problem: Given a list of numbers, compute their total.
 ## Monoid Identification
 
 *   Interpretation of input elements as actions:
-    *   …
+    *   An element `a` in the input is an instruction to "add `a` to the total".
 *   Combination of two actions:
-    *   …
+    *   If we add `a` and then add `b`, altogether we add `a + b`.
 *   Representation of actions:
-    *   …
+    *   We can represent any action by storing how much to add to the total.
 *   Identity element:
-    *   …
+    *   Solving `e + x = x + e = x` gives us `e = 0`.
 
 *   Monoid:
-    *   `A = (…, …, …)`
+    *   `A = (𝐑, +, 0)`
 
 --------------------------------------------------------------------------------
 
@@ -164,16 +164,16 @@ Problem: Given a list of numbers, compute their product.
 ## Monoid Identification
 
 *   Interpretation of input elements as actions:
-    *   …
+    *   An element `a` in the input is an instruction to "multiply the result by `a`".
 *   Combination of two actions:
-    *   …
+    *   If we multiply by `a` and then multiply by `b`, altogether we multiply by `ab`.
 *   Representation of actions:
-    *   …
+    *   We can represent any action by storing how much to multiply by.
 *   Identity element:
-    *   …
+    *   Solving `e ⋅ x = x ⋅ e = x` gives us `e = 1`.
 
 *   Monoid:
-    *   `A = (…, …, …)`
+    *   `A = (𝐑, ⋅, 1)`
 
 --------------------------------------------------------------------------------
 
@@ -184,16 +184,16 @@ Problem: Given a list of numbers, compute the minimum.
 ## Monoid Identification
 
 *   Interpretation of input elements as actions:
-    *   …
+    *   An element `a` in the input is an instruction to "ensure that the result is at most `a`".
 *   Combination of two actions:
-    *   …
+    *   If we make the result at most `a` and then at most `b`, altogether we make it at most `min(a, b)`.
 *   Representation of actions:
-    *   …
+    *   We can represent any action by storing the cap on the result.
 *   Identity element:
-    *   …
+    *   Solving `min(e, x) = min(x, e) = x` gives us `e = ∞`.
 
 *   Monoid:
-    *   `A = (…, …, …)`
+    *   `A = (𝐑 ∪ {∞}, min, ∞)`
 
 --------------------------------------------------------------------------------
 
@@ -212,22 +212,22 @@ As another way to look at the problem, if we know the average of a left-hand sid
 
 This is the same issue we saw in divide-and-conquer design: we must be asking the wrong question.
 
-If we ask for …, deferring …, then we can find a monoid.
+If we ask for a total and a count, deferring the division, then we can find a monoid.
 
 ## Monoid Identification
 
 *   Interpretation of input elements as actions:
-    *   …
+    *   An element `a` in the input is an instruction to "add `a` to the total and `1` to the count".
 *   Combination of two actions:
-    *   …
-    *   …
+    *   If we add `a` and then `c` to the total and `1` and then `1` to the count, altogether we add `a + c` to the total and `2` to the count.
+    *   More generally, if we add `a` and then `c` to the total and `b` and then `d` to the count, altogether we add `a + c` to the total and `b + d` to the count.
 *   Representation of actions:
-    *   …
+    *   We can represent any action by storing an amount to add to the total (a real number) and an amount to add to the count (a natural number).
 *   Identity element:
-    *   …
+    *   Solving `e ∙ x = x ∙ e = x` gives us `e = (0, 0)`.
 
 *   Monoid:
-    *   `A = (…, ∙, …)` where `(a, b) ∙ (c, d) = (…, …)`
+    *   `A = (𝐑 × 𝐍, ∙, (0, 0))` where `(a, b) ∙ (c, d) = (a + c, b + d)`
 
 --------------------------------------------------------------------------------