Write a bit more, enable support for paragraph links

Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent 4938cdaecd
commit ee8b1f5dc0
3 changed files with 46 additions and 3 deletions

4 config.toml View File

 @ -33,6 +33,10 @@ defaultContentLanguage = 'en'  [markup.goldmark.extensions.passthrough.delimiters]  block = [['$', '$'], ['$$', '$$']]  inline = [['$$', '$$']]  [markup.goldmark.parser]  [markup.goldmark.parser.attribute]  block = true  title = true   [languages]  [languages.en]

1 content/blog/01_spa_agda_lattices.md View File

 @ -249,6 +249,7 @@ It turns out to be convenient, however, to not require definitional equality would force us to consider lists with the same elements but a different order to be unequal. Instead, we parameterize our definition of IsSemilattice by a binary relation _≈_, which we ask to be an [equivalence relation](https://en.wikipedia.org/wiki/Equivalence_relation). {#definitional-equality}   {{< codelines "Agda" "agda-spa/Lattice.agda" 23 39 >}}  

44 content/blog/02_spa_agda_combining_lattices.md View File

 @ -52,10 +52,13 @@ for both types:   Elements of $$L_1 \times L_2$$ are in the form $$(l_1, l_2)$$, where $$l_1 \in L_1$$ and $$l_2 \in L_2$$. The first thing we can get out of the way is define what it means for two such elements to be equal. That's easy enough: we have an equality predicate _≈₁_ that checks if an element way is define what it means for two such elements to be equal. Recall that we opted for a [custom equivalence relation]({{< relref "01_spa_agda_lattices#definitional-equality" >}}) instead of definitional equality to allow similar elements to be considered equal; we'll have to define a similar relation for our new product lattice. That's easy enough: we have an equality predicate _≈₁_ that checks if an element of $$L_1$$ is equal to another, and we have _≈₂_ that does the same for $$L_2$$. It's reasonably to say that _pairs_ of elements are equal if their respective It's reasonable to say that _pairs_ of elements are equal if their respective first and second elements are equal:   {{< latex >}} @ -65,3 +68,38 @@ first and second elements are equal: In Agda:   {{< codelines "Agda" "agda-spa/Lattice/Prod.agda" 39 40 >}}   Verifying that this relation has the properties of an equivalence relation boils down to the fact that _≈₁_ and _≈₂_ are themselves equivalence relations.   {{< codelines "Agda" "agda-spa/Lattice/Prod.agda" 42 48 >}}   In fact, defining $$(\sqcup)$$ and $$(\sqcap)$$ by simply applying the corresponding operators from $$L_1$$ and $$L_2$$ seems quite natural as well.   {{< latex >}} (l_1, l_2) \sqcup (j_1, j_2) \triangleq (l_1 \sqcup_1 j_1, l_2 \sqcup_2 j_2) \\ (l_1, l_2) \sqcap (j_1, j_2) \triangleq (l_1 \sqcap_1 j_1, l_2 \sqcap_2 j_2) {{< /latex >}}   In Agda:   {{< codelines "Agda" "agda-spa/Lattice/Prod.agda" 50 54 >}}   All that's left is to prove the various (semi)lattice properties. Intuitively, we can see that since the "combined" operator _≈_ just independently applies the element operators _≈₁_ and _≈₂_, as long as they are idempotent, commutative, and associative, so is the "combined" operator itself. Moreover, the proofs that _⊔_ and _⊓_ form semilattices are identical up to replacing $$(\sqcup)$$ with $$(\sqcap)$$. Thus, in Agda, we can write the code once, parameterizing it by the binary operators involved (and proofs that these operators obey the semilattice laws).   {{< codelines "Agda" "agda-spa/Lattice/Prod.agda" 56 82 >}}   Similarly to the semilattice properties, proving lattice properties boils down to applying the lattice properties of $$L_1$$ and $$L_2$$ to individual components.   {{< codelines "Agda" "agda-spa/Lattice/Prod.agda" 84 96 >}}