@Juan : Excellent job! Thank you so much for this!

@Keith : The way I would model a preorder is with a function like (≤) :: a -> a -> Bool that obeys transitivity. I might use [QuickCheck](https://hackage.haskell.org/package/QuickCheck) to enforce the laws it should obey in a unit test. I can't remember seeing someone do a supremum or infimum, but then again I'm just an acolyte at this stuff.

There is a related construction I've seen, though.

I've alluded to in this thread and elsewhere that for any \$$\bigwedge\$$-complete semi-lattice \$$(L,\leq_L, \bigwedge)\$$ and monotone function \$$f : L \to L\$$, then we can define:

$$\mu f := \bigwedge \\{x\ :\ f(x) \leq_L x \\}$$

and \$$\mu f\$$ is guaranteed to always exist.

We can think of μ :: forall a. (a -> a) -> a as a higher order function.

**Puzzle 5**: How do you write μ in Haskell?

(Hint: (μ (\f n -> if (n==0) then 1 else n * f (n-1)) 5) == 120 ;-))

**Puzzle 6**: What popular technologist news website is named after an alternate name given to μ?