Rudolf Adamkovič Personal site


Proof

Prove the statement

\[\begin{equation*}
  (P \implies Q) \> \not \equiv \> (Q \implies P).
\end{equation*}
\]

By the definition of the conditional and the biconditional,

\[\begin{align*}
  (P \implies Q) & \equiv (Q \implies P)
  \\
  (\lnot P \lor Q)
  & \equiv (\lnot Q \lor P)
  \\
  (\lnot P \lor Q) \implies (\lnot Q \lor P) \big)
  & \land \big( (\lnot Q \lor P) \implies (\lnot P \lor Q) \big)
  \\
  \big( \lnot (\lnot P \lor Q) \lor (\lnot Q \lor P) \big)
  & \land \big( \lnot (\lnot Q \lor P) \lor (\lnot P \lor Q) \big),
\end{align*}
\]

which is not a tautology, as per

(define (boolean-product length)
  "Return a list of all Boolean sequences of LENGTH."
  (let more-rows ((row (- (expt 2 length) 1)))
    (if (< row 0) (list)
        (cons (let more-columns ((column (- length 1)))
                (if (< column 0) (list)
                    (cons (even? (quotient row (expt 2 column)))
                          (more-columns (- column 1)))))
              (more-rows (- row 1))))))
(define (truth-table procedure arity)
  "Return a truth table for PROCEDURE with ARITY."
  (map (lambda (inputs)
         (append inputs (list (apply procedure inputs))))
       (boolean-product arity)))

(define (tautology? procedure arity)
  (not (member #f (map (lambda (row)
                         (car (reverse row)))
                       (truth-table procedure arity)))))
(not (tautology? (lambda (p q)
                   (and (or (not (or (not p) q))
                            (or (not q) p))
                        (or (not (or (not q) p))
                            (or (not p) q))))
                 2))
#t

\(\blacksquare\)


© 2025 Rudolf Adamkovič under GNU General Public License version 3.
Made with Emacs and secret alien technologies of yesteryear.