2
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@gamingonlinux" class="u-url mention">@<span>gamingonlinux</span></a></span> But why would you even want to do this? 🤔</p>
<p>Just learned about this recent case where a transgender person in Karnataka, India successfully challenged the Registrar to accommodate name and gender changes (not possible by prior law). Progress that I couldn&#39;t have imagined decades ago.<br /><a href="https://clpr.org.in/litigation/ms-x-v-state-of-karnataka/" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">clpr.org.in/litigation/ms-x-v-</span><span class="invisible">state-of-karnataka/</span></a></p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> <span class="h-card" translate="no"><a href="https://types.pl/@lenary" class="u-url mention">@<span>lenary</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@unlambda" class="u-url mention">@<span>unlambda</span></a></span> I would just directly verify your rewrite language! then you can verify things like preconditions that aren&#39;t available once you&#39;re extracting from actual code</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@regehr" class="u-url mention">@<span>regehr</span></a></span> I only really understand Fourier Motzkin elimination for LP (<a href="https://en.m.wikipedia.org/wiki/Fourier–Motzkin_elimination" target="_blank" rel="nofollow noopener noreferrer" translate="no"><span class="invisible">https://</span><span class="ellipsis">en.m.wikipedia.org/wiki/Fourie</span><span class="invisible">r–Motzkin_elimination</span></a>). Maybe that can help you with the general case.</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@regehr" class="u-url mention">@<span>regehr</span></a></span> actually it&#39;s interesting to me that you say it doesn&#39;t matter in practice, do you know why? also, can you explain how quantifier elimination works?</p>
<p><span class="h-card" translate="no"><a href="https://types.pl/@lenary" class="u-url mention">@<span>lenary</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@regehr" class="u-url mention">@<span>regehr</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@unlambda" class="u-url mention">@<span>unlambda</span></a></span> I think that is just a DFS, yeah</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@regehr" class="u-url mention">@<span>regehr</span></a></span> <span class="h-card" translate="no"><a href="https://types.pl/@lenary" class="u-url mention">@<span>lenary</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@unlambda" class="u-url mention">@<span>unlambda</span></a></span> oh, this is really good to know, because my input space can be easily hundreds of bits and in the most general case any subset of them can be undef</p><p>i wonder if i should not feed the entire netlist to the solver but rather extract just the little bits my rewriting engine modifies (by doing RAUW) and then seeing if i can trace both the original and the new instruction for each RAUW to a common subset of bits...</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> <span class="h-card" translate="no"><a href="https://types.pl/@lenary" class="u-url mention">@<span>lenary</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@unlambda" class="u-url mention">@<span>unlambda</span></a></span> inputs can be partially undef. so, like, we might get all odd numbers or something. this means that the input space for a 64 bit variable isn&#39;t 2^64 but rather 2^2^64. the resulting queries are effectively impossible to solve without good quantifier elimination, which Z3 doesn&#39;t seem to have.</p><p>in this case, Alive2 simply cuts a corner, it does not reason about the full 2^2^N, or nothing would ever get solved. this doesn&#39;t seem to matter much in practice.</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> <span class="h-card" translate="no"><a href="https://types.pl/@lenary" class="u-url mention">@<span>lenary</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@unlambda" class="u-url mention">@<span>unlambda</span></a></span> ok now let me try to do undef.</p><p>on the source side, undef can yield any legal value and you need a \forall to model that. </p><p>on the target side, the rewrite is valid if any legal value makes it work, so there you need an \exists. </p><p>then there&#39;s one more wrinkle....</p>