From 1514dac9f7ff360a5c0cc45018851dead5c618ed Mon Sep 17 00:00:00 2001
From: "Brady J. Garvin" <bgarvin@cse.unl.edu>
Date: Mon, 30 Oct 2023 11:48:05 -0500
Subject: [PATCH] Recorded work from Friday.

---
 monoid-design.md | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/monoid-design.md b/monoid-design.md
index 611274a..f5cf156 100644
--- a/monoid-design.md
+++ b/monoid-design.md
@@ -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 ensure that the result is at most `a` and then we ensure that the result is a most `b`, altogether we ensure that result is 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:
-    *   `M = (…, …, …)`
+    *   `M = (𝐑 ∪ {∞}, 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 sum and a count, deferring the division until the end, 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 add `1` the count".
 *   Combination of two actions:
-    *   …
-    *   …
+    *   If we add `a` to the total and `1` to the count and then we add `c` to the total and `1` to the count, altogether we add `a + c` to the total and `2` to the count.
+    *   If we add `a` to the total and `b` to the count and then we add `c` to the total and `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`, where `(a, b) ∙ (c, d) = (a + c, b + d)`, give us `e = (0, 0)`.
 
 *   Monoid:
-    *   `A = (…, ∙, …)` where `(a, b) ∙ (c, d) = (…, …)`
+    *   `A = (𝐑 × 𝐍, ∙, (0, 0))` where `(a, b) ∙ (c, d) = (a + c, b + d)`
 
 --------------------------------------------------------------------------------
 
@@ -236,14 +236,14 @@ If we ask for …, deferring …, then we can find a monoid.
 Problem: Given a string of parentheses, determine if the parentheses are balanced.
 
 *   Example of balanced parentheses: `()(())`
-*   Example of unbalanced parentheses: `…`
-*   Example of unbalanced parentheses with same number of each type: `…`
+*   Example of unbalanced parentheses: `(((`
+*   Example of unbalanced parentheses with same number of each type: `)(`
 
 ## Clues about the Monoid from an Iterative Design
 
 ```js
 function isBalanced(parentheses) {
-  let nesting = 0;
+  let nesting = 0; // ← result variable; looks like monoid (𝐙, +, 0)
   for (const character of parentheses) {
     if (character === '(') {
       ++nesting;
@@ -262,16 +262,16 @@ function isBalanced(parentheses) {
 
 *   Taking the submonoid generated by `(`:
     *   The identity is different than `(`, which is different than `((`, which is different than `(((`, etc.
-    *   So it seems like our monoid will need ….
+    *   So it seems like our monoid will need, as a factor, the number of open parentheses.
 
 *   Taking the submonoid generated by `)`:
     *   The identity is different than `)`, which is different than `))`, which is different than `)))`, etc.
-    *   So it seems like our monoid will need ….
+    *   So it seems like our monoid will need, as a factor, the number of close parentheses.
 
 ## Quotienting a Free Monoid by Relations
 
 *   The sequence `…` cancels to the identity.
-*   If we simplify any input by repeatedly removing occurrences of `()`, we eventually end up with a string of the form ….
+*   If we simplify any input by repeatedly removing occurrences of `…`, we eventually end up with a string of the form `…` where `…` is ….
 
 ## Parentheses Monoid
 
-- 
GitLab