@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 `μ`?

@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 `μ`?