<div dir="ltr"><p style="margin-bottom:1em">I’m trying to do “equational” reasoning on types where the equivalence is a flavor of isomorphism (<code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre">_↔_</code> from <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">Function.Bundles</span></code>, specializing <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">Inverse</span></code> from that module). The types of <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre">begin_</code> in <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">Relation.Binary.PropositionalEquality</span></code> and <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre">sym</code> in <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">IsEquivalence</span></code>, however, appear to disallow changing type during the chain of reasoning; i.e., for proving <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">A</span> <span class="gmail-fu" style="color:rgb(6,40,126)">~</span> <span class="gmail-dt" style="color:rgb(144,32,0)">B</span></code> they require that <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">A</span></code> and <code class="gmail-sourceCode gmail-haskell" style="font-size:16.91px;background:transparent;border:none;overflow:visible;font-family:Menlo,"Lucida Console",Monaco,monospace;white-space:pre"><span class="gmail-dt" style="color:rgb(144,32,0)">B</span></code> have the same type. For many equivalence relations, this restriction is fine, but isomorphisms often relate types having different levels, which is the problem I’m encountering. Is there a known workaround?</p><p style="margin-bottom:1em">Thanks, - Conal</p></div>