import { JavaObject } from '../../../java/lang/JavaObject'; import { LinkedCollection } from '../../../core/adt/collection/LinkedCollection'; import type { List } from '../../../java/util/List'; import { Class } from '../../../java/lang/Class'; export declare class SatInput extends JavaObject { /** * Die aktuelle Anzahl an Variablen. */ private _nVars; /** * Eine Variable, die mit Hilfe einer Klausel auf TRUE forciert wird und somit eine Konstante ist. */ private _varTRUE; /** * Eine Variable, die mit Hilfe einer Klausel auf FALSE forciert wird und somit eine Konstante ist. */ private _varFALSE; /** * Die aktuelle Anzahl an Variablen. */ private readonly _clauses; /** * Erzeugt eine neues Objekt. Anschließend lassen sich Variablen erzeugen und Klauseln hinzufügen. * Möchte man die Formel f = (x1 OR x2 OR NOT x3) AND (NOT x2 OR x3) AND (x5) kodieren, so funktioniert das so:
*
     *     SatFormula f = new SatFormula();
     *     int x1 = f.createNewVar();
     *     int x2 = f.createNewVar();
     *     int x3 = f.createNewVar();
     *     f.createNewVar(); // not used
     *     int x5 = f.createNewVar();
     *
     *     f.addClause(new int[] {x1, x2, -x3}); // adds {1, 2, -3}
     *     f.addClause(new int[] {-x2, x3});     // adds {-2, 3}
     *     f.addClause(new int[] {x5});          // adds {5}
     * 
*/ constructor(); toString(): string; /** * Liefert eine Variable, die zuvor auf TRUE forciert wurde. * * @return Eine Variable, die zuvor auf TRUE forciert wurde. */ getVarTRUE(): number; /** * Liefert eine Variable, die zuvor auf FALSE forciert wurde. * * @return Eine Variable, die zuvor auf FALSE forciert wurde. */ getVarFALSE(): number; /** * Liefert die interne Anzahl an erzeugten Variablen. * * @return Die interne Anzahl an erzeugten Variablen. */ getVarCount(): number; /** * Liefert die Menge aller Klauseln. * * @return die Menge aller Klauseln. */ getClauses(): List>; /** * Liefert den Header des DIMACs Formats. Diese zeigt die Variablen- und Klauselanzahl. * * @return den Header des DIMACs Formats. Diese zeigt die Variablen- und Klauselanzahl. */ getDimacsHeader(): string; /** * Erzeugte eine neue Variable. Den zurückgegebenen Integer-Wert darf man nun in Klauseln (auch negiert) * benutzen. Eine Variable hat niemals den Wert 0, da dieser Wert nicht negiert werden kann. Ebenso darf * eine Variable nicht 0 sein, da im DIMACS CNF FORMAT das Symbol 0 zum Kodieren eines Zeilenendes benutzt wird. * * @return Die Nummer der neuen Variablen. */ create_var(): number; /** * Erzeugt mehrere Variablen auf einmal und liefert ein Array mit diesen zurück.
* Siehe auch: {@link SatInput#create_var()} * * @param n die Anzahl an zu erzeugenden Variablen. * * @return ein Array mit den neuen Variablen. */ create_vars1D(n: number): Array; /** * Erzeugt mehrere Variablen auf einmal und liefert ein Array mit diesen zurück.
* Siehe auch: {@link SatInput#create_var()} * * @param rows die Anzahl an Zeilen eines 2D-Arrays. * @param cols die Anzahl an Spalten eines 2D-Arrays. * * @return ein Array mit den neuen Variablen. */ create_vars2D(rows: number, cols: number): Array>; /** * Liefert die neu erzeugte Variable z für die 'z = x AND y' gilt. * * @param x Variable der obigen Gleichung. * @param y Variable der obigen Gleichung. * * @return die neu erzeugte Variable z für die 'z = x AND y' gilt. */ create_var_AND(x: number, y: number): number; /** * Liefert die neu erzeugte Variable z für die 'z = x OR y' gilt. * * @param x Variable der obigen Gleichung. * @param y Variable der obigen Gleichung. * * @return die neu erzeugte Variable z für die 'z = x OR y' gilt. */ create_var_OR(x: number, y: number): number; /** * Forciert, dass in der Liste maximal eine Variable TRUE ist. * Die Ergebnisvariable ist eine OR-Verknüpfung aller Variablen der Liste. * * @param pList Forciert, dass maximal eine Variable der Liste TRUE ist. * * @return Die Ergebnisvariable ist eine OR-Verknüpfung aller Variablen der Liste. */ create_var_at_most_one_tree(pList: LinkedCollection): number; /** * Hinzufügen einer Klausel. Eine Klausel ist eine nicht leere Menge von Variablen, * die mit einem logischen ODER verknüpft sind. Die Variablen dürfen negiert sein.
*
     * Das Array [-3, 8, 2]
     * wird als  (NOT x3) OR x8 OR x2 interpretiert.
     * 
* Die Menge aller Klauseln sind mit einem AND verknüpft. * * @param pVars Die Variablen (auch negiert) der Klausel mit den zuvor generierten Variablen. * * @throws DeveloperNotificationException falls die angegebenen Variablen ungültig sind. */ add_clause(pVars: Array): void; /** * Fügt eine Klausel hinzu. Falls die Variablen noch nicht existieren, werden sie erzeugt. * * @param pVars Die Variablen (auch negiert) der Klausel. * * @throws DeveloperNotificationException falls die Klausel leer ist, oder eine Variable 0 ist. */ add_clause_and_variables(pVars: Array): void; /** * Fügt eine Klausel der Größe 1 hinzu. Forciert damit die übergebene Variable auf TRUE. * * @param x Die Variable wird auf TRUE gesetzt. */ add_clause_1(x: number): void; /** * Fügt eine Klausel der Größe 2 hinzu. Forciert damit, dass mindestens eine der beiden Variablen TRUE ist. * * @param x Die Variable x der Klausel (x OR y). * @param y Die Variable y der Klausel (x OR y). */ add_clause_2(x: number, y: number): void; /** * Fügt eine Klausel der Größe 3 hinzu. Forciert damit, dass mindestens eine der drei Variablen TRUE ist. * * @param x Die Variable x der Klausel (x OR y OR z). * @param y Die Variable y der Klausel (x OR y OR z). * @param z Die Variable z der Klausel (x OR y OR z). */ add_clause_3(x: number, y: number, z: number): void; /** * Forciert, dass nicht beide Variablen TRUE sind. * * @param x Die Variable x der Klausel (-x OR -y). * @param y Die Variable y der Klausel (-x OR -y). */ add_clause_not_both(x: number, y: number): void; /** * Forciert, dass beide Variablen gleich sind. * * @param x Die Variable x der Bedingung (x = y). * @param y Die Variable y der Bedingung (x = y). */ add_clause_equal(x: number, y: number): void; /** * Forciert, dass beide Variablen ungleich sind. * * @param x Die Variable x der Bedingung (x != y). * @param y Die Variable y der Bedingung (x != y). */ add_clause_unequal(x: number, y: number): void; /** * Forciert, dass genau {@code pAmount} Variablen des Arrays den Wert TRUE haben. * * @param pArray Das Array der Variablen. * @param pAmount Die Anzahl an TRUEs in der Variablenliste. */ add_clause_exactly(pArray: Array, pAmount: number): void; /** * Forciert, dass genau {@code pAmount} Variablen der Variablenliste den Wert TRUE haben. * * @param pList Die Variablenliste. * @param pAmount Die Anzahl an TRUEs in der Variablenliste. */ add_clause_exactly(pList: LinkedCollection, pAmount: number): void; /** * Forciert, dass genau {@code pAmount} Variablen der Matrix {@code pData} in Zeile {@code pRow} den Wert TRUE haben. * * @param pData Die Matrix. * @param pRow Die Zeile der Matrix. * @param pAmount Die Anzahl an TRUEs. */ add_clause_exactly_in_row(pData: Array>, pRow: number, pAmount: number): void; /** * Forciert, dass genau {@code pAmount} Variablen der Matrix {@code pData} in Spalte {@code pCol} den Wert TRUE haben. * * @param pData Die Matrix. * @param pCol Die Spalte der Matrix. * @param pAmount Die Anzahl an TRUEs. */ add_clause_exactly_in_column(pData: Array>, pCol: number, pAmount: number): void; /** * Forciert, dass genau eine Variable der Liste TRUE ist.
* Falls die Liste leer ist, führt das zur direkten Unlösbarkeit der Formel. * * @param pList Menge an Variablen von denen genau eine TRUE sein soll. */ private add_clause_exactly_one; private _bitonic_exactly; private _bitonic_sort; private _bitonic_fill_FALSE_until_power_two; private _bitonic_sort_power_two; private _bitonic_sort_spiral; private _bitonic_sort_difference; private _bitonic_comparator; /** * Überprüft, ob die übergebene Lösung valide ist. * * @param solution Die übergebene Lösung. * @return TRUE, falls die Lösung alle Klauseln des Inputs erfüllt. */ isValidSolution(solution: Array): boolean; transpilerCanonicalName(): string; isTranspiledInstanceOf(name: string): boolean; static class: Class; } export declare function cast_de_svws_nrw_core_adt_sat_SatInput(obj: unknown): SatInput; //# sourceMappingURL=SatInput.d.ts.map