EXTRA UITLEG

8.1 Eenvoud en uitdrukkingskracht

Extra uitleg 8.1.1

Door programma’s ook als data te behandelen is het mogelijk om een andere programmeer- en kennisrepresentatietaal te gebruiken dan, bijvoorbeeld, de machinetaal van de computer. Een speciaal programma, de ‘interpreter’ bepaalt aan de hand van het programma en de gerepresenteerde kennis welke instructies de computer moet uitvoeren.

Extra uitleg 8.1.2

Een tweede voordeel die het behandelen van een programma als data biedt, is dat we het programma kunnen omzetten naar een ander programma. We kunnen, bijvoorbeeld, een programma voor de berekening van een functie omzetten naar een programma voor de berekening van de afgeleide van deze functie. In de paragraaf wordt dit geïllustreerd aan de hand van een functie in de taal LISP.

De taal LISP is gebaseerd op lijsten waarvan de eerste term een functie aanduidt en de overige termen de argumenten van deze functie. Een dergelijke notatie waarbij we een functiesymbool gevolgd wordt door zijn argumenten wordt de Poolse notatie genoemd. Een andere notatievorm is degene waarbij het functiesymbool tussen de twee argumenten staat. Bijvoorbeeld de optelling of de vermenigvuldiging. In de taal LISP worden deze rekenkundige operaties ook in Poolse notatie geschreven. In de wiskunde wordt de Poolse notatie veel gebruikt. Er is echter een belangrijk verschil. In de wiskunde wordt de lijst met argumenten achter het functiesymbool geplaatst. In LISP staat het functiesymbool niet voor de lijst maar is het het eerste element uit de lijst.

De programmeertaal LISP is gebaseerd op lambda-calculus. Lambda-calculus kan beschouwd worden als een n-de orde logica waarbij n naar oneindig gaat. Lambda-calculus is een calculus die ontwikkeld is ten behoeve van een goede formalisering van het begrip functie.

Extra uitleg 8.1.3

Het verschil tussen eerste en tweede orde logica zit hem in de quantoren. In eerst orde logica (predikaatlogica) kunnen we zeggen: ‘ieder object x heeft de eigenschap f’. Oftewel, "xf (x). Waar we in eersteorde logica kunnen spreken over alle objecten kunnen we in tweedeorde logica ook spreken over alle predikaten. Bijvoorbeeld, `voor ieder één-plaatsig predikaat P geldt P(a)’, dat wil zeggen op semantisch niveau: ‘elke één-plaatsige relatie bevat het object aangeduid door de constante a’. Oftewel, "P[P(a)]. In tweedeorde logica mogen we dit ook toepassen op n-plaatsige predikaten.

Een ‘theorem prover’, dat wil zeggen een theorema’s- of stellingenbewijzer, is een programma welke kan bewijzen dat een bewering f uit een verzameling beweringen volgt. Deze verzameling beweringen, ook wel premissen genoemd, vorm de kennisbank KB. Dus als KB½ -f 1 dan kan een ‘theorem prover’ dit bewijzen. Merk op dat in eersteorde logica een ‘theorem prover’ niet altijd kan aangeven dat iets niet bewijsbaar is. Dit is een gevolg van het feit dat eersteorde logica semi beslisbaar is. Als een bewering bewijsbaar is dan zal na voldoende tijd een bewijs gevonden worden. Als de bewering niet bewijsbaar is, hoeft er geen manier te bestaan om daar achter te komen. Het enige dat men kan doen is zoeken tot men een bewijs vindt.

Een ‘strawman’ heeft naast zijn letterlijke betekenis de betekenis van iets zodanig opzetten dat je makkelijk kan winnen of scoren.