File: NNFC_CONV.doc

package info (click to toggle)
hol-light 20120602-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 23,452 kB
  • sloc: ml: 348,797; cpp: 438; java: 279; makefile: 252; sh: 183; yacc: 108; perl: 78; ansic: 57; sed: 39
file content (43 lines) | stat: -rw-r--r-- 1,422 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
\DOC NNFC_CONV

\TYPE {NNFC_CONV : conv}

\SYNOPSIS
Convert a term to negation normal form.

\DESCRIBE
The conversion {NNFC_CONV} proves a term equal to an equivalent in `negation
normal form' (NNF). This means that other propositional connectives are
eliminated in favour of conjunction (`{/\}'), disjunction (`{\/}') and negation
(`{~}'), and the negations are pushed down to the level of atomic formulas,
also through universal and existential quantifiers, with double negations
eliminated.

\FAILURE
Never fails; on non-Boolean terms it just returns a reflexive theorem.

\EXAMPLE
{
  # NNFC_CONV `(!x. p(x) <=> q(x)) ==> ~ ?y. p(y) /\ ~q(y)`;;
  Warning: inventing type variables
  val it : thm =
    |- (!x. p x <=> q x) ==> ~(?y. p y /\ ~q y) <=>
       (?x. (p x \/ q x) /\ (~p x \/ ~q x)) \/ (!y. ~p y \/ q y)
}

\USES
Mostly useful as a prelude to automated proof procedures, but users may
sometimes find it useful.

\COMMENTS
A toplevel equivalence {p <=> q} is converted to {(p \/ ~q) /\ (~p \/ q)}. In
general this ``splitting'' of equivalences is done with the expectation that
the final formula may be put into conjunctive normal form (CNF), as a prelude
to a proof (rather than refutation) procedure. An otherwise similar conversion
{NNC_CONV} prefers a `disjunctive' splitting and is better suited for a term
that will later be translated to DNF for refutation.

\SEEALSO
GEN_NNF_CONV, NNF_CONV.

\ENDDOC