((p <=> q) <=> p \/ q)>>;;
lcftaut <<((p ==> q) ==> p) ==> p>>;;
(* ------------------------------------------------------------------------- *)
(* Indication of why we sometimes need lcfptaut *)
(* ------------------------------------------------------------------------- *)
let fm = let p = <> in Imp(p,p);;
lcftaut fm;;
lcfptaut < p>> fm;;
(* ------------------------------------------------------------------------- *)
(* More examples/tests. *)
(* ------------------------------------------------------------------------- *)
time lcftaut < p>>;;
time lcftaut <<(p ==> q) \/ (q ==> p)>>;;
time lcftaut <<(p ==> ~p) \/ p>>;;
time lcftaut <<(p <=> q) <=> (q <=> p)>>;;
time lcftaut < r) <=> (p \/ q <=> p \/ r)>>;;
time lcftaut < ((p <=> q) <=> p \/ q)>>;;
time lcftaut < r) <=> (p \/ q <=> p \/ r)>>;;
time lcftaut <<(p ==> q) ==> (q ==> r) ==> p ==> r>>;;
time lcftaut <<((p ==> q) ==> p) ==> p>>;;
time lcftaut <<((p ==> q) ==> q) ==> (p ==> false) ==> q>>;;
time lcftaut <<((p ==> q) ==> false) ==> q ==> p>>;;
time lcftaut <<(p ==> p ==> q) ==> p ==> q>>;;
time lcftaut <<((p ==> q) ==> q) ==> (q ==> false) ==> p>>;;
time lcftaut
<<(p ==> p) ==> (p ==> q ==> q ==> r ==> s ==> t ==> p)>>;;
END_INTERACTIVE;;