ereduce {cnaOpt} | R Documentation |
Find all minimal disjunctive normal forms (DNF) of an input DNF
Description
ereduce
builds all minimal disjunctive normal forms corresponding to an input DNF. It is similar to rreduce
, which, however, only builds one minimal DNF at random.
Usage
ereduce(cond, x = full.ct(cond), full = !missing(x),
simplify2constant = TRUE, maxCombs = 1e7)
Arguments
cond |
A character string specifying a disjunctive normal form (DNF); can be either crisp-set or multi-value. |
x |
A
|
full |
Logical; if |
simplify2constant |
Logical; if |
maxCombs |
Maximal number of iterations that will be ran in the most time-consuming step. If the number of necessary iterations exceeds |
Details
ereduce
eliminates conjuncts and disjuncts from a DNF cond
as long as the result of condition(cond, x)
remains the same. The only required argument is cond
. If x
is not provided, redundancies are eliminated relative to full.ct(cond)
.
ereduce
generates all redundancy-free forms of cond
, while rreduce
only returns one randomly chosen one. rreduce
is faster than ereduce
, but often incomplete. In a nutshell, ereduce
searches for minimal hitting sets in cond
preventing cond
from being false in data x
.
Value
A vector of redundancy-free disjunctive normal forms (DNF).
See Also
rreduce
, full.ct
, conCovOpt
, DNFbuild
.
Examples
# Logical redundancies.
cond1 <- "A*b + a*B + A*C + B*C"
ereduce(cond1)
rreduce(cond1) # repeated calls generate different outputs
cond2 <- "A*b + a*B + A*B + a*b"
ereduce(cond2)
ereduce(cond2, simplify2constant = FALSE)
# Redundancy elimination relative to simulated cs data.
dat1 <- data.frame(
A = c(0, 0, 0, 0, 1, 1, 0, 1),
B = c(0, 1, 0, 1, 1, 0, 0, 0),
C = c(1, 1, 0, 1, 1, 0, 1, 1),
D = c(0, 0, 0, 0, 0, 1, 1, 1))
cco1 <- conCovOpt(dat1, "D")
best1 <- selectMax(cco1)
(formula1 <- DNFbuild(best1, outcome = "D", reduce = FALSE))
# ereduce
ereduce(formula1, dat1, full = FALSE)
# rreduce
rreduce(formula1, dat1, full = FALSE)
# Redundancy elimination relative to simulated mv data.
dat2 <- data.frame(
A = c(3,2,1,1,2,3,2,2,2,1,1,2,3,2,2,2,1,2,3,3,3,1,1,1,3,1,2,1,2,3,3,2,2,2,1,2,2,3,2,1,2,1,3,3),
B = c(1,2,3,2,1,1,2,1,2,2,3,1,1,1,2,3,1,3,3,3,1,1,3,2,2,1,1,3,3,2,3,1,2,1,2,2,1,1,2,2,3,3,3,3),
C = c(1,3,3,3,1,1,1,2,2,3,3,1,1,2,2,2,3,1,1,2,1,2,2,3,3,1,2,2,2,3,2,1,1,2,2,2,1,1,1,2,2,1,1,2),
D = c(3,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,1,1,1,1,1,2,2,2,2,2,3,1,1,1,1,1,2,2,2,2,2,3,3,3),
E = c(3,2,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3)
)
cco2 <- conCovOpt(dat2, "D=3")
best2 <- selectMax(cco2)
(formula2 <- DNFbuild(best2, outcome = "D=3", reduce = FALSE))
# ereduce
ereduce(formula2, dat2, full = FALSE)
# rreduce
rreduce(formula2, dat2, full = FALSE)
# Any Boolean expressions.
cond <- "!(A*B*C)*!(a*b*c)" # or "A + B*!(D + e) <-> C"
x <- selectCases(cond)
(cond <- cna:::getCond(x)) # returns a DNF equivalent to cond, but with many redundancies
ereduce(cond)
rreduce(cond)