On Oct 11, 2007, at 4:33 PM, apfelmus wrote:
...

So, the idea is to use a "local gödel numbering" and uniquely number the and only the trees that are actually constructed (no collisions, but few in numbers). In other words, every new tree created gets the gödel number size collection + 1 and we can simply use

  type GödelNumber = Word32

assuming that no more than 4G of trees will ever be constructed. For fast hash-consing, the collection itself is a (generalized) trie

  type Collection  = ExpF GödelNumber ~~> Maybe GödelNumber

mapping each new top of a tree (constructor + gödel numbers for already known subtrees) to either Just its gödel number or Nothing when it's not in the collection yet.

With this, CSE becomes a catamorphism that allocates new gödel numbers if necessary
...
CSE in the sense that all common subexpressions now have the same gödel number.

Of course, the drawback compared to "free-form" fingerprinting is that the fingerprinting and the collection now depend on each other. But for CSE, we have to carry the collection around anyway.


I don't know any references for that method since I came up with it myself and haven't searched around yet. Any pointers?

Actually, the paper that Lauri cited in his message mentions essentially this technique; this is equivalent to the permutation T() that they impose when fingerprinting a DAG. That citation again:
    http://citeseer.ist.psu.edu/broder93some.html

But it's generally pretty well known.

-Jan



_______________________________________________
Haskell mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to