Consistency Cubes: a fast, efficient method for exact Boolean minimization.

A lot of effort has been spent over the past few decades in the QCA methodology field, to develop efficient Boolean minimization algorithms to derive an exact, and more importantly complete list of minimal prime implicants that explain the initial, observed positive configurations. As the complexity grows exponentially with every new condition, the required computer memory goes past the current computer resources and the polynomial time required to solve this problem quickly grows towards infinity. This paper introduces a new alternative to the existing non-polynomial attempts. It completely solves the memory problem, and preliminary tests show it is exponentially hundreds of time faster than eQMC, the current “best” algorithm for QCA in R, and probes into a territory where it competes and even outperforms engineering algorithms such as Espresso, for exact minimizations. While speed is not much of an issue now (eQMC is fast enough for simple data), it might prove to be essential when further developing towards all possible temporal orders, or searching for configurations in panel data over time, combined with / or automatic detection of difficult counterfactuals etc.

Adrian Dusa

Supplementary materials

Supplementary materials are available in addition to this article. It can be downloaded at

CRAN packages used

QCA, lpSolve, venn, LogicOpt

CRAN Task Views implied by cited packages



Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".


For attribution, please cite this work as

Dusa, "The R Journal: Consistency Cubes: a fast, efficient method for exact Boolean minimization.", The R Journal, 2018

BibTeX citation

  author = {Dusa, Adrian},
  title = {The R Journal: Consistency Cubes: a fast, efficient method for exact Boolean minimization.},
  journal = {The R Journal},
  year = {2018},
  note = {},
  doi = {10.32614/RJ-2018-080},
  volume = {10},
  issue = {2},
  issn = {2073-4859},
  pages = {357-370}