summaryrefslogtreecommitdiffstats
path: root/content/zettel/2e1c7.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/zettel/2e1c7.md')
-rw-r--r--content/zettel/2e1c7.md40
1 files changed, 40 insertions, 0 deletions
diff --git a/content/zettel/2e1c7.md b/content/zettel/2e1c7.md
new file mode 100644
index 0000000..eea31fb
--- /dev/null
+++ b/content/zettel/2e1c7.md
@@ -0,0 +1,40 @@
++++
+title = "Hashing symbolic expressions"
+author = "Yann Herklotz"
+tags = []
+categories = []
+backlinks = ["3d2b1", "2e1c6"]
+forwardlinks = ["2e1c6a", "3c3c3"]
+zettelid = "2e1c7"
++++
+
+We want to be able to transform symbolic expressions into a
+representation that can be passed to the SAT solver. For this, we need
+to turn two different symbolic expressions, that are structurally equal,
+into the same value. Using IDs from hash-consing is maybe not the best
+solution for this, because one would need to add axioms to Coq to be
+able to access the actual IDs of the hashes. These are needed to do the
+fundamental comparison.
+
+In addition to that, it might be necessary to be able to reify the IDs
+back into expressions, although this is maybe not the most important,
+just might be a function that is needed to show the uniqueness of the
+outputs, and the injectivity of the function.
+
+The first idea would be uniquely identify the constructors with an ID,
+and then recursively translate the IDs of the other expressions as well.
+However, these lists should then be translated to a unique value to be
+used in the SAT solver. The easiest way to do that would be to add them
+all up as power of twos, but that might result in IDs that are much too
+large.
+
+Using hash-consing with the use of a map and pointers to the value, that
+would make things easier, but as stated earlier, actually accessing the
+value of the map requires some axioms, so it would be nice to not use
+them directly, but to maybe only use them as an optimisations, and a
+back-up way to generate the ids.
+
+A solution to this might be ([\#2e1c6a] or [\#3c3c3]).
+
+ [\#2e1c6a]: /zettel/2e1c6a
+ [\#3c3c3]: /zettel/3c3c3