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?
- Schrijf kennis van NQueens op in FO(.)
- 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
- betekenis:
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:
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:
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
18b. FO(.) en IDP
By Jo Devriendt
18b. FO(.) en IDP
- 952