# Zebra Tutor

Goal: Find consequences with minimal number of clues.

Clues?

• Natural language sentences
• Logigram constraints
Penne Farfall spirelli Arrabi Bologn Carbon
Andrea
Bart
Casper
arrabi
Bologn
Carbon
• Andrea ate Penne
• The person who ate penne, took Carbonara Sauce
• Bart ate Penne or Farfalle
• The spirelli was eaten with Bolognese

My instance

Penne Farfall spirelli Arrabi Bologn Carbon
Andrea X - - - - X
Bart - X - X - -
Casper - - X - X -
arrabi - X -
Bologn - - X
Carbon X - -
• Andrea ate Penne
• The person who ate penne, took Carbonara Sauce
• Bart ate Penne or Farfalle
• The spirelli was eaten with Bolognese

My instance

Transitivity

Theory Pasta

Arguments:

'In' (Predicates) 'Out' (Functions)
PersonPastaP PersonPasta
PersonSauceP PersonSauce
PastaSauceP PastaPerson
PastaSauce
SaucePerson
SaucePasta
TseitinSet

Theory Pasta

Rules

\( \forall \) person, pasta, sauce :

PersonPastaP(person, pasta) \(\Rightarrow\) PersonPasta(person)=pasta \( \land \) PastaPerson(pasta)=Person

\( \ldots \)

An extension of what is known:

the function representation is Consistent:

\( \forall \) person, pasta, sauce :

PersonPasta(person)=pasta \(\Leftrightarrow\) PastaPerson(pasta)=person

\( \ldots \)

Theory Pasta

Rules

The actual puzzle, reified:

Transitivity, reified:

\( \forall \) person, pasta, sauce :

T(5) \(\Rightarrow\) PersonPasta(person)=pasta \(\land\) PastaSauce(pasta)=sauce \(\Rightarrow\) PersonSauce(person)=sauce

\( \ldots \)

T(1) \(\Rightarrow\) PersonPasta(Andrea)=Penne

\( \ldots \)

\(\exists\) derivedTruth, derivedProp, derivedPerson, derivedPasta, derivedSauce, Tseitins :

\(\forall \) personPasta, \(\ldots \) : Pasta(...) \(\Rightarrow\) isDerived(...) \(\land\)
\(\exists\) personPasta, \(\ldots\) : Pasta(...) \(\land\)

#{x:T(x)} < n

General theory