-- |
-- Module      : Data.ZSDD
-- Description : Zero-suppressed decision diagrams
-- Copyright   : (c) Eddie Jones, 2020
-- License     : BSD-3
-- Maintainer  : eddiejones2108@gmail.com
-- Stability   : experimental
--
-- Zero suppressed decision diagrams provide an efficient representation of boolean
-- formulas build from atomic propositions or atoms.
--
-- == Warning
--
-- The space used by a diagram can grows with each operation due to the cache.
--
-- == Implementation
-- Internally it is a directed acyclic graph, thereby allowing for sharing
-- of subterms.
-- Operations have a monotonic effect on the diagram and their results are
-- cached.
-- The implementations was outlined by this paper:
--
--  * Shin-ichi Minato, \"/Zero-suppressed BDDs for set manipulation in combinatorial problems/\",
--    DAC '93: Proceedings of the 30th international Design Automation Conference
--    <https://dl.acm.org/doi/10.1145/157485.164890>
module Data.ZSDD
  ( -- * Diagrams
    Diagram,
    runDiagram,

    -- * Propositions
    Prop (Top, Bot),
    Invertible,

    -- ** Construction
    -- $construction
    atomic,
    negate,
    assign,
    union,
    intersect,
    difference,

    -- ** Query
    isEmpty,
    isNotEmpty,
    count,

    -- ** Map
    mapAtom,
    bindAtom,
  )
where

import Data.ZSDD.Internal
import Prelude ()