Inets-isomorphism - утилита командной строки (CLI) на Haskell для поиска точного графового изоморфизма. Реализует алгоритм структурного сопоставления графов с отсечением неперспективных ветвей (бэктрекинг), аналогичный подходу VF2.
Процесс поиска изоморфизма разбит на два этапа:
- Эвристический фильтр (
Invariants.hs): Проверка базовых графовых инвариантов (количество вершин, рёбер, распределение степеней) за O(1). - Топологическое сопоставление (
Isomorphism.hs): Обход дерева состояний с использованием монадыState. Алгоритм строит взаимно однозначное отображение между узлами графов, откатываясь (backtracking) при обнаружении топологических противоречий.
- Язык: Haskell (GHC 9.10.3)
- Сборка: Stack
- Зависимости:
fgl(Functional Graph Library) - внутреннее представление графов.hspec,QuickCheck— тестирование.
Для сборки проекта на вашей машине должен быть установлен stack.
git clone [https://github.com/Lamagraph/inets-isomorphism.git](https://github.com/Lamagraph/inets-isomorphism.git)
cd inets-isomorphism
stack buildПроект покрыт модульными тестами (проверка краевых случаев) и property-based тестами (QuickCheck генерирует сотни случайных графов для математической валидации свойств изоморфизма).
stack testВ репозитории настроен GitHub Actions пайплайн (.github/workflows/ci.yml).
При каждом пуше в ветку main или создании Pull Request сервер автоматически выполняет:
- Кэширование зависимостей (Pantry/GHC).
- Сборку проекта (
stack build). - Запуск тестов (
stack test --system-ghc).
Проект распространяется под лицензией MIT.