[rules = logical_not].
'Rules: logical_not.             Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules are elementary simplification rules for "not":'.
''.
'          not true   -->  false          not false  -->  true'.
'          not not X  -->  X'.


[rules = logical_and].
'Rules: logical_and.             Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules are elementary simplification rules for "and":'.
''.
'          X and true   -->  X            true and X   -->  X'.
'          X and false  -->  false        false and X  -->  false'.
'          X and not X  -->  false        not X and X  -->  false'.
'          X and X      -->  X'.


[rules = logical_or].
'Rules: logical_or.             Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules are elementary simplification rules for "or":'.
''.
'          X or false   -->  X            false or X   -->  X'.
'          X or true    -->  true         true or X    -->  true'.
'          X or not X   -->  true         not X or X   -->  true'.
'          X or X       -->  X'.


[rules = implies].
'Rules: implies.                 Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules are elementary simplification rules for "->":'.
''.
'          X -> true    -->  true         X -> false   -->  not X'.
'          true -> X    -->  X            false -> X   -->  true'.
'          not X -> X   -->  X            X -> not X   -->  not X'.
'          X -> X       -->  true'.


[rules = equivalence].
'Rules: equivalence.             Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules are elementary simplification rules for "<->":'.
''.
'          X <-> true   -->  X            true <-> X   -->  X'.
'          X <-> false  -->  not X        false <-> X  -->  not X'.
'          X <-> not X  -->  false        not X <-> X  -->  false'.
'          X <-> X      -->  true'.


[rules = logical].
'Rules: logical.                 Location: SPADE$CHECKER:LOGIC.RUL'.
''.
'These rules provide other useful rules of classical logic, thus:'.
''.
'          not (A or B)    <-->   (not A) and (not B)'.
'          not (A and B)   <-->   (not A) or (not B)'.
'          A -> B          <-->   (not A) or B'.
'          A <-> B         <-->   (A -> B) and (B -> A)'.
'          A -> (B -> C)   <-->   (A and B) -> C.'.
