18b. FO(.) en IDP

2021-04-30
slides.com/jod/pt_18b

Docent: Jo Devriendt

Assistent: Ann Philips

Coördinator: Joost Vennekens

voornaam.achternaam@kuleuven.be

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

FO(.)

  • Declaratieve taal gebaseerd op predikatenlogica
  • Gegroeid uit Prolog
  • Gerelateerd aan constraint programming
  • Ontwikkeld aan KU Leuven door de "KennisRepresentatie en  Redeneren" onderzoeksgroep
  • Bedoeling is om geen programma's voor te stellen, maar kennis
    • "kennisrepresentatietaal"
  • Is 100% formeel: computer kan FO(.) begrijpen
  • Ligt dichter bij natuurlijke taal dan de meeste programmeertalen

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

IDP

  • "Interpreter" voor FO(.)
  • Kennisbanksysteem
    • redeneert over kennis opgeslagen in FO(.)-specificaties
    • kan op verschillende manieren redeneren voor dezelfde FO(.)-specificatie
  • Belangrijke redeneervorm: input is een FO(.)-specificatie, output zijn interpretaties voor predikaten en functiesymbolen die alle formules waar maken

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens

  • Gegeven: schaakbord van N bij N vakjes, N koninginnen
  • Gevraagd: plaats koninginnen op vakjes zodat geen enkele koningin een ander kan slaan
    • m.a.w.: op elke rij en kolom staat exact 1 koningin, op elke diagonaal hoogstens 1 koningin

Hoe oplossen?

  1. Schrijf kennis van NQueens op in FO(.)
  2. Vraag IDP om oplossing te genereren

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

  • Stel: N=8
  • Twee verzamelingen:
    • Index = {1,2,3,4,5,6,7,8}
    • Diag = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
1
2
3
4
5
6
7
8
 1 
2
3
4
5
6
7
8

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

  • Stel: N=8
  • Twee verzamelingen:
    • Index = {1,2,3,4,5,6,7,8}
    • Diag = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
8
7
6
5
4
3
2
1
15
14
13
12
11
10
9

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

  • Stel: N=8
  • Twee verzamelingen:
    • Index = {1,2,3,4,5,6,7,8}
    • Diag = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
1
2
3
...

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

  • Stel: N=8
  • Twee verzamelingen:
    • Index = {1,2,3,4,5,6,7,8}
    • Diag = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
  • Een predikaat queen:
    • betekenis: queen(x,y) is waar asa vakje (x,y) een koniningin bevat
  • Twee functiesymbolen diag1 en diag2:

     
    • betekenis:
      diag1(x,y)=z is waar asa vakje (x,y) op 45°- diagonaal z ligt
      diag2(x,y)=z is waar asa vakje (x,y) op -45°- diagonaal z ligt
\text{queen}^I\subseteq \text{Index} \times \text{Index}
\text{diag1}^I\colon \text{Index} \times \text{Index} \rightarrow \text{Diag}\\ \text{diag2}^I\colon \text{Index} \times \text{Index} \rightarrow \text{Diag}\\

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

  • interpretatie voor diag1 en diag2 ligt vast:


     
  • kennis voor de rest van het probleem is:
    op elke rij en kolom staat exact 1 koningin,
    op elke diagonaal hoogstens 1 koningin
  • Omgezet naar FO(.)-formules:
\text{diag1}^I = \{(1,1)\mapsto 1, \ldots, (8,8) \mapsto 15\}\\ \text{diag2}^I = \{(1,8)\mapsto 1, \ldots, (8,1) \mapsto 15\}
\forall r\colon \exists_1 c \colon \text{queen}(r,c)\\ \forall c\colon \exists_1 r \colon \text{queen}(r,c)\\ \forall d\colon \#\{(r, c) ~|~ \text{diag1}(r,c)=d \wedge \text{queen}(r,c)\} \leq 1\\ \forall d\colon \#\{(r, c) ~|~ \text{diag2}(r,c)=d \wedge \text{queen}(r,c)\} \leq 1\\

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

!r : ?=1 c : queen(r,c).
!c : ?=1 r : queen(r,c).
!d : #{r c : diag1(r,c)=d & queen(r,c)} =< 1.
!d : #{r c : diag2(r,c)=d & queen(r,c)} =< 1.

Formules in precieze FO(.)-syntax:

\forall r\colon \exists_1 c \colon \text{queen}(r,c)\\ \forall c\colon \exists_1 r \colon \text{queen}(r,c)\\ \forall d\colon \#\{(r, c) ~|~ \text{diag1}(r,c)=d \wedge \text{queen}(r,c)\} \leq 1\\ \forall d\colon \#\{(r, c) ~|~ \text{diag2}(r,c)=d \wedge \text{queen}(r,c)\} \leq 1\\

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens in FO(.)

vocabulary V {
    type index isa int
    queen(index, index)
    n : index
    type diag isa int
    diag1(index, index) : diag
    diag2(index, index) : diag
}

theory T : V {
    { diag1(r,c) = r - c + n. }
    { diag2(r,c) = r + c - 1. }

    !r : ?=1 c : queen(r,c).
    !c : ?=1 r : queen(r,c).
    !d : #{r c : diag1(r,c)=d & queen(r,c)} =< 1.
    !d : #{r c : diag2(r,c)=d & queen(r,c)} =< 1.
}

structure S : V{
    index = {1;2;3;4;5;6;7;8}
    diag = {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}
    n = 8
}

Volledige FO(.)-specificatie:

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

NQueens oplossen met IDP

We vragen IDP om alle predikaten en functiesymbolen een interpretatie te geven zodat alle formules waar zijn:

structure  : V {
  diag = { 1..15 }
  index = { 1..8 }
  queen = { 1,4; 2,7; 3,3; 4,8; 5,2; 6,5; 7,1; 8,6 }
  diag1 = { 1,1->8; 1,2->7; 1,3->6; 1,4->5; 1,5->4; ...
  diag2 = { 1,1->1; 1,2->2; 1,3->3; 1,4->4; 1,5->5; ...
  n = 8
}

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Kennisrepresentatie

  • FO(.) lijkt weinig op een klassiek imperatief programma
  • FO(.) is een declaratieve kennisrepresentatietaal
  • Formules fungeren als constraints waaraan een oplossing moet voldoen
    • FO(.) is een vorm van constraint programming
  • Formules stellen kennis voor over het probleemdomein
  • IDP kan op basis van FO(.)-specificatie nieuwe kennis afleiden
    • oplossing zoeken die N koninginnen juist neerzet
    • bewijzen dat er hoogstens N koninginnen op een N bij N bord gezet kunnen worden
    • query uitrekenen over interpretaties (+- SQL-tabellen)
    • berekenen welke formules onwaar zijn gegeven incorrecte interpretaties

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Samenvatting

  • FO(.) is een declaratieve kennisrepresentatietaal gebaseerd op predicatenlogica
  • Statements in FO(.) zijn formules die waar of onwaar zijn voor interpretaties van de predikaten en functiesymbolen
    • vormen constraints die waar moeten zijn
    • gebaseerd op kennis in probleemdomein
  • IDP laat toe om te redeneren over FO(.)-specificaties
  • Bvb. het opstellen van interpretaties waarin alle formules waar zijn