Update SPA article on Lattices with new math delimiters
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
2547b53aa2
commit
291a1f0178
|
@ -198,7 +198,7 @@ but what we're looking for is something similar. Instead, we simply require a
|
||||||
similar function for our signs. We call this function "[least upper bound](https://en.wikipedia.org/wiki/Least-upper-bound_property)",
|
similar function for our signs. We call this function "[least upper bound](https://en.wikipedia.org/wiki/Least-upper-bound_property)",
|
||||||
since it is the "least (most specific)
|
since it is the "least (most specific)
|
||||||
element that's greater (less specific) than either `s1` or `s2`". Conventionally,
|
element that's greater (less specific) than either `s1` or `s2`". Conventionally,
|
||||||
this function is written as \\(a \\sqcup b\\) (or in our case, \\(s_1 \\sqcup s_2\\)).
|
this function is written as \(a \sqcup b\) (or in our case, \(s_1 \sqcup s_2\)).
|
||||||
We can define it for our signs so far using the following [Cayley table](https://en.wikipedia.org/wiki/Cayley_table).
|
We can define it for our signs so far using the following [Cayley table](https://en.wikipedia.org/wiki/Cayley_table).
|
||||||
|
|
||||||
{{< latex >}}
|
{{< latex >}}
|
||||||
|
@ -212,7 +212,7 @@ We can define it for our signs so far using the following [Cayley table](https:/
|
||||||
\end{array}
|
\end{array}
|
||||||
{{< /latex >}}
|
{{< /latex >}}
|
||||||
|
|
||||||
By using the above table, we can see that \\((+\ \\sqcup\ -)\ =\ ?\\) (aka `unknown`).
|
By using the above table, we can see that \((+\ \sqcup\ -)\ =\ ?\) (aka `unknown`).
|
||||||
This is correct; given the four signs we're working with, that's the most we can say.
|
This is correct; given the four signs we're working with, that's the most we can say.
|
||||||
Let's explore the analogy to the `max` function a little bit more, by observing
|
Let's explore the analogy to the `max` function a little bit more, by observing
|
||||||
that this function has certain properties:
|
that this function has certain properties:
|
||||||
|
@ -220,18 +220,18 @@ that this function has certain properties:
|
||||||
* `max(a, a) = a`. The maximum of one number is just that number.
|
* `max(a, a) = a`. The maximum of one number is just that number.
|
||||||
Mathematically, this property is called _idempotence_. Note that
|
Mathematically, this property is called _idempotence_. Note that
|
||||||
by inspecting the diagonal of the above table, we can confirm that our
|
by inspecting the diagonal of the above table, we can confirm that our
|
||||||
\\((\\sqcup)\\) function is idempotent.
|
\((\sqcup)\) function is idempotent.
|
||||||
* `max(a, b) = max(b, a)`. If you're taking the maximum of two numbers,
|
* `max(a, b) = max(b, a)`. If you're taking the maximum of two numbers,
|
||||||
it doesn't matter which one you consider first. This property is called
|
it doesn't matter which one you consider first. This property is called
|
||||||
_commutativity_. Note that if you mirror the table along the diagonal,
|
_commutativity_. Note that if you mirror the table along the diagonal,
|
||||||
it doesn't change; this shows that our \\((\\sqcup)\\) function is
|
it doesn't change; this shows that our \((\sqcup)\) function is
|
||||||
commutative.
|
commutative.
|
||||||
* `max(a, max(b, c)) = max(max(a, b), c)`. When you have three numbers,
|
* `max(a, max(b, c)) = max(max(a, b), c)`. When you have three numbers,
|
||||||
and you're determining the maximum value, it doesn't matter which pair of
|
and you're determining the maximum value, it doesn't matter which pair of
|
||||||
numbers you compare first. This property is called _associativity_. You
|
numbers you compare first. This property is called _associativity_. You
|
||||||
can use the table above to verify the \\((\\sqcup)\\) is associative, too.
|
can use the table above to verify the \((\sqcup)\) is associative, too.
|
||||||
|
|
||||||
A set that has a binary operation (like `max` or \\((\\sqcup)\\)) that
|
A set that has a binary operation (like `max` or \((\sqcup)\)) that
|
||||||
satisfies the above properties is called a [semilattice](https://en.wikipedia.org/wiki/Semilattice). In Agda, we can write this definition roughly as follows:
|
satisfies the above properties is called a [semilattice](https://en.wikipedia.org/wiki/Semilattice). In Agda, we can write this definition roughly as follows:
|
||||||
|
|
||||||
```Agda
|
```Agda
|
||||||
|
@ -260,10 +260,10 @@ and the "least upper bound" function can be constructed from one another.
|
||||||
As it turns out, the `min` function has very similar properties to `max`:
|
As it turns out, the `min` function has very similar properties to `max`:
|
||||||
it's idempotent, commutative, and associative. For a partial order like
|
it's idempotent, commutative, and associative. For a partial order like
|
||||||
ours, the analog to `min` is "greatest lower bound", or "the largest value
|
ours, the analog to `min` is "greatest lower bound", or "the largest value
|
||||||
that's smaller than both inputs". Such a function is denoted as \\(a\\sqcap b\\).
|
that's smaller than both inputs". Such a function is denoted as \(a\sqcap b\).
|
||||||
As for what it means, where \\(s_1 \\sqcup s_2\\) means "combine two signs where
|
As for what it means, where \(s_1 \sqcup s_2\) means "combine two signs where
|
||||||
you don't know which one will be used" (like in an `if`/`else`),
|
you don't know which one will be used" (like in an `if`/`else`),
|
||||||
\\(s_1 \\sqcap s_2\\) means "combine two signs where you know
|
\(s_1 \sqcap s_2\) means "combine two signs where you know
|
||||||
{{< sidenote "right" "or-join-note" "both of them to be true" -7 >}}
|
{{< sidenote "right" "or-join-note" "both of them to be true" -7 >}}
|
||||||
If you're familiar with <a href="https://en.wikipedia.org/wiki/Boolean_algebra">
|
If you're familiar with <a href="https://en.wikipedia.org/wiki/Boolean_algebra">
|
||||||
Boolean algebra</a>, this might look a little bit familiar to you. In fact,
|
Boolean algebra</a>, this might look a little bit familiar to you. In fact,
|
||||||
|
@ -277,7 +277,7 @@ In fact, booleans with \((\lor)\) and \((\land)\) satisfy the semilattice
|
||||||
laws we've been discussing, and together form a lattice (to which I'm building
|
laws we've been discussing, and together form a lattice (to which I'm building
|
||||||
to in the main body of the text). The same is true for the set union and
|
to in the main body of the text). The same is true for the set union and
|
||||||
intersection operations, \((\cup)\) and \((\cap)\).
|
intersection operations, \((\cup)\) and \((\cap)\).
|
||||||
{{< /sidenote >}}". For example, \\((+\ \\sqcap\ ?)\ =\ +\\), because a variable
|
{{< /sidenote >}}". For example, \((+\ \sqcap\ ?)\ =\ +\), because a variable
|
||||||
that's both "any sign" and "positive" must be positive.
|
that's both "any sign" and "positive" must be positive.
|
||||||
|
|
||||||
There's just one hiccup: what's the greatest lower bound of `+` and `-`?
|
There's just one hiccup: what's the greatest lower bound of `+` and `-`?
|
||||||
|
@ -289,8 +289,8 @@ out that this "impossible" value is the least element of our set (we added
|
||||||
it to be the lower bound of `+` and co., which in turn are less than `unknown`).
|
it to be the lower bound of `+` and co., which in turn are less than `unknown`).
|
||||||
Similarly, `unknown` is the largest element of our set, since it's greater
|
Similarly, `unknown` is the largest element of our set, since it's greater
|
||||||
than `+` and co, and transitively greater than `impossible`. In mathematics,
|
than `+` and co, and transitively greater than `impossible`. In mathematics,
|
||||||
it's not uncommon to define the least element as \\(\\bot\\) (read "bottom"), and the
|
it's not uncommon to define the least element as \(\bot\) (read "bottom"), and the
|
||||||
greatest element as \\(\\top\\) (read "top"). With that in mind, the
|
greatest element as \(\top\) (read "top"). With that in mind, the
|
||||||
following are the updated Cayley tables for our operations.
|
following are the updated Cayley tables for our operations.
|
||||||
|
|
||||||
{{< latex >}}
|
{{< latex >}}
|
||||||
|
@ -338,7 +338,7 @@ In Agda, we can therefore write a lattice as follows:
|
||||||
### Concrete Example: Natural Numbers
|
### Concrete Example: Natural Numbers
|
||||||
|
|
||||||
Since we've been talking about `min` and `max` as motivators for properties
|
Since we've been talking about `min` and `max` as motivators for properties
|
||||||
of \\((\\sqcap)\\) and \\((\\sqcup)\\), it might not be all that surprising
|
of \((\sqcap)\) and \((\sqcup)\), it might not be all that surprising
|
||||||
that natural numbers form a lattice with `min` and `max` as the two binary
|
that natural numbers form a lattice with `min` and `max` as the two binary
|
||||||
operations. In fact, the Agda standard library writes `min` as `_⊓_` and
|
operations. In fact, the Agda standard library writes `min` as `_⊓_` and
|
||||||
`max` as `_⊔_`! We can make use of the already-proven properties of these
|
`max` as `_⊔_`! We can make use of the already-proven properties of these
|
||||||
|
|
Loading…
Reference in New Issue
Block a user