aboutsummaryrefslogtreecommitdiffstats
path: root/libnormalform.7
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2024-07-19 01:29:42 +0200
committerMattias Andrée <maandree@kth.se>2024-07-19 01:29:42 +0200
commit4294ec0ed06ee34920c9edaeebaeb8b65c720791 (patch)
treee0cded59452597c04fb38f403745a384675cb5f9 /libnormalform.7
downloadlibnormalform-4294ec0ed06ee34920c9edaeebaeb8b65c720791.tar.gz
libnormalform-4294ec0ed06ee34920c9edaeebaeb8b65c720791.tar.bz2
libnormalform-4294ec0ed06ee34920c9edaeebaeb8b65c720791.tar.xz
First commit
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'libnormalform.7')
-rw-r--r--libnormalform.794
1 files changed, 94 insertions, 0 deletions
diff --git a/libnormalform.7 b/libnormalform.7
new file mode 100644
index 0000000..1607b34
--- /dev/null
+++ b/libnormalform.7
@@ -0,0 +1,94 @@
+.TH LIBNORMALFORM 7 LIBNORMALFORM
+.SH NAME
+libnormalform \- First-order logic sentence canonicalisation library
+
+.SH SYNOPSIS
+.nf
+#include <libnormalform.h>
+
+LIBNORMALFORM_SENTENCE *libnormalform_true(void);
+LIBNORMALFORM_SENTENCE *libnormalform_false(void);
+LIBNORMALFORM_SENTENCE *libnormalform_variable(struct libnormalform_variable *);
+LIBNORMALFORM_SENTENCE *libnormalform_function(struct libnormalform_function *);
+LIBNORMALFORM_SENTENCE *libnormalform_transformation(struct libnormalform_transformer *, LIBNORMALFORM_SENTENCE *);
+
+LIBNORMALFORM_SENTENCE *libnormalform_not(LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_and(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_or(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_xor(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_imply(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_if(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_nand(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_nor(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_xnor(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_nimply(LIBNORMALFORM_SENTENCE **);
+LIBNORMALFORM_SENTENCE *libnormalform_nif(LIBNORMALFORM_SENTENCE **);
+
+LIBNORMALFORM_SENTENCE *libnormalform_all(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_any(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_one(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_exists(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_nexists(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_unique(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_existentially(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_universally(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_uniquely(struct libnormalform_map *, LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_empty(struct libnormalform_map *);
+LIBNORMALFORM_SENTENCE *libnormalform_nonempty(struct libnormalform_map *);
+LIBNORMALFORM_SENTENCE *libnormalform_singleton(struct libnormalform_map *);
+
+LIBNORMALFORM_SENTENCE *libnormalform_ref(LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_clone(LIBNORMALFORM_SENTENCE *);
+void libnormalform_free(LIBNORMALFORM_SENTENCE *);
+
+char *libnormalform_to_string(LIBNORMALFORM_SENTENCE *);
+LIBNORMALFORM_SENTENCE *libnormalform_from_string(char *, char **, const struct libnormalform_representation_spec *);
+
+int libnormalform_evaluate(LIBNORMALFORM_SENTENCE *);
+struct libnormalform_term *libnormalform_dnf(LIBNORMALFORM_SENTENCE *, uint64_t);
+struct libnormalform_term *libnormalform_cnf(LIBNORMALFORM_SENTENCE *, uint64_t);
+struct libnormalform_term *libnormalform_express(LIBNORMALFORM_SENTENCE *, uint64_t);
+.fi
+.PP
+Link with
+.IR -lnormalform .
+
+.SH DESCRIPTION
+The
+.B libnormalform
+library provides a mechanism for expressing
+first-order logic sentence and normalises them on the fly to
+negation normal form, and then lets the user choose disjunctive
+normal form (DNF) or conjunctive normal form (CNF).
+.PP
+.B libnormalform
+support all Boolean connectives: AND, OR, XOR,
+IMPLY, IF, NAND, NOR, XNOR, NIMPLY, NIF, and NOT, as well as the
+boolean constants TRUE and FALSE. Additionally,
+.B libnormalform
+supports three standard qualifiers: the universal qualifier
+(FOR ALL), the existential qualifier (THERE EXISTS), and the
+unique existential (uniqueness) qualifier (THERE EXISTS ONE).
+For all binary connectives, libnormalform support simply
+chaining (e.g. AND(a, b, c) instead of AND(AND(a, b), c)).
+For all qualifiers, libnormalform supports qualification over
+an array or an associative array.
+.P
+.B libnormalform
+also provides application managed boolean
+variables and functions. These as well as the domains for
+qualifiers can be set dynamically and the value of the
+sentence can be evaluate at any time.
+.PP
+When
+.B libnormalform
+is asked to output the sentences in DNF
+or CNF, it can relax parts of sentence in case the application
+wants to express the sentence in a particular form but cannot
+express all parts of, and therefore needs alternative that is
+at least as true. While relaxing the sentence, it can eliminiate
+parts of the sentence that become redundant; to be able to do
+this, it queries the application for how the application
+defined variables, functions and domains depend on each other.
+.SH SEE ALSO
+None.