SOGrounder:
modelling and solving with Second-Order Logic

Matthias van der Hallen

28/10/2019

First-Order Logic

  • A domain of non-logical objects: \(alice, bob, charly ...\)
  • Predicates: \(Person(alice), Person(bob), Dog(charly)\)
  • Functions: \(Owner(charly)=alice\)

Introduce variables representing non-logical objects:

\(\forall x  :  Person(x) \lor Dog(x).\)

"Everything is either a dog or a person."

Second-Order Logic

Also introduce variables representing predicates & functions:

\(\exists P  :  P(alice) \land P(bob).\)

"There is a set that contains both \(alice\) and \(bob\)."

Why?

Some knowledge cannot be expressed naturally in FO!

Why?

Some concepts are naturally expressed using predicates or functions

Graphs

\(Edge(a,b), Edge(c,b), Edge(c,d),\)

\(Edge(d,c), Edge(d,e), Edge(e,e).\)

Predicate representing its \(Edge\) relation:

Colorings

\(color(a)=red, color(b)=blue, color(c)=green\)

\(color(d)=blue, color(e)=red.\)

Coloring represented by the function:

Homomorphisms

\(h(f) = c, h(g) = d\)

Homomorphism represented by the function:

Schedules

\(shift(monday)=alice, shift(tuesday)=bob,\)

\(\ldots\)

Schedule represented by the function:

Why?

  • Graphs
  • Colorings
  • Homomorphisms
  • Schedules
  • ...

Some concepts are naturally expressed using predicates or functions:

Many interesting problems use these concepts!

Graph Mining

Find a graph \(\mathcal{G}\) such that:

Core problem

  • homomorphisms exist with the + examples
  • no homomorphisms exist with the - examples

Graph Mining

Find a graph \(\mathcal{G}\) such that:

Core problem

  • homomorphisms exist with the + examples
  • no homomorphisms exist with the - examples

+ example

Candidate for \(\mathcal{G}\)

- example

Graph Mining

\(\lnot \exists f : \forall x, y : \mathcal{G}(x,y) \Rightarrow NegEx(x,y).\)

Find a graph \(\mathcal{G}\) such that:

  • homomorphisms exist with the + examples
  • no homomorphisms exist with the - examples

\(\exists f : \forall x, y : \mathcal{G}(x,y) \Rightarrow PosEx(x,y).\)

Theory

This requires support for Second-Order Logic!

Critical Friendship

Divide \(n\) people over \(k\) cars such that

nobody has to sit with someone they dislike.

Critical friendship pair:

Two distinct people s.t. if they would dislike each other, no proper division exists.

Critical Friendship

Observations:

  • Model 'dislikes' as a graph
  • Proper division is a \(k\)-coloring
  • Two people \(p1\) and \(p2\) form a critical pair iff.
    Any valid k-colouring maps \(p1\) and \(p2\) to the same car

Alice

Bob

David

Charles

Alice

Bob

David

Charles

Critical Friendship

Observations:

  • Model 'dislikes' as a graph
  • Proper division is a \(k\)-coloring
  • Two people \(p1\) and \(p2\) form a critical pair iff.
    Any valid k-colouring maps \(p1\) and \(p2\) to the same car
type Person. % The Person type, corresponding to nodes
type Car.    % The Car type, corresponding to colours

dislike :: (Person, Person). % A predicate encoding dislikes
p1 :: Person.                % A person constant
p2 :: Person.                % A second person constant

p1 ≠ p2.
∃f :: (Person)→Car:  ∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b).
∀f :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b)) ⇒ f(p1)=f(p2).

Model:

Critical Friendship

type Person. % The Person type, corresponding to nodes
type Car.    % The Car type, corresponding to colours

dislike :: (Person, Person). % A predicate encoding dislikes
p1 :: Person.                % A person constant
p2 :: Person.                % A second person constant

p1 ≠ p2.
∃f :: (Person)→Car:  ∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b).
∀f :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b)) ⇒ f(p1)=f(p2).

Model:

Person = {Alice; Bob; Charles; David}.
Car = {Astra; Berlingo}.
dislike = {Alice, Bob; Bob, David; Charles, David}.
p1 = Bob, p2 = Charles

Model expansion

How?

SOGrounder: A system built on the traditional ground-and-solve approach

Ground-and-solve

Step 1: Translate (grounding) the high-level language to a simpeler low-level language.

Ground-and-solve

Step 2: Use a general-purpose solver to find interpretations for this translation.

Ground-and-solve

Step 3: Back-translate to an interpretation for the high-level model.

Grounding

First-Order Logic

Translation to SAT:

SAT

Formulas over propositional variables

\(x \lor \lnot (y \land z)\)

First-Order Logic

Translation to SAT:

  • Push negations: \(\lnot \exists x : \phi \rightsquigarrow \forall x : \lnot \phi\),
    \(\lnot (x \land y) \rightsquigarrow \lnot x \lor \lnot y\), ...
  • Unnest: \(f(g(x)) = z \rightsquigarrow \exists y : g(x) = y \land f(y)=z\)
  • Replace functions \(f/n\) by predicates \(f'/(n+1)\) 
  • Ground first-order quantifications:

 

  • Replace ground predicate applications \(P(a)\) by propositional variables \(p_a\)

\(\forall x : \phi \rightsquigarrow \bigwedge_{c \in type(x)} \phi[x/c]\).

\(\exist x : \phi \rightsquigarrow \bigvee_{c \in type(x)} \phi[x/c]\).

First-Order Logic

Example

type Person = {Alice; Bob}.
type Car = {Astra; Berlingo}.

dislike :: (Person, Person). % A predicate encoding dislikes
sitsIn  :: (Person)→Car


∀ a, b :: Person : dislike(a,b) ⇒ sitsIn(a) ≠ sitsIn(b).
∀ a, b :: Person : ¬dislike(a,b) ∨ sitsIn(a) ≠ sitsIn(b).
∀ a, b :: Person : ¬dislike(a,b) ∨ 
    (∃ sa, sb :: Car : sitsIn(a) = sa ∧ sitsIn(b) = sb ∧ ≠(sa,sb)).
∀ a, b :: Person : ¬dislike(a,b) ∨ 
    (∃ sa, sb :: Car : sitsIn(a,sa) ∧ sitsIn(b,sb) ∧ ≠(sa,sb)).
(¬dislike(Alice,Bob) ∨ 
    ((sitsIn(Alice,Astra)    ∧ sitsIn(Bob,Astra)    ∧ ≠(Astra,    Astra   )) ∨ 
     (sitsIn(Alice,Astra)    ∧ sitsIn(Bob,Berlingo) ∧ ≠(Astra,    Berlingo)) ∨ 
     (sitsIn(Alice,Berlingo) ∧ sitsIn(Bob,Astra)    ∧ ≠(Berlingo, Astra   )) ∨ 
     (sitsIn(Alice,Berlingo) ∧ sitsIn(Bob,Berlingo) ∧ ≠(Berlingo, Berlingo)))) ∧
     
     ...

\((\lnot d_{Alice,Bob} \lor (s_{Alice,Astra} ∧ s_{Bob,Berlingo}) ∨ (s_{Alice,Berlingo} ∧ s_{Bob,Astra})) \land ...\)

Second-Order Logic

Translation to Quantified Boolean Formulas:

Introduces quantifiers (\(\forall, \exists\)) for propositional variables

\(\forall x\exists y\forall z  .  x \lor \lnot (y \land z)\)

Second-Order Logic

Translation to Quantified Boolean Formulas:

Ground second-order quantifications \(\forall P : \phi\), \(\exist P : \phi \):

  • Ensure all predicate and function names are unique (renaming)
  • Ground \(\phi\)
  • Based on the type \(T_1 \times \ldots \times T_n\) of \(P\), introduce propositions \(p_{t_1,\ldots,t_n}\) for \(t_1 \in T_1\), etc. and quantify them correctly.
  • For functions, introduce constraints ensuring existence and uniqueness

Second-Order Logic

Example

type Person = {Alice; Bob}.
type Car = {Astra; Berlingo}.

dislike :: (Person, Person). % A predicate encoding dislikes

∀s :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ s(a)≠s(b)) ⇒ s(p1)=s(p2).

\(\forall s_{Alice,Astra}, s_{Alice,Berlingo}, s_{Bob,Astra}, s_{Bob,Berlingo} :\)

\((\Psi) \Rightarrow (\lnot d_{Alice,Bob} \lor (s_{Alice,Astra} ∧ s_{Bob,Berlingo}) ∨ (s_{Alice,Berlingo} ∧ s_{Bob,Astra})) \land ...\)

\((s_{Alice, Astra} \lor s_{Alice,Berlingo} \lor s_{Bob,Astra} \lor s_{Bob,Berlingo})  \land \)

\((\lnot s_{Alice,Astra} \lor \lnot s_{Alice,Berlingo})  \land\)

\((\lnot s_{Bob,Astra} \lor \lnot s_{Bob,Berlingo})\)

\(\Psi\):

Caveats

  • Some propositions introduced by quantifications represent irrelevant predicate applications
     
  • Some solvers require input in conjunctive normal form:

 

Standard technique: Tseitin transformation

But

\(\bigwedge_i C_i\)  where \(C_i = \bigvee_j p_{i,j}\)

Naive introduction of auxiliary propositions can introduce unwanted dependencies between propositions, hurting search

\((p_1 \land p_2) \lor p_3 \rightsquigarrow \exists t . (t \Leftrightarrow p_1 \land p_2) \land (t \lor p_3)\)

Advanced Grounding Techniques

  • Reduced Grounding: RED
  • Lifted Unit Propagation
  • Ground with Bounds

Advanced Grounding Techniques

  • Reduced Grounding: RED

Use knowledge about the truth value of sub-formulas to simplify formulas.

\[\forall a,b  .  dislike(a,b) \Rightarrow f(a) \neq f(b).\]

While grounding for \(a,b\), if \(dislike(a,b)\) can be evaluated, replace it and simplify the formula.

Advanced Grounding Techniques

  • Reduced Grounding: RED
  • Lifted Unit Propagation

Derive Certainly-True and Certainly-False values of unknown predicates using lifted (symbolic) reasoning.

\(\forall x  .  P(x) \Rightarrow Q(x).\)

If we know e.g. \(P(1)\), derive \(Q(1)\)

When deriving CT / CF value for second-order variable

\(\exist\): Process normally

\(\forall\): derive UNSAT

Advanced Grounding Techniques

  • Reduced Grounding: RED
  • Lifted Unit Propagation
  • Ground-with-Bounds

Extend CT/CF concept to (sub-)formulas and manipulate them to reduce grounding.

\(\phi \lor (\forall x  .  P(x) \Rightarrow Q(x)).\)

\(Type(x) = \{1;2;3\}, P_{ct} = \{1;2\}, Q_{ct} = \{1\}\) \(\Rightarrow \forall_{ct} = \{1\}\)

Ground \(\forall\) for \(x \not\in \forall_{ct}\)

Solving

Consider a Quantified Boolean Formula in Prenex-CNF form:

\(Q_1 X_1, \ldots, Q_n X_n . \phi\) with \(Q_i \in \{\exist, \forall\}\)

Solving QBF

Consecutive variables \(x\) with the same quantifier \(Q\) are gathered in quantifier blocks \(X\)

\(Q_1 X_, \ldots, Q_n X_n\) often abbreviated to \(\Pi\)

\(\Pi\) introduces ordering: \(x \prec_{\Pi} x'\)

Solving QBF: QCDCL

Conflict / Solution driven clause/cube learning

Generalization of well-known SAT solving technique CDCL: QCDCL

Clause:

Cube:

  • Disjunction of literals \(\bigvee l_i\)
  • \(\Pi  .  \phi \Rightarrow C\)
  • Conjunction of literals \(\bigvee l_i\)
  • \(\Pi  .  C \Rightarrow \phi\)

Solving QBF: QCDCL

PCNF \(\phi\)

Extend Assignment \(A\)

\(\phi[A]\) = T/F

Propagation

T: Learn Cube

F: Learn Clause 

No

UNSAT

\(\empty\) Clause

\(\empty\) Cube

SAT

Backtrack

Cube/Clause \(\neq\empty\)

Learn Cube/Clause: QRES

Resolution-Clause/Cube: From \(C_1 \cup \{p\}\) and \(C_2 \cup \{\overline{p}\}\), learn \(C_1 \cup C_2\) if \(p\) is \(\exist\) / \(\forall\)

Reduce Clause: Drop \(\forall\)-quantified \(l\) from \(C \cup \{l\}\) to learn \(C\) iff. \(C\) contains no \(\exist\)-quantified variable \(l'\) s.t. \(l \prec_{\Pi} l'\)

Reduce Cube: Drop \(\exist\)-quantified \(l\) from \(C \cup \{l\}\) to learn \(C\) iff. \(C\) contains no \(\forall\)-quantified variable \(l'\) s.t. \(l \prec_{\Pi} l'\) 

QRES: Example

Consider prefix: \(\exist x, y \forall a\exist z\)

Start with cubes

\(\overline{x} \land \overline{y} \land \overline{a} \land \overline{z}\)

\(\overline{x} \land \overline{y} \land a \land z\)

red

\(\overline{x} \land \overline{y} \land \overline{a}\)

\(\overline{x} \land \overline{y} \land a\)

res

\(\overline{x} \land \overline{y}\)

red

red

\(\empty\)

Conclusion

  • If we want to derive 'critical pairs', we can specify it in second-order logic
  • To reason over these specifications, we can use the SOGrounder system
    • It will ground the specification, resulting in a quantified boolean formula
    • Generic, off-the-shelve solvers can determine satisfiability, with assignments or proofs
    • We translate the solution back to the problem domain

Future work

Extend SOGrounder with:

  • Support for aggregates
  • Higher-Order predicates (Templating)

Thank you

Thank you

Replaced slides

Critical Friendship

Observations:

  • Model 'dislikes' as a graph
  • Proper division is a \(k\)-coloring
  • Two people \(p1\) and \(p2\) form a critical pair iff.
    Any valid k-colouring maps \(p1\) and \(p2\) to the same car
type Person. % The Person type, corresponding to nodes
type Car.    % The Car type, corresponding to colours

dislike :: (Person, Person). % A predicate encoding dislikes
p1 :: Person.                % A person constant
p2 :: Person.                % A second person constant

p1 ≠ p2.
∃f :: (Person)→Car:  ∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b).
∀f :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b)) ⇒ f(p1)=f(p2).

Model:

type Person. % The Person type, corresponding to nodes
type Car.    % The Car type, corresponding to colours

dislike :: (Person, Person). % A predicate encoding dislikes
p1 :: Person.                % A person constant
p2 :: Person.                % A second person constant

p1 ≠ p2.
∃f :: (Person)→Car:  ∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b).
∀f :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b)) ⇒ f(p1)=f(p2).
type Person. % The Person type, corresponding to nodes
type Car.    % The Car type, corresponding to colours

dislike :: (Person, Person). % A predicate encoding dislikes
p1 :: Person.                % A person constant
p2 :: Person.                % A second person constant

p1 ≠ p2.
∃f :: (Person)→Car:  ∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b).
∀f :: (Person)→Car: (∀ a,b :: Person: dislike(a,b) ⇒ f(a)≠f(b)) ⇒ f(p1)=f(p2).

Ground-and-solve

Step 1: Translate the high-level language to a simpeler low-level language.

Step 2: Use a general-purpose solver to find interpretations for this translation.

Step 3: Back-translate to an interpretation for the high-level model.

First-Order Logic

Translation to SAT:

Formulas over propositional variables

\( x \lor \lnot y \land z \)

  • Push negations: \(\lnot \exists x : \phi \rightsquigarrow \forall x : \lnot \phi\),
    \(\lnot x \land y \rightsquigarrow \lnot x \lor \lnot y\), ...
  • Unnest: \(f(g(x)) = z \rightsquigarrow \exists y : g(x) = y \land f(y)=z\)
  • Replace functions \(f/n\) by predicates \(f'/(n+1)\) 
  • Ground first-order quantifications:

 

  • Replace ground predicate applications \(P(a)\) by propositional variables \(p_a\)

\(\forall x : \phi \rightsquigarrow \bigwedge_{c \in type(x)} \phi[x/c]\).

\(\exist x : \phi \rightsquigarrow \bigvee_{c \in type(x)} \phi[x/c]\).

Solving QBF: QCDCL

PCNF \(\phi\)

Extend Assignment

\(\phi[A]\) = T/F

Propagation

T: Learn Cube

F: Learn Clause 

No

UNSAT

\(\empty\) Clause

\(\empty\) Cube

SAT

Backtrack

Cube/Clause \(\neq\empty\)

SOGrounder

By krr

SOGrounder

  • 994