File: NNF_CONV.doc

package info (click to toggle)
hol-light 20131026-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 26,264 kB
  • ctags: 4,620
  • sloc: ml: 400,325; cpp: 438; java: 279; lisp: 261; makefile: 256; sh: 190; yacc: 108; perl: 78; ansic: 57; sed: 39
file content (43 lines) | stat: -rw-r--r-- 1,387 bytes parent folder | download | duplicates (4)
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 NNF_CONV

\TYPE {NNF_CONV : conv}

\SYNOPSIS
Convert a term to negation normal form.

\DESCRIBE
The conversion {NNF_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
{
  # NNF_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 disjunctive normal form (DNF), as a prelude 
to a refutation procedure. An otherwise similar conversion {NNFC_CONV} prefers 
a `conjunctive' splitting and is better suited for a term that will later be 
translated to CNF.

\SEEALSO
GEN_NNF_CONV, NNFC_CONV.

\ENDDOC