Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

negate

Negate Boolean expressions


Description

Functions to negate a DNF/SOP expression, or to invert SOP to POS or POS to SOP.

Usage

negate(input, snames = "", noflevels, simplify = TRUE, ...)

invert(input, snames = "", noflevels)

Arguments

input

A string representing a SOP expression, or a minimization object of class "QCA_min".

snames

A string containing the sets' names, separated by commas.

noflevels

Numerical vector containing the number of levels for each set.

simplify

Logical, allow users to choose between the raw negation or its simplest form.

...

Other arguments (mainly for backwards compatibility).

Details

In Boolean algebra, there are two transformation rules named after the British mathematician Augustus De Morgan. These rules state that:

1. The complement of the union of two sets is the intersection of their complements.

2. The complement of the intersection of two sets is the union of their complements.

In "normal" language, these would be written as:

1. not (A and B) = (not A) or (not B)

2. not (A or B) = (not A) and (not B)

Based on these two laws, any Boolean expression written in disjunctive normal form can be transformed into its negation.

It is also possible to negate all models and solutions from the result of a Boolean minimization from function minimize() in package QCA. The resulting object, of class "qca", is automatically recognised by this function.

In a SOP expression, the products should normally be split by using a star * sign, otherwise the sets' names will be considered the individual letters in alphabetical order, unless they are specified via snames.

To negate multilevel expressions, the argument noflevels is required.

It is entirely possible to obtain multiple negations of a single expression, since the result of the negation is passed to function simplify().

Function invert() simply transforms an expression from a sum of products (SOP) to a product of sums (POS), and the other way round.

Value

A character vector when the input is a SOP expresison, or a named list for minimization input objects, each component containing all possible negations of the model(s).

Author(s)

Adrian Dusa

References

Ragin, Charles C. 1987. The Comparative Method: Moving beyond Qualitative and Quantitative Strategies. Berkeley: University of California Press.

See Also

Examples

# example from Ragin (1987, p.99)
negate(AC + B~C, simplify = FALSE)

# the simplified, logically equivalent negation
negate(AC + B~C)

# with different intersection operators
negate(AB*EF + ~CD*EF)

# invert to POS
invert(a*b + ~c*d)

## Not run: 
# using an object of class "qca" produced with minimize()
# from package QCA
library(QCA)
cLC <- minimize(LC, outcome = SURV)

negate(cLC)


# parsimonious solution
pLC <- minimize(LC, outcome = SURV, include = "?")

negate(pLC)

## End(Not run)

admisc

Adrian Dusa's Miscellaneous

v0.12
GPL (>= 3)
Authors
Adrian Dusa [aut, cre, cph] (<https://orcid.org/0000-0002-3525-9253>)
Initial release
2021-03-16

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.