Skip to content

A C++ library for canonicalizing combinatorial objects with lightening speed

License

Notifications You must be signed in to change notification settings

tschijnmo/libcanon

Repository files navigation

Build Status

libcanon

Libcanon is a C++ library for canonicalizing combinatorial objects with lightening speed by full utilization of the isomorphism of the combinatorial objects.

In addition to being a fully-templated generic library for the canonicalization of any combinatorial objects, from its root in symbolic manipulation of tensorial quantities, libcanon has direct support for the canonicalization of strings and edge-labelled directed acyclic graphs (ELDAG).

Here a string over an alphabet is any sequence of elements in that alphabet. By giving any string and a group of allowed permutations, libcanon is able to get the lexicographically minimal form of the string by using only the allowed permutations.

ELDAGs are special kind of DAGs where each edge comes with an label such that the children of any node all has distinct labels. This structure is a specialization of common DAGs and is defined for the storage and manipulation mathematical expressions with non-commutative operations. For instance, to store the mathematical expression of a simple function call, f(1, 2), we can have an ELDAG with nodes for f, 1, and 2, an edge from f to 1 with label 0, and an edge from f to 2 with label 1. Then libcanon is able to give a unique canonical form for any ELDAG given the allowed permutations on each internal node. Canonicalization of normal directed and undirected graphs can also be reduced to ELDAG canonicalized. Actual direct support of plain graph canonicalization is to be implemented.

Libcanon is developed by Jinmo Zhao and Prof Gustavo E Scuseria at Rice University to be used in the symbolic tensorial algebra system drudge. It was supported as part of the Center for the Computational Design of Functional Layered Materials, an Energy Frontier Research Center funded by the U.S. Department of Energy, Office of Science, Basic Energy Sciences under Award DE-SC0012575.

About

A C++ library for canonicalizing combinatorial objects with lightening speed

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages