<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Aug 22, 2014 at 12:11 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="">On Fri, Aug 22, 2014 at 11:14 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">This can be generalized:<br>
<br>
`(X | (Y ^ Z)) ^ ((X ^ Z) ^ Y)` -> `X & (Y ^ Z)`</blockquote><div><br></div></div><div>Is matching that really the right approach? I would (perhaps naively) think we should instead CSE that to</div><div><br></div>
<div>  (X | A) ^ X ^ A   (with A = Y ^ Z)<br></div></div></div></div></blockquote><div><br></div><div>We don't manage to CSE the Y ^ Z op, which is why I proposed the more general form.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>
</div><div><br></div><div>... and we should be able to perform these more primitive transformations:</div><div><br></div><div> (X | A) ^ X -> ~X & A</div><div> (~X & A) ^ A -> X & A</div><div><br></div>
<div>
... which together reduce your expression to X & (Y ^ Z). Perhaps one of those takes us further from canonical form, though. What are the rules for canonicity here?</div></div></div></div>
</blockquote></div><br></div></div>