LogiXpr
Loading...
Searching...
No Matches
Public Types | Static Public Member Functions | Static Public Attributes | List of all members
EquivLaws Class Reference

Class that handles equivalence laws. More...

#include <equivLaws.h>

Public Types

typedef bool(* EquivLaw) (std::shared_ptr< Expression > &)
 Function pointer type for an equivalence law.
 

Static Public Member Functions

static void replace (std::shared_ptr< Expression > &expression, std::shared_ptr< Expression > newExpression)
 Replace the current expression with the new expression.
 
static bool identity (std::shared_ptr< Expression > &expression)
 Applies the identity law
(p & T) = p, (p | F) = p.
 
static bool domination (std::shared_ptr< Expression > &expression)
 Applies the domination law
(p | T) = T, (p & F) = F.
 
static bool idempotent (std::shared_ptr< Expression > &expression)
 Applies the idempotent law
(p | p) = p, (p & p) = p.
 
static bool doubleNegation (std::shared_ptr< Expression > &expression)
 Applies the double negation law
!!p = p.
 
static bool commutative (std::shared_ptr< Expression > &expression)
 Applies the commutative law
(p | q) = (q | p), (p & q) = (q & p)
 
static bool associative (std::shared_ptr< Expression > &expression)
 Applies the associative law
(p | q) | r = p | (q | r), (p & q) & r = p & (q & r)
 
static bool associativeReversed (std::shared_ptr< Expression > &expression)
 Applies associative() but reversed
p | (q | r) = (p | q) | r, p & (q & r) = (p & q) & r.
 
static bool distributive (std::shared_ptr< Expression > &expression)
 Applies distributive law
p | (q & r) = (p | q) & (p | r), p & (q | r) = (p & q) | (p & r)
 
static bool distributiveReversed (std::shared_ptr< Expression > &expression)
 Applies distributive() but reversed
(p | q) & (p | r) = p | (q & r), (p & q) | (p & r) = p & (q | r)
 
static bool deMorgan (std::shared_ptr< Expression > &expression)
 Applies De Morgan's law
!(p | q) = !p & !q, !(p & q) = !p | !q.
 
static bool deMorganReversed (std::shared_ptr< Expression > &expression)
 Applies deMorgan() but reversed
!p & !q = !(p | q), !p | !q = !(p & q)
 
static bool absorption (std::shared_ptr< Expression > &expression)
 Applies the absorption law
p | (p & q) = p, p & (p | q) = p.
 
static bool negation (std::shared_ptr< Expression > &expression)
 Applies the negation law
p | !p = T, p & !p = F.
 
static bool implication0 (std::shared_ptr< Expression > &expression)
 Applies implication: p -> q = !p | q.
 
static bool implication0Reversed (std::shared_ptr< Expression > &expression)
 Applies implication0() but reversed
!p | q = p -> q.
 
static bool implication1 (std::shared_ptr< Expression > &expression)
 Applies implication: p -> q = !q -> !p.
 
static bool implication1Reversed (std::shared_ptr< Expression > &expression)
 Applies implication1() but reversed
!q -> !p = p -> q.
 
static bool implication2 (std::shared_ptr< Expression > &expression)
 Applies implication: p | q = !p -> q.
 
static bool implication2Reversed (std::shared_ptr< Expression > &expression)
 Applies implication2() but reversed
!p -> q = p | q.
 
static bool implication3 (std::shared_ptr< Expression > &expression)
 Applies implication: p & q = !(p -> !q)
 
static bool implication3Reversed (std::shared_ptr< Expression > &expression)
 Applies implication3() but reversed
!(p -> !q) = p & q.
 
static bool implication4 (std::shared_ptr< Expression > &expression)
 Applies implication: !(p -> q) = p & !q.
 
static bool implication4Reversed (std::shared_ptr< Expression > &expression)
 Applies implication4() but reversed
p & !q = !(p -> q)
 
static bool implication5 (std::shared_ptr< Expression > &expression)
 Applies implication: (p -> q) & (p -> r) = p -> (q & r)
 
static bool implication5Reversed (std::shared_ptr< Expression > &expression)
 Applies implication5() but reversed
p -> (q & r) = (p -> q) & (p -> r)
 
static bool implication6 (std::shared_ptr< Expression > &expression)
 Applies implication: (p -> q) & (q -> r) = (p | q) -> r.
 
static bool implication6Reversed (std::shared_ptr< Expression > &expression)
 Applies implication6() but reversed
(p | q) -> r = (p -> q) & (q -> r)
 
static bool implication7 (std::shared_ptr< Expression > &expression)
 Applies implication: (p -> q) | (p -> r) = p -> (q | r)
 
static bool implication7Reversed (std::shared_ptr< Expression > &expression)
 Applies implication7() but reversed
p -> (q | r) = (p -> q) | (p -> r)
 
static bool implication8 (std::shared_ptr< Expression > &expression)
 Applies implication: (p -> q) | (q -> r) = (p & q) -> r.
 
static bool implication8Reversed (std::shared_ptr< Expression > &expression)
 Applies implication8() but reversed
(p & q) -> r = (p -> q) | (q -> r)
 
static bool bidirectionalImplication0 (std::shared_ptr< Expression > &expression)
 Applies bidirectional implication: p <-> q = (p -> q) & (q -> p)
 
static bool bidirectionalImplication0Reversed (std::shared_ptr< Expression > &expression)
 Applies bidirectionalImplication0() but reversed
(p -> q) & (q -> p) = p <-> q.
 
static bool bidirectionalImplication1 (std::shared_ptr< Expression > &expression)
 Applies bidirectional implication: p <-> q = q <-> p.
 
static bool bidirectionalImplication2 (std::shared_ptr< Expression > &expression)
 Applies bidirectional implication: p <-> q = !p <-> !q.
 
static bool bidirectionalImplication2Reversed (std::shared_ptr< Expression > &expression)
 Applies bidirectionalImplication2() but reversed
!p <-> !q = p <-> q.
 
static bool bidirectionalImplication3 (std::shared_ptr< Expression > &expression)
 Applies bidirectional implication: p <-> q = (p & q) | (!p & !q)
 
static bool bidirectionalImplication3Reversed (std::shared_ptr< Expression > &expression)
 Applies bidirectionalImplication3() but reversed
(p & q) | (!p & !q) = p <-> q.
 
static bool bidirectionalImplication4 (std::shared_ptr< Expression > &expression)
 Applies bidirectional implication: !(p <-> q) = p <-> !q.
 
static bool bidirectionalImplication4Reversed (std::shared_ptr< Expression > &expression)
 Applies bidirectionalImplication4() but reversed
p <-> !q = !(p <-> q)
 

Static Public Attributes

static std::unordered_map< EquivLaw, std::string > laws
 Map of equivalence laws to their string representations.
 
static std::unordered_map< EquivLaw, std::string > implications
 Map of implication equivalences to their string representations.
 
static std::unordered_map< EquivLaw, std::string > bidirectionalImplications
 Map of biimplication equivalences to their string representations.
 

Detailed Description

Class that handles equivalence laws.

Definition at line 15 of file equivLaws.h.

Member Typedef Documentation

◆ EquivLaw

typedef bool(* EquivLaws::EquivLaw) (std::shared_ptr< Expression > &)

Function pointer type for an equivalence law.

Parameters
exprthe expression to apply the law to
Returns
bool of whether the law was applied

Definition at line 24 of file equivLaws.h.

Member Function Documentation

◆ absorption()

bool EquivLaws::absorption ( std::shared_ptr< Expression > &  expression)
static

Applies the absorption law
p | (p & q) = p, p & (p | q) = p.

Parameters
expressionpointer to the current expression
Returns
bool of whether the absorption law was applied

Definition at line 408 of file equivLaws.cpp.

◆ associative()

bool EquivLaws::associative ( std::shared_ptr< Expression > &  expression)
static

Applies the associative law
(p | q) | r = p | (q | r), (p & q) & r = p & (q & r)

Parameters
expressionpointer to the current expression
Returns
bool of whether the associative law was applied

Definition at line 190 of file equivLaws.cpp.

◆ associativeReversed()

bool EquivLaws::associativeReversed ( std::shared_ptr< Expression > &  expression)
static

Applies associative() but reversed
p | (q | r) = (p | q) | r, p & (q & r) = (p & q) & r.

Parameters
expressionpointer to the current expression
Returns
bool of whether the associative law was applied
See also
associative()

Definition at line 214 of file equivLaws.cpp.

◆ bidirectionalImplication0()

bool EquivLaws::bidirectionalImplication0 ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectional implication: p <-> q = (p -> q) & (q -> p)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 879 of file equivLaws.cpp.

◆ bidirectionalImplication0Reversed()

bool EquivLaws::bidirectionalImplication0Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectionalImplication0() but reversed
(p -> q) & (q -> p) = p <-> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
bidirectionalImplication0()

Definition at line 903 of file equivLaws.cpp.

◆ bidirectionalImplication1()

bool EquivLaws::bidirectionalImplication1 ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectional implication: p <-> q = q <-> p.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 929 of file equivLaws.cpp.

◆ bidirectionalImplication2()

bool EquivLaws::bidirectionalImplication2 ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectional implication: p <-> q = !p <-> !q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 949 of file equivLaws.cpp.

◆ bidirectionalImplication2Reversed()

bool EquivLaws::bidirectionalImplication2Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectionalImplication2() but reversed
!p <-> !q = p <-> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
bidirectionalImplication2()

Definition at line 971 of file equivLaws.cpp.

◆ bidirectionalImplication3()

bool EquivLaws::bidirectionalImplication3 ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectional implication: p <-> q = (p & q) | (!p & !q)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 991 of file equivLaws.cpp.

◆ bidirectionalImplication3Reversed()

bool EquivLaws::bidirectionalImplication3Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectionalImplication3() but reversed
(p & q) | (!p & !q) = p <-> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
bidirectionalImplication3()

Definition at line 1017 of file equivLaws.cpp.

◆ bidirectionalImplication4()

bool EquivLaws::bidirectionalImplication4 ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectional implication: !(p <-> q) = p <-> !q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 1039 of file equivLaws.cpp.

◆ bidirectionalImplication4Reversed()

bool EquivLaws::bidirectionalImplication4Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies bidirectionalImplication4() but reversed
p <-> !q = !(p <-> q)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
bidirectionalImplication4()

Definition at line 1060 of file equivLaws.cpp.

◆ commutative()

bool EquivLaws::commutative ( std::shared_ptr< Expression > &  expression)
static

Applies the commutative law
(p | q) = (q | p), (p & q) = (q & p)

Parameters
expressionpointer to the current expression
Returns
bool of whether the commutative law was applied

Definition at line 169 of file equivLaws.cpp.

◆ deMorgan()

bool EquivLaws::deMorgan ( std::shared_ptr< Expression > &  expression)
static

Applies De Morgan's law
!(p | q) = !p & !q, !(p & q) = !p | !q.

Parameters
expressionpointer to the current expression
Returns
bool of whether De Morgan's law was applied

Definition at line 331 of file equivLaws.cpp.

◆ deMorganReversed()

bool EquivLaws::deMorganReversed ( std::shared_ptr< Expression > &  expression)
static

Applies deMorgan() but reversed
!p & !q = !(p | q), !p | !q = !(p & q)

Parameters
expressionpointer to the current expression
Returns
bool of whether De Morgan's law was applied
See also
deMorgan()

Definition at line 372 of file equivLaws.cpp.

◆ distributive()

bool EquivLaws::distributive ( std::shared_ptr< Expression > &  expression)
static

Applies distributive law
p | (q & r) = (p | q) & (p | r), p & (q | r) = (p & q) | (p & r)

Parameters
expressionpointer to the current expression
Returns
bool of whether the distributive law was applied

Definition at line 237 of file equivLaws.cpp.

◆ distributiveReversed()

bool EquivLaws::distributiveReversed ( std::shared_ptr< Expression > &  expression)
static

Applies distributive() but reversed
(p | q) & (p | r) = p | (q & r), (p & q) | (p & r) = p & (q | r)

Parameters
expressionpointer to the current expression
Returns
bool of whether the distributive law was applied
See also
distributive()

Definition at line 281 of file equivLaws.cpp.

◆ domination()

bool EquivLaws::domination ( std::shared_ptr< Expression > &  expression)
static

Applies the domination law
(p | T) = T, (p & F) = F.

Parameters
expressionpointer to the current expression
Returns
bool of whether the domination law was applied

Definition at line 103 of file equivLaws.cpp.

◆ doubleNegation()

bool EquivLaws::doubleNegation ( std::shared_ptr< Expression > &  expression)
static

Applies the double negation law
!!p = p.

Parameters
expressionpointer to the current expression
Returns
bool of whether the double negation law was applied

Definition at line 151 of file equivLaws.cpp.

◆ idempotent()

bool EquivLaws::idempotent ( std::shared_ptr< Expression > &  expression)
static

Applies the idempotent law
(p | p) = p, (p & p) = p.

Parameters
expressionpointer to the current expression
Returns
bool of whether the idempotence law was applied

Definition at line 129 of file equivLaws.cpp.

◆ identity()

bool EquivLaws::identity ( std::shared_ptr< Expression > &  expression)
static

Applies the identity law
(p & T) = p, (p | F) = p.

Parameters
expressionpointer to the current expression
Returns
bool of whether the identity law was applied

Definition at line 80 of file equivLaws.cpp.

◆ implication0()

bool EquivLaws::implication0 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: p -> q = !p | q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 459 of file equivLaws.cpp.

◆ implication0Reversed()

bool EquivLaws::implication0Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication0() but reversed
!p | q = p -> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication0()

Definition at line 480 of file equivLaws.cpp.

◆ implication1()

bool EquivLaws::implication1 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: p -> q = !q -> !p.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 500 of file equivLaws.cpp.

◆ implication1Reversed()

bool EquivLaws::implication1Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication1() but reversed
!q -> !p = p -> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 522 of file equivLaws.cpp.

◆ implication2()

bool EquivLaws::implication2 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: p | q = !p -> q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 542 of file equivLaws.cpp.

◆ implication2Reversed()

bool EquivLaws::implication2Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication2() but reversed
!p -> q = p | q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication2()

Definition at line 563 of file equivLaws.cpp.

◆ implication3()

bool EquivLaws::implication3 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: p & q = !(p -> !q)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 583 of file equivLaws.cpp.

◆ implication3Reversed()

bool EquivLaws::implication3Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication3() but reversed
!(p -> !q) = p & q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication3()

Definition at line 605 of file equivLaws.cpp.

◆ implication4()

bool EquivLaws::implication4 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: !(p -> q) = p & !q.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 625 of file equivLaws.cpp.

◆ implication4Reversed()

bool EquivLaws::implication4Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication4() but reversed
p & !q = !(p -> q)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication4()

Definition at line 646 of file equivLaws.cpp.

◆ implication5()

bool EquivLaws::implication5 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: (p -> q) & (p -> r) = p -> (q & r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 667 of file equivLaws.cpp.

◆ implication5Reversed()

bool EquivLaws::implication5Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication5() but reversed
p -> (q & r) = (p -> q) & (p -> r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication5()

Definition at line 695 of file equivLaws.cpp.

◆ implication6()

bool EquivLaws::implication6 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: (p -> q) & (q -> r) = (p | q) -> r.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 720 of file equivLaws.cpp.

◆ implication6Reversed()

bool EquivLaws::implication6Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication6() but reversed
(p | q) -> r = (p -> q) & (q -> r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication6()

Definition at line 748 of file equivLaws.cpp.

◆ implication7()

bool EquivLaws::implication7 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: (p -> q) | (p -> r) = p -> (q | r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 773 of file equivLaws.cpp.

◆ implication7Reversed()

bool EquivLaws::implication7Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication7() but reversed
p -> (q | r) = (p -> q) | (p -> r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication7()

Definition at line 801 of file equivLaws.cpp.

◆ implication8()

bool EquivLaws::implication8 ( std::shared_ptr< Expression > &  expression)
static

Applies implication: (p -> q) | (q -> r) = (p & q) -> r.

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied

Definition at line 826 of file equivLaws.cpp.

◆ implication8Reversed()

bool EquivLaws::implication8Reversed ( std::shared_ptr< Expression > &  expression)
static

Applies implication8() but reversed
(p & q) -> r = (p -> q) | (q -> r)

Parameters
expressionpointer to the current expression
Returns
bool of whether implication was applied
See also
implication8()

Definition at line 854 of file equivLaws.cpp.

◆ negation()

bool EquivLaws::negation ( std::shared_ptr< Expression > &  expression)
static

Applies the negation law
p | !p = T, p & !p = F.

Parameters
expressionpointer to the current expression
Returns
bool of whether the negation law was applied

Definition at line 429 of file equivLaws.cpp.

◆ replace()

void EquivLaws::replace ( std::shared_ptr< Expression > &  expression,
std::shared_ptr< Expression newExpression 
)
static

Replace the current expression with the new expression.

Parameters
expressionpointer to original expression
newExpressionpointer to expression to replace with

Definition at line 58 of file equivLaws.cpp.

Member Data Documentation

◆ bidirectionalImplications

std::unordered_map< EquivLaws::EquivLaw, std::string > EquivLaws::bidirectionalImplications
static
Initial value:
= {
{bidirectionalImplication0, "Bidirectional Implication Equivalence"},
{bidirectionalImplication0Reversed, "Bidirectional Implication Equivalence"},
{bidirectionalImplication1, "Bidirectional Implication Equivalence"},
{bidirectionalImplication2, "Bidirectional Implication Equivalence"},
{bidirectionalImplication2Reversed, "Bidirectional Implication Equivalence"},
{bidirectionalImplication3, "Bidirectional Implication Equivalence"},
{bidirectionalImplication3Reversed, "Bidirectional Implication Equivalence"},
{bidirectionalImplication4, "Bidirectional Implication Equivalence"},
{bidirectionalImplication4Reversed, "Bidirectional Implication Equivalence"},
}
static bool bidirectionalImplication0(std::shared_ptr< Expression > &expression)
Applies bidirectional implication: p <-> q = (p -> q) & (q -> p)
static bool bidirectionalImplication3(std::shared_ptr< Expression > &expression)
Applies bidirectional implication: p <-> q = (p & q) | (!p & !q)
static bool bidirectionalImplication2Reversed(std::shared_ptr< Expression > &expression)
Applies bidirectionalImplication2() but reversed !p <-> !q = p <-> q.
static bool bidirectionalImplication2(std::shared_ptr< Expression > &expression)
Applies bidirectional implication: p <-> q = !p <-> !q.
static bool bidirectionalImplication1(std::shared_ptr< Expression > &expression)
Applies bidirectional implication: p <-> q = q <-> p.
static bool bidirectionalImplication4Reversed(std::shared_ptr< Expression > &expression)
Applies bidirectionalImplication4() but reversed p <-> !q = !(p <-> q)
static bool bidirectionalImplication3Reversed(std::shared_ptr< Expression > &expression)
Applies bidirectionalImplication3() but reversed (p & q) | (!p & !q) = p <-> q.
static bool bidirectionalImplication0Reversed(std::shared_ptr< Expression > &expression)
Applies bidirectionalImplication0() but reversed (p -> q) & (q -> p) = p <-> q.
static bool bidirectionalImplication4(std::shared_ptr< Expression > &expression)
Applies bidirectional implication: !(p <-> q) = p <-> !q.

Map of biimplication equivalences to their string representations.

Definition at line 46 of file equivLaws.h.

◆ implications

std::unordered_map< EquivLaws::EquivLaw, std::string > EquivLaws::implications
static
Initial value:
= {
{implication0, "Implication Equivalence"},
{implication0Reversed, "Implication Equivalence"},
{implication1, "Implication Equivalence"},
{implication1Reversed, "Implication Equivalence"},
{implication2, "Implication Equivalence"},
{implication2Reversed, "Implication Equivalence"},
{implication3, "Implication Equivalence"},
{implication3Reversed, "Implication Equivalence"},
{implication4, "Implication Equivalence"},
{implication4Reversed, "Implication Equivalence"},
{implication5, "Implication Equivalence"},
{implication5Reversed, "Implication Equivalence"},
{implication6, "Implication Equivalence"},
{implication6Reversed, "Implication Equivalence"},
{implication7, "Implication Equivalence"},
{implication7Reversed, "Implication Equivalence"},
{implication8, "Implication Equivalence"},
{implication8Reversed, "Implication Equivalence"},
}
static bool implication6(std::shared_ptr< Expression > &expression)
Applies implication: (p -> q) & (q -> r) = (p | q) -> r.
static bool implication2Reversed(std::shared_ptr< Expression > &expression)
Applies implication2() but reversed !p -> q = p | q.
static bool implication3Reversed(std::shared_ptr< Expression > &expression)
Applies implication3() but reversed !(p -> !q) = p & q.
static bool implication8Reversed(std::shared_ptr< Expression > &expression)
Applies implication8() but reversed (p & q) -> r = (p -> q) | (q -> r)
static bool implication7(std::shared_ptr< Expression > &expression)
Applies implication: (p -> q) | (p -> r) = p -> (q | r)
static bool implication0Reversed(std::shared_ptr< Expression > &expression)
Applies implication0() but reversed !p | q = p -> q.
static bool implication0(std::shared_ptr< Expression > &expression)
Applies implication: p -> q = !p | q.
static bool implication5(std::shared_ptr< Expression > &expression)
Applies implication: (p -> q) & (p -> r) = p -> (q & r)
static bool implication6Reversed(std::shared_ptr< Expression > &expression)
Applies implication6() but reversed (p | q) -> r = (p -> q) & (q -> r)
static bool implication1(std::shared_ptr< Expression > &expression)
Applies implication: p -> q = !q -> !p.
static bool implication3(std::shared_ptr< Expression > &expression)
Applies implication: p & q = !(p -> !q)
static bool implication7Reversed(std::shared_ptr< Expression > &expression)
Applies implication7() but reversed p -> (q | r) = (p -> q) | (p -> r)
static bool implication2(std::shared_ptr< Expression > &expression)
Applies implication: p | q = !p -> q.
static bool implication1Reversed(std::shared_ptr< Expression > &expression)
Applies implication1() but reversed !q -> !p = p -> q.
static bool implication5Reversed(std::shared_ptr< Expression > &expression)
Applies implication5() but reversed p -> (q & r) = (p -> q) & (p -> r)
static bool implication4Reversed(std::shared_ptr< Expression > &expression)
Applies implication4() but reversed p & !q = !(p -> q)
static bool implication4(std::shared_ptr< Expression > &expression)
Applies implication: !(p -> q) = p & !q.
static bool implication8(std::shared_ptr< Expression > &expression)
Applies implication: (p -> q) | (q -> r) = (p & q) -> r.

Map of implication equivalences to their string representations.

Definition at line 24 of file equivLaws.h.

◆ laws

std::unordered_map< EquivLaws::EquivLaw, std::string > EquivLaws::laws
static
Initial value:
= {
{identity, "Identity Law"},
{domination, "Domination Law"},
{idempotent, "Idempotent Law"},
{doubleNegation, "Double Negation Law"},
{commutative, "Commutative Law"},
{associative, "Associative Law"},
{associativeReversed, "Associative Law"},
{distributive, "Distributive Law"},
{distributiveReversed, "Distributive Law"},
{deMorgan, "De Morgan's Law"},
{deMorganReversed, "De Morgan's Law"},
{absorption, "Absorption Law"},
{negation, "Negation Law"},
}
static bool distributive(std::shared_ptr< Expression > &expression)
Applies distributive law p | (q & r) = (p | q) & (p | r), p & (q | r) = (p & q) | (p & r)
static bool commutative(std::shared_ptr< Expression > &expression)
Applies the commutative law (p | q) = (q | p), (p & q) = (q & p)
static bool domination(std::shared_ptr< Expression > &expression)
Applies the domination law (p | T) = T, (p & F) = F.
static bool associative(std::shared_ptr< Expression > &expression)
Applies the associative law (p | q) | r = p | (q | r), (p & q) & r = p & (q & r)
static bool absorption(std::shared_ptr< Expression > &expression)
Applies the absorption law p | (p & q) = p, p & (p | q) = p.
static bool idempotent(std::shared_ptr< Expression > &expression)
Applies the idempotent law (p | p) = p, (p & p) = p.
static bool distributiveReversed(std::shared_ptr< Expression > &expression)
Applies distributive() but reversed (p | q) & (p | r) = p | (q & r), (p & q) | (p & r) = p & (q | r)
static bool identity(std::shared_ptr< Expression > &expression)
Applies the identity law (p & T) = p, (p | F) = p.
Definition equivLaws.cpp:80
static bool deMorganReversed(std::shared_ptr< Expression > &expression)
Applies deMorgan() but reversed !p & !q = !(p | q), !p | !q = !(p & q)
static bool associativeReversed(std::shared_ptr< Expression > &expression)
Applies associative() but reversed p | (q | r) = (p | q) | r, p & (q & r) = (p & q) & r.
static bool deMorgan(std::shared_ptr< Expression > &expression)
Applies De Morgan's law !(p | q) = !p & !q, !(p & q) = !p | !q.
static bool negation(std::shared_ptr< Expression > &expression)
Applies the negation law p | !p = T, p & !p = F.
static bool doubleNegation(std::shared_ptr< Expression > &expression)
Applies the double negation law !!p = p.

Map of equivalence laws to their string representations.

Definition at line 8 of file equivLaws.h.


The documentation for this class was generated from the following files: