                 (inv : (A ‚Üí A)) ‚Ü¶ (invAxiom : ‚àè(w : A){ eq(A)(m(inv(w))(w))(e) }) ‚Ü¶ assoc)(gp)
                                            )
</code></pre>
<p>Note that the type of the semigroup <code>mk</code> is:</p>
<pre><code class="language-scala">@ parser.defnMap(Name(&quot;semigroup&quot;, &quot;mk&quot;))(A).typ
res26: Typ[U] = ‚àè($f : (A ‚Üí (A ‚Üí A))){ (‚àè($g : A){ ‚àè($h : A){ ‚àè($i : A){ eq(A)($f($f($g)($h))($i))($f($g)($f($h)($i))) } } } ‚Ü