18a. Predikatenlogica

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

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

Predikatenlogica

  • Ook bekend als eerste-orde logica
  • Predikatenlogica is het fundament voor logische declaratieve programmeertalen en constraint programming talen
  • Volgende lesvideo gaat over de declaratieve programmeertaal FO(.) (uitgesproken "F-O-dot") en het IDP-systeem (18.11 in de cursus)
  • Nuttig om grondiger uit te leggen

Programmeertechnieken [B-KUL-YI0855]

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

Relaties

  • Predikatenlogica gebruikt geen Booleaanse variabelen, maar relaties
  • Relatie is een deelverzameling van een Cartesisch product
  • Cartesisch product is de verzameling van alle mogelijke tupels over een lijst van verzamelingen
  • Tupel is een geordend lijstje elementen uit verzamelingen
\text{Verzameling natuurlijke getallen: } \mathbb{N}
\text{Cartesisch product van alle 2-tupels van natuurlijke getallen: } \\ \mathbb{N} \times \mathbb{N} = \{(0,0), (0,1), (1,0), (1,1), \ldots \}
\text{is-kleiner-dan relatie over de natuurlijke getallen:}\\ "<" = \{(0,1), (0,2), (1,2), (0,3), (1,3), (2,3), \ldots \} \subseteq \mathbb{N}\times\mathbb{N}

Programmeertechnieken [B-KUL-YI0855]

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

Relaties

Meer verzamelingen:

  • reële getallen
  • verzameling van alle mensen, bvb. Mens; steden, bvb. Stad; telefoonnummers, bvb. Tel
  • verzameling van alle deelverzamelingen van natuurlijke getallen
     
  • lege verzameling
\mathbb{R}
\mathcal{P}(\mathbb{N})
\emptyset

Meer relaties:

  • is-deler-van relatie

  •  
  • lege verzameling (deelverzameling van alle cartesische producten)
  • elk Cartesisch product is een deelverzameling van zichzelf, en dus ook een relatie
\{(1,0),(2,6),(3,6), \ldots\} \subseteq \mathbb{N} \times \mathbb{N}
\{(\text{Jo},\text{Leuven},0032477123456),(\text{Barack},\text{Chicago},00123456789)\} \\ \subseteq \text{Mens} \times \text{Stad} \times \text{Tel}

Programmeertechnieken [B-KUL-YI0855]

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

Relaties

  • Relatie is een deelverzameling van een Cartesisch product
  • Cartesisch product is de verzameling van alle mogelijke tupels over een lijst van verzamelingen
  • Tupel is een geordend lijstje elementen uit verzamelingen
  • Is het cijfer 3 een relatie? Neen, geen verzameling, dus ook geen deelverzameling.
  • Is de verzameling {(3)} een relatie? Ja, want het is een deelverzameling van bijvoorbeeld het Cartesisch product
    bestaande uit enkel de natuurlijke getallen
    • Noot: als tupels maar 1 element lang zijn, laten we de tupel-haakjes meestal weg: {(3)} = {3}
  • Is het lege tupel () een geldig tupel? Ja, over het 0-dimensionele "lege" Cartesisch product

Programmeertechnieken [B-KUL-YI0855]

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

Functies

  • Informeel: geeft voor elke input een output
  • Formeel: een functie is een afbeelding van een Cartesisch product naar een verzameling
\text{Grootste gemene deler } ggd\colon \mathbb{N}^+\times\mathbb{N}^+ \rightarrow \mathbb{N}^+ \\ = \{(1,1) \mapsto 1, (13,17)\mapsto 1,(15,6)\mapsto 3, \ldots \}
\text{absolute waarde } abs\colon \mathbb{R} \rightarrow \mathbb{R} \\ = \{(0) \mapsto 0, (-1)\mapsto 1,(3.14)\mapsto 3.14, \ldots \}
\pi\colon ~~\rightarrow \mathbb{R} \\ = \{() \mapsto 3.14 \}
\text{optelling } +\colon \mathbb{R}\times\mathbb{R} \rightarrow \mathbb{R} \\ = \{(0,0) \mapsto 0, (13,17)\mapsto 30,(0.01,-0.02)\mapsto -0.01, \ldots \}

Programmeertechnieken [B-KUL-YI0855]

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

Functies

  • Informeel: geeft voor elke input een output
  • Formeel: een functie is een afbeelding van een Cartesisch product naar een verzameling
\text{Leeftijd}\colon \text{Mens} \rightarrow \mathbb{N} \\ = \{(Jo) \mapsto 33, (Barack)\mapsto 59, \ldots \}
\vee \text{ ("or")} \colon \{t,f\}\times\{t,f\} \rightarrow \{t,f\} \\ = \{(t,t) \mapsto t, (t,f) \mapsto t, (f,t) \mapsto t, (f,f) \mapsto f \}
\text{MoederVan}\colon \text{Mens} \rightarrow \text{Mens} \\ = \{(Jo) \mapsto An, (Barack)\mapsto Ann, \ldots \}

Programmeertechnieken [B-KUL-YI0855]

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

Propositielogica (herhaling)

  • Predikatenlogica is uitbreiding van propositielogica
  • Statements zijn opgebouwd uit Booleaanse variabelen ("proposities") en connectieven
p \Rightarrow q\\ r \wedge \neg s\\ t \Leftrightarrow u \vee w
  • Wanneer alle variabelen een waarde hebben, is een waar (true) of onwaar (false)
  • Opgepast:                 is equivalent met
  • Opgepast bis: volgorde van operaties
\neg, \wedge, \vee, \Rightarrow / \Leftarrow, \Leftrightarrow
p \Rightarrow q
\neg p \vee q

Programmeertechnieken [B-KUL-YI0855]

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

Predikatenlogica

Statements (formules) zijn opgebouwd uit

  • connectieven:
  • kwantoren:
  • (gebonden) variabelen: bvb. x, y, z, ...
  • predikaten: bvb. P, IsDelerVan, ≤, ...
  • functiesymbolen: bvb. f, +, Leeftijd, ...
  • ... (bvb. types om kwantificatie af te bakenen)
=, \neg, \wedge, \vee, \Rightarrow / \Leftarrow, \Leftrightarrow
\forall, \exists

Formele definitie van formule in predikatenlogica brengt ons te ver.

Programmeertechnieken [B-KUL-YI0855]

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

Formules

\forall x,y,z\colon ggd(x,y)=z \Rightarrow IsDelerVan(z,x) \wedge IsDelerVan(z,y)
\exists x \colon ggd(x,x)=x

"Er is een x zodat de grootste gemene deler van x met zichzelf ook weer x is"

"Voor elke x,y,z, als z de grootste gemene deler van x en y is, dan is z een deler van x en is z een deler van y"

Programmeertechnieken [B-KUL-YI0855]

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

Waarheidswaarde

\forall x,y,z\colon ggd(x,y)=z \Rightarrow IsDelerVan(z,x) \wedge IsDelerVan(z,y)
\exists x \colon ggd(x,x)=x

Zijn deze formules waar? Ja...

\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x

Zijn deze formules waar? Hangt af van interpretatie van f en P.

Programmeertechnieken [B-KUL-YI0855]

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

Interpretaties

Zijn deze formules waar? Hangt af van interpretatie van P en f.

U = \{0,1\}, P^I \subseteq U \times U, f^I\colon U \times U \rightarrow U
  1. Leg de verzamelingen vast voor de interpretaties, bvb.

     
  2. Kies relaties en functies, bvb.
P^I = \{(0,0),(0,1)\}\\ f^I = \{(0,0)\mapsto 0, (0,1)\mapsto 0, (1,0)\mapsto 0,(1,1)\mapsto 0\}
\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x

Interpretatie van een predikaat P is een relatie

Interpretatie van een functiesymbool f is een functie

f^I
P^I

Programmeertechnieken [B-KUL-YI0855]

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

Interpretaties

Is tweede formule waar met deze interpretaties?

\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x

Ja, kies x=0, dan is f(0,0)=0 waar,
want de interpretatie van f beeldt (0,0) af op 0.

P^I = \{(0,0),(0,1)\}\\ f^I = \{(0,0)\mapsto 0, (0,1)\mapsto 0, (1,0)\mapsto 0,(1,1)\mapsto 0\}

Programmeertechnieken [B-KUL-YI0855]

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

Interpretaties

Is eerste formule waar met deze interpretaties?

\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x

Ja, voor alle 8 mogelijke waardes van x,y,z geldt dat als f(x,y)=z waar is, dan ook P(z,x) en P(z,y). Bvb.

P^I = \{(0,0),(0,1)\}\\ f^I = \{(0,0)\mapsto 0, (0,1)\mapsto 0, (1,0)\mapsto 0,(1,1)\mapsto 0\}
f(0,0)=0 \Rightarrow P(0,0) \wedge P(0,0)\\ f(0,0)=1 \Rightarrow P(1,0) \wedge P(1,0)\\ f(0,1)=0 \Rightarrow P(0,0) \wedge P(0,1)\\ f(0,1)=1 \Rightarrow P(1,0) \wedge P(1,1)
\ldots

Programmeertechnieken [B-KUL-YI0855]

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

Interpretaties

  • Nieuwe interpretaties
  • Beide formules zijn nu onwaar
\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x
P^{I'} = \color{red}\{\}\color{black}\\ f^{I'} = \{(0,0)\mapsto \color{red}1\color{black}, (0,1)\mapsto 0, (1,0)\mapsto 0,(1,1)\mapsto 0\}

Programmeertechnieken [B-KUL-YI0855]

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

Variabelen

\forall x,y,z\colon f(x,y)=z \Rightarrow P(z,x) \wedge P(z,y)
\exists x \colon f(x,x)=x

Merk op

  • Invulling voor variabelen x, y, z kun je niet zelf kiezen
    • ze nemen alle mogelijke waarden aan, en kwantor bepaalt of één/alle waarde(s) moeten passen
  • Wat je wél zelf kan kiezen zijn de interpretaties voor de predikaten en functiesymbolen
P^{I'} = \color{red}\{\}\color{black}\\ f^{I'} = \{(0,0)\mapsto \color{red}1\color{black}, (0,1)\mapsto 0, (1,0)\mapsto 0,(1,1)\mapsto 0\}

Programmeertechnieken [B-KUL-YI0855]

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

Samenvatting

  • Formules in predikatenlogica worden gebouwd met
    • connectieven
    • kwantoren
    • variabelen
    • predikaten
    • functiesymbolen
  • Formule krijgt betekenis door interpretaties op te stellen
    • interpretatie van predikaat is een relatie
    • interpretatie van functiesymbool is een functie

18a. Predikatenlogica

By Jo Devriendt

18a. Predikatenlogica

  • 653