Sommen in de vorm van een verhaaltje.










Een rechthoekige tuin heeft een oppervlakte van 40 m2, de omtrek is 26 m. Wat zijn de maten van die tuin?


Kun je het antwoord op deze vraag vinden. Omdat het gaat om ‘mooie’ getallen, kun je met wat uitproberen het antwoord wel vinden. Maar als de oppervlakte 33,3 m2 en de omtrek 22,6 m zou zijn is dat knap lastig.


We kunnen ook systematisch naar een oplossing zoeken:

Laten we de lengte van de tuin l  noemen en de breedte b . De gegeven oppervlakte leert ons dan dat l * b = 40 en de omtrek, dat 2 * ( l + b ) = 26, dat laatste geeft l + b = 13 

ofwel b = 13 - l.

De zo gevonden uitdrukking voor b gebruiken we voor 

de oppervlakte: l * ( 13 - l ) = 13 l - l2 = 40 ofwel l2 - 13l  + 40 = 0.


We kunnen echter l- 13l  + 40 herschrijven als (l - 8) * ( l - 5 ). Probeer die 

vermenigvuldiging maar. 

Dus geldt  (l - 8) * ( l - 5 ) = 0 Maar dan moet of (l - 8) of  ( l - 5 ) nul zijn. Met andere woorden of l = 8 of l = 5. 

Hiermee hebben we de maten van de tuin, want we weten dat  b = 13 - l. 

De oplossing is dus of 8 en 5, of 5 en 8. Hetgeen eigenlijk dezelfde oplossing is, met breedte en lengte verwisseld.


Dergelijke verhaaltjessommen zijn voor het wiskundeonderwijs aantrekkelijk omdat een leerling geconfronteerd wordt met een probleem in de buitenwereld dat je met wiskunde fraai kunt oplossen terwijl het zonder wiskunde knap lastig kan zijn. 

Dit is een situatie die in de toegepaste wiskunde gemeengoed is. Ook bijvoorbeeld  de vraag: Hoe lang duurt het bij aanhoudende vorst van tien graden onder nul voordat het ijs 3 cm dik is, wordt opgelost doordat in dit probleem een differentiaalvergelijking onderkend wordt waarvan de oplossing het antwoord op de vraag geeft. 

(Met een differentiaalvergelijking kan worden uitgedrukt dat de aangroei van het ijs steeds langzamer gaat naarmate het dikker wordt.)

Het aanbieden van dit soort sommen in de vorm van een verhaaltje maakt leerlingen duidelijk dat wiskunde meer dan een abstracte bezigheid is, maar in de praktijk toepasbaar.


Voor  Computer Taalkunde zijn deze verhaaltjessommen interessant omdat het gaat om een niet triviale tekst waarvan  essentie van de betekenis concreet is: een wiskundige vergelijking. Als je een computer een dergelijke som uitgaande van het verhaaltje kunt oplossen, dan kun je stellen dat deze het verhaaltje in zekere zin “begrepen” heeft.


In de tijd waarin ik met dit probleem bezig ben geweest, was automatisch vertalen “the holy grail” voor computer taalkunde, maar het was inmiddels duidelijk dat daarvoor grip op de betekenis van taal nodig was; dat je met woord-voor-woord vertalingen niet tot een bruikbaar resultaat zou kunnen komen. Het maken van een programma om verhaatjessommen op te lossen zou een stapje in die richting kunnen zijn.



AANLEIDING

Deze Post heeft betrekking op een periode nadat ik mijn tentamen voor Numerieke  Wiskunde aan de UVA gehaald had en als assistent in  dienst was gekomen op het Mathematisch Centrum, het tegnwoordige Centrum voor Wiskunde en Informatica. Daar ik zou gaan samenwerken  met Hugo Brandt Cortius. Zie de vorige Post over kunstmatig voorlezen. Eenmaal aangenomen als onderzoeksassistent  stelde Hugo voor dat ik nog aan het oplossen van ingeklede vierkantsvergelijkingen. Dit zijn verhaaltjessommen zoals het voorbeeld over de tuin ook is. De term “vierkants” slaat op het feit dat de onbekende, “l” in het voorbeeld, als kwadraat voorkomt. Deze memoire gaat over de periode eind 1966 begin 1970. Het meeste werk was na een maand of vier echter klaar.


In het wiskundeonderwijs kregen de leerlingen nadat ze geleerd hadden vierkantsvergelijkingen op te lossen, opgaven aangeboden in de vorm van een verhaaltje met een vraag om een oplossing.  In dat verhaaltje is voor de oplettende, in het oplossen van vierkantsvergelijkingen geschoolde leerling, zo een vergelijking te onderkennen. De oplossing van daarvan levert dan het antwoord op de gestelde vraag.


De keuze voor ingeklede vierkantsvergelijkingen als  studiemateriaal heeft als voordeel dat er in middelbare schoolboeken voorbeelden te vinden zijn.

Ikzelf had als leerling Mulo-B van deze sommen genoten. Het wiskunde niveau in die B richting was relatief hoog, gaf toegang tot wat nu het HBO  heet. De filosofie van mijn wiskundeleraar was, jullie mogen dan misschien niet de allergrootste talenten zijn, als je maar heel veel sommen maakt dan kom je er wel. 

Ik was  er nogal goed in en had voor het huiswerk een klein team opgebouwd dat in hoog tempo ingeklede vierkantsvergelijkingen oploste; ik las het probleem en schreef de vergelijking op die vervolgens door het team opgelost werden. Voor de goede orde het onderwijs ging over meer dan deze sommen.

 

Ik ging dan ook vol goede moed aan de slag toen Hugo mij vroeg een programma te schrijven dat dergelijke ingeklede vergelijkingen kon oplossen. “Hij had er ooit een programma voor gehad, maar was dat kwijtgeraakt”.

 

Hieronder staat eerst de oplossingsmethode met een globale beschrijving van mijn programma. De nadruk ligt op het abstraheren van de vergelijking(en) uit de tekst  van een opgave. Hierbij wordt het bovenstaande voorbeeld van de rechthoekige tuin gebruikt.


Daarna worden een viertal opgaven behandeld. Vervolgens een korte evaluatie, en tenslotte een literatuurverwijzing (dan blijkt er een addertje onder het gras te zitten).

 

Afhankelijk van belangstelling en wiskundige achtergrond kun je het volgende op verschillende wijzen lezen. Ik noem twee uitersten:

-Je bestudeert de oplossingsmethode en volgt de oplossing van de oplossing van de opgaven nauwkeurig.

-Je scant de oplossingsmethode oppervlakkig en beperkt je tot het constateren dat de opgaven inderdaad opgelost worden; maw dat het antwoord klopt.

 

 

OPLOSSSINGSMETHODE

Het door mij geschreven programma bestaat uit een aantal bewerkingsslagen waarbij een ingeklede VKV steeds verder transformeert, wordt uitgekleed, totdat er een een uitgeklede VKV, de bekende algebraïsche vierkantsvergelijking overblijft, die vervolgens opgelost moet worden. 

Er is een complicatie die in het voorbeeld ook al voorkomt.  De bewuste verhaaltjessommen bevatten vaak niet alleen een vierkantsvergelijking maar ook een of meer lineaire vergelijkingen. Als er bijvoorbeeld staat “welke drie opeenvolgende getallen x1, x2 en x3 ...”, dan heb je daarmee twee lineaire vergelijkingen: x3 - x2 = 1  en x2 - x1=1 . In het voorbeeld levert “de omtrek is 26 m” ook een lineaire vergelijking.

Voor de leerlingen is dat geen probleem voordat je vierkantsvergelijkingen leert oplossen heb je de lineaire vergelijkingen al onder de knie.

 

De frase “opeenvolgende getallen” geeft ook de aanvullende informatie dat de oplossing over gehele getallen moet gaan. Dit wordt uitgedrukt door aan de bij de opgave horende logische variabele integer de waarde true te gevenEr is nog een andere bij de opgave horende logische variabele positive die dient om bij een opgave als “over de zijden van een rechthoekige tuin” aan te geven dat negatieve oplossingen van de vergelijking verworpen moeten worden. 

Ook hoort bij de opgave een integer variabele number of unknowns die aan de hand van de tekst van de opgave de waarde 1, 2 of 3 krijgt.

 

            

 

Beschrijving van het Programma

Er zijn na een Initialisatie die voor het gehele programma geldt,  een zestal verwerkingsslagen (procedures in ALGOL termen) waarin de tekst van de opgave stapsgewijs uitgekleed  wordt tot er een algebraïsche vierkantsvergelijking, met eventueel nog één of twee lineaire vergelijkingen, overblijft. En vervolgens opgelost wordt.

We verwijzen naar het array waarin de opgave verwerkt wordt als P.  Bij aanvang wordt P gevuld met indices  die verwijzen naar de elementen (woorden, getallen, leestekens ) van de oorspronkelijke opgave, maar tegelijk ook naar een codering van die elementen, die het programma gebruikt om te bepalen om wat voor soort element het gaat; welke rol het in een ingeklede vierkantsvergelijking speelt. Bijvoorbeeld een getal (zoals 40 of 26) een waarde die naar een getal verwijst (zoals eerste) of een operator (som). 

 

De het code-systeem:

Enerzijds bevat de code informatie over wat voor soort element het is. Denk aan operator (som, product, verschil, kwadraat), leesteken of getal.

Anderzijds is het ook een individuele code van het betreffende element, dus bij getal de waarde van dat getal en bij operator welke operator.

Er kunnen echter ook meerdere elementen binnen een zelfde soort zijn die omdat ze voor het programma verwisselbaar zijn, een identieke code hebben. Dat zijn behalve echte synoniemen als “kwadraat” en “tweedemacht”, ook woorden als “waarvan” en “zodat” die we voor ons doel als synoniemen behandelen.

Van sommige elementen zoals “getal” en “tweedemacht” komt naast de enkelvoudsvorm ook het meervoud voor: “getallen” en “tweedemachten”.  Ook dit wordt in de code uitgedrukt.

De woorden eerste en kleinste die zelfstandig naar een getal kunnen verwijzen hebben dezelfde code. De woorden andere en grootste die een vergelijkbare rol vervullen hebben ook een zelfde code, maar verschillend van het eerstgenoemde paar.

 

Er is een array position operand [1:3] die in stap 4 en 5 gebruikt wordt om bij een operator de operanden te lokaliseren.

 

0 De procedure initialise

Deze leest de woordenlijst V, van vocabulary, die voor alle opgaven gebruikt wordt,  met hun codering in. In V staan de karakters van een element (woord, getal, leesteken), maar ook een verwijzing naar de code van dat element.

De stappen 2 en 3 gebruiken beiden de datastructuur transformaties, een soort herschrijfregels, met een linker- en een rechterlid waarvan het linker opgezocht wordt in P en vervangen door het rechter. Voorbeelden ziet u onder stap 2 en 3. In de transformaties komen   variabelen voor,  zo staan g1, g2 en g3  voor  getallen. Staan gw1gw2 en gw3 of voor een getal of voor een woord dat naar een getal verwijst. Tenslotte staat opr voor een operator.

Ook de namen van deze variabelen staan in V; maar ze hebben een speciale rol bij het uitvoeren van eeen transformatie uitgedrukt in hun code. Met de transformaties kunnen elementen uit V in P geïntroduceerd worden. Bijvoorbeeld de onbekenden x1x2 en x3.

De lijst met transformaties  wordt ingelezen.

 

Na dit initialiseren worden de volgende zes stappen voor iedere opgave doorlopen. In de eerste vijf wordt de inhoud van P “uitgekleed” tot een vierkantsvergelijking, mogelijk met een of twee lineaire vergelijkingen. In de laatste volgt de oplossing ervan.

 

1 De procedure determine question

De opgave wordt ingelezen, waarbij de woorden worden opgezocht in V, waarna hun index in P wordt gezet

Daarna wordt door het doorzoeken van P aan de hand van sleutelwoorden (“opvolgende”, “tuin”) de beide logische variabelen integer en positive bepaald. Dit zijn beperkingen die door de formulering van het probleem aan de oplossingen kunnen worden opgelegd (a priori zijn ze onwaar). Ook aan de hand van sleutelwoorden (“twee”, “drie”) krijgt number of unknowns zijn waarde, dit speelt een rol in stap 4.

Het programma zet breuken om in reeële getallen met 5 cijfers achter de comma. Als integer onwaar is, dan worden gehele getallen ook geschreven met 5 nullen achter de comma.

Woorden of leestekens die voor de oplossing geen rol spelen worden geschrapt.Toegepast op de voorbeeld-opgave:

Een rechthoekige tuin heeft een oppervlakte van 40 m2, de omtrek is 26 m. Wat zijn de maten van die tuin?

Vanwege de frase een rechthoekige tuin weten we dat de logische variabele positive waar moet zijn, en number of unknowns 2

De frase Wat zijn de maten van de tuin?, kan vervallen. Evenals m2 en m.

Een rechthoekige tuin heeft een oppervlakte van 40, de omtrek is 26.

 

 

2 De procedure apply substitutions

Bij het programma zijn 41 transformaties opgenomen als substituties: dit zijn herschrijfregels  zoals:

het gw1 => gw1 |

opeenvolgende => verschil 1 hebbende |

g1 maal zo groot als =>  product van g1 |

twee op elkaar volgende getallen => x1 x2 is(verschil(x2, x1),1)|

(Merk op hoe we x2 - x1 = 1  representeren)

De substituties worden toegepast door het linkerlid van de herschrijfregel in P te zoeken en indien gevonden door het rechterlid te vervangen. De substituties zijn genummerd en worden in die volgorde toegepast; opvolgende substituties vereisen soms elementen die door een eerder toegepaste substitutie is ingevoerd.

Hierbij staan g1, g2 en g3 zoals eerder gezegd voor een  getal. Staan gw1, gw2 en gw3 of ook voor een getal, of voor een woord dat naar een getal verwijst of voor de naam van een operator die een getal aflevert.

 

De verticale streep achter het rechterlid van de een herschrijfregel geeft aan dat deze daar  eindigt. 

Indien zoals bij de laatste substitutie een volledige vergelijking wordt geconstrueerd dan wordt deze aan de rechterkant van P gezet.

Op het tuinvoorbeeld worden de volgende transformaties toegepast:

            een rechthoekige tuin => van x1 x2 |

            heeft een oppervlakte van => product is |

            de omtrek is => product van 2 som is |                      

 

Dat levert op:

van x1 x2 product is 40,  product van 2 som  is 26.

 

3 De procedure  apply references

Bij het programma zijn 11 transformaties als referenties opgenomen. Dit zijn herschrijfregels om te bewerkstelligen dat referentiële uitdrukkingen naar onbekenden gaan verwijzen. Een extra variabele is  naast de al bekende g1, g2 en g3, de  variabele opr : deze kan voor iedere operator staan. De referenties zijn:

eerste                                 =>               x1  |

andere                               =>               x2  |

getal                                   =>               x1  |

hun opr                              =>               opr van lastunknowns  |

zijn  opr                             =>               opr van lastunknown  |

dat  getal                            =>               lastunknown  |

die getallen                        =>               lastunknowns  |

getallen                              =>               lastunknowns  |

zijn g1-voud                      =>               g1-voud van lastunknown  |

dat                                      =>               |

die                                      =>               |

Ze  worden van links naar rechts door P gaande stuk voor stuk toegepast. Daarbij wordt een lijstje met onbekenden (x1, x2 of x3) en hun aantal bijgehouden. Als er geen onbekenden zijn of het aantal onbekenden in strijd is met de aanwezige term  lastunknowns  en/of lastunknown, wordt de behandeling van de opgave afgebroken met de foutmelding impossible reference. De elementen lastunknown danwel  lastunknowns zoals die in het rechterlid voorkomen staan worden in P vervangen door het bovengenoemde lijstje met aangetroffen onbekenden.

Op het tuinvoorbeeld zijn geen referenties van toepassing, ook number of unknowns geeft geen probleem.

 

4 De procedure treatment of operator 

Het programma kent de volgende operatoren:

 Unair omgekeerde, tweedemacht, derdemacht, tweemaal, drievoud, (n-)voud.

 Binair verschil, quotient, middelevenredige, som, produkt

Ternair  som3, produkt3.

Er zijn twee meervoudsvormen van operatoren: derdemachten, en tweedemachten. (Van de laatste zijn er twee synoniemen kwadraten en vierkanten).

Het woord verschillen is geen meervoudige operator, en wordt door een substitutie verandert in de binaire operator verschil.

De procedure heeft de logische waarde  plural (die aangeeft dat er een meervoudsvorm van een operator onder behandeling is, of niet), en de integer variabelen number of operands en possible number of operands. Bovendien wordt de globale integer number of unknowns die in stap 1 een waarde kreeg, gebruikt.

 

Eerst wordt in P van rechts naar links naar operatoren gezocht, hierbij worden stukken van P die tussen haakje staan overgeslagen, ook operatoren waar een openingshaakje achter staat worden genegeerd, evenals complete vergelijkingen. 

 

Vervolgens worden bij de operator de operanden gezocht.

(Een operand kan een getal zijn, maar kan ook zelf een operator zijn die een waarde aflevert)

 

Daartoe wordt allereerst het  possible number of operands bepaald:

Als de naam van de operator een meervoudsvorm is

dan wordt   plural waar

en possible number of operands wordt als number of unknowns = 3 dan 3 anders 2.

anders wordt   plural onwaar

en possible number of operands wordt

voor de unaire operatoren 1, voor de andere operatoren niet zijnde som of product wordt het 2, en voor som of product wordt het 3 als number of unknowns = 3, anders ook 2.

 

Daarna  wordt vanaf de operator eerst naar rechts naar het 

woord “van” gezocht, daarbij wordt het woord “en” alsmede  andere operatoren overgeslagen. Als “van” aangetroffen wordt dan moeten de operanden rechts daarvan staan. 

            { Voorbeelden:  som van twee getallen  ;                                      

            som en product van twee getallen }

 

Is ter rechterzijde niet het woordje “van” aangetroffen dan wordt links van de operator naar “waarvan” gezocht. Is dat aangetroffen dan moeten de operanden links daarvan staan. Staat “en” onmiddelijk voor “waarvan” dat staan de operanden voor een eerder voorkomen van “waarvan”.

{ Voorbeelden:   twee getallen  waarvan som …

            twee getallen  waarvan som en waarvan product …  }

 

Is “waarvan” niet ter linkerzijde van de operator getroffen, 

dan moet vanaf de linkerzijde van P naar rechts gaand maar voor de 

operator alsnog het woordje “van” aangetroffen worden en moeten rechts daarvan de operanden gevonden worden.


Als plural is waar

Dan wordt de operator in enkelvoudige vorm gezet, deze is altijd unair

            en voor elke aangetroffen operand (minimaal 2) wordt de operator  herhaald 

met een van de operanden tussen haakjes erachter in P gezet.

Als plural is onwaar dan wordt de operand of de operanden, bij meerdere gescheiden door een comma, tussen haakjes achter de operator gezet.

 

Bij het zoeken van operanden bij een operator kan strijdigheid geconstateerd worden tussen possible number of operands en het aantal  daadwerkelijk aangetroffen operanden. In dat geval wordt een melding gegeven, waarna de behandeling van de opgave stopt. 

 

Omdat er gezocht wordt naar possible number of operands, terwijl het aantal gevonden operanden geteld wordt in number of operands kunnen  som en produkt zowel met twee als met drie operanden optreden.

 

Alle elementen uit P die na behandeling van alle operatoren geen rol meer kunnen spelen, worden verwijderd. Dat zijn ook variabelen als x1, x2 of x3 op plaatsen waar zij niet optreden als operand van een operator. De woorden ‘waarvan’ en ‘is’ blijven echter staan.

 

Toegepast op het tuinvoorbeeld.

van x1 x2 product is 40,  product van 2 som  is 26.

Operatoren van rechts naar links:

Bij som worden x1 en x2 als operanden gevonden.

Bij het meest rechtse voorkomen van product worden en som(x1,x2) gevonden.

Bij het linkse product weer x1 en x2.

Tenslotte wordt van x1 x2 en de comma na 40, verwijderd.

 

product(x1,x2) is 40 product(2,som(x1,x2)) is 26.

 

 

5 De procedure make equations

Bij aanvang van deze procedure hebben alle operatoren het vereiste aantal operanden. 

Cruciaal is het zoeken naar beide operanden van de vergelijking in is()-vorm. Je telt het aantal gevonden operanden in de lokale integer N.

Er wordt naar rechts gezocht, eerst naar  ‘waarvan’ daarna naar ‘is’ daarbij alles tussen haakjes overslaand totdat je of aan het einde van het probleem bent, of bij een complete vergelijking of bij een leesteken punt of puntkomma bent. 

Kom je bij een getal of een operator, die in dit stadium inmiddels compleet is met zijn operanden tussen haakjes er achter, dan heb je een operand van de vergelijking gevonden. Deze zet je in position operand[N].

Als N twee is dan ben je klaar en maak je een vergelijking met beide operanden. Is een van beide een getal dan zet je dat achteraan. De complete vergelijking wordt achteraan in de opgave gezet.

Anders als N één is dan plaats je een komma achter de complete eerste operand, verhoogt N  en zoekt door.

Kom je niet verder dan nul of één dan breek je de opgave met een foutmelding af.

Na afloop heb je als opgave één of meer complete vergelijkingen. De resterende woorden of getallen kunnen weg.

 

Toegepast op het tuinvoorbeeld:

product(x1,x2) is 40 product(2,som(x1,x2)) is 26.

 

is(product(x1,x2),40) is(product(2,som(x1,x2)),26).

 

 

 

 

6 De procedure solve the problem

Deze procedure is taalkundig niet interessant. En ik beschrijf niet de oplossing die in het programma staat. Daar staat een soort tweetrapsraket: er is een primair programma dat stap 1 tot en met 5 uitvoert, en een secundair programma dat de vergelijking(en) oplost. Je zult best bereid zijn te geloven dat we in 1970 met een computer al vergelijkingen konden oplossen; en daarom beschrijf ik het oplossen zoveel mogelijk op de wijze waarop een leerling het zou doen.

Ik maak daarbij zo min mogelijk gebruik van de zogenaamde abc-formule (een algoritme om de wortels, als die bestaan, van een vierkantsvergelijking te vinden). Het programma doet daarentegen alles met die formule.

 

Toegepast op het tuinvoorbeeld:

is(product(x1,x2),40) is(product(2,som(x1,x2)),26).

De laatste, lineaire, vergelijking levert. x1 + x2 = 13, dus

x2 = 13 - x1.

We substitueren 13 -x1 voor x2, en schrijven x1 gemakshalve als X.

Dan wordt de eerste vergelijking.

X(13-X)=40 ofwel

X2 -13X + 40 = 0 ofwel

(X-8)(X-5)= 0 Dat geeft twee wortels 8 en 5, hetgeen de maten van de tuin zijn.

 

 

OPGAVEN

 

Opgave 1

Zoek drie opeenvolgende getallen, waarvan het produkt 21 maal zo groot is als de som.|

 

Stap 1 determine question

Beperkingen op de oplossing: drie gehele getallen.

 

Stap 2 apply substitutions

het gw1 => gw1 | ; 

opeenvolgende=>verschil 1 hebbende |;

drie verschil g1 hebbende getallen =>

x1 x2 x3 is(verschil(x2,x1),g1) is(verschil(x3,x2),g1) | ;

g1 maal zo groot is als => is produkt van g1 | .

 

x1, x2, x3, waarvan produkt is produkt van 21 som. is(verschil(x3,x2),1) 

is(verschil(x2,x1),1) |

 

Stap 3 apply references

geen.

 

Stap 4 treatment of operators

waarvan produkt(x1,x2,x3) is product(21, som(x1,x2,x3)).

is(verschil(x3,x2),1) is(verschil(x2,x1),1) |

            {De operatoren werden van rechts naar links van  operanden 

voorzien. Daarna werden de voorkomens van  losse variabelen verwijderd.

            Merk op dat product zowel met twee als met drie operanden voorkomt.}

 

Stap 5 make equations

is(produkt(x1,x2,x3),produkt(som(x1,x2,x3),21)))

is(verschil(x3,x2),1) is(verschil(x2,x1),1) |

 

Stap 6 solve the problem

De  variabele x2 wordt geselecteerd om x1 en x3 in uit te drukken, en wordt voortaan simpelweg X genoemd. 

 

produkt((X-1),X,(X+1)) = produkt(som((X-1),X,(X +1)),21).

X(X2- 1) = 63X.    Delen door X levert een wortel: X is 0.

X2= 64.    Levert twee wortels voor X:   +8 en -8.

Dit levert drie oplossingen voor de opgave:  

-1, 0, +1  ;  7, 8, 9 ;  -9, -8, -7.

 

  

Opgave 2

Telt men bij een getal het omgekeerde van dat getal op, dan krijgt men

5  25/48. Welk getal wordt bedoeld?

 

Stap 1 determine question

telt men men bij een getal het omgekeerde van dat getal, dan krijgt men 5.52083. |

Beperkingen op de oplossing: één  getal, dat niet geheel hoeft te zijn.

 

Stap 2 apply substitutions

het gw1 => gw1 | ; een getal => x1 | ; ,dan krijgt men => is |; 

telt men bij  => som van |.

som van x1 omgekeerde van dat getal is 5.52083. |

 

Stap 3 apply reference

dat getal=> lastunknown |.

som van x1 omgekeerde van x1 is 5.52083.|

 

Stap 4 treatment of operators

som(x1,omgekeerde(x1)) is 5.520833.|

 

Stap 5 make equations

is(som(x1,omgekeerde(x1)),5.52083).|

 

Stap 6 solve the problem

De  variabele x1 wordt voortaan X genoemd.

 

X + 1/X = 5.520833

X+ 1 = 5.520833X

X -   5.520833X+ 1 = 0

 

De abc-formule geeft als wortels 5.333 en 0.1875

Dit zijn de beide oplossingen van de opgave.

(Geschreven als breuken: 16/3  en 3/16)

 

Opgave 3

Het verschil van twee getallen is 7 en het produkt is 228; bepaal die getallen.

 

Stap 1 determine question

Beperkingen op de antwoorden: twee reëele getallen.

het verschil van twee getallen is 7.0000 en het produkt is 228.00000 |

 

Stap 2 apply substitutions

het gw1=>gw1 |;  twee getallen=>x1 x2 |.

Verschil van x1 x2 is 7.00000 en produkt is 228.00000|

 

Stap 3 apply references

Toegepaste referenties:  geen

 

Stap 4 treatment of operators

verschil(x1,x2) is 7.00000 produkt(x1,x2) is 228.00000|

 

Stap 5 make equations

is(verschil(x1,x2),7.00000)   is(produkt(x1,x2),228.00000))|

 

 

Stap 6 solve the problem

De  variabele x1 wordt geselecteerd om x2 in uit te drukken, en wordt voortaan simpelweg X genoemd. 

 

X(X-7.00000)=228.00000

X2- 7.00000X - 228.0000 = 0

(X-19)(X+12)=0

Geeft als wortels 19 en -12. 

 

De oplossingen voor de opgave zijn hiermee:

19 en 12,

-12 en  -19

 

 

 

Opgave 4

Verdeel het getal 60 in twee delen, zodat de som van de tweedemachten der delen 2858 bedraagt. |

 

Stap 1 determine question

Beperkingen op de antwoorden: twee getallen.

Verdeel het getal 60.00000 in twee getallen, waarvan som van tweedemachten van getallen  2858.00000 is.

            { “delen” wordt beschouwd als synoniem van “getallen” }

 

Stap 2 apply substitutions

het gw1=>gw1 |; getal g1=>g1 |; 

verdeel g1 in twee getallen=> x1 x2   is(som(x1,x2),g1) |

 

x1 x2 waarvan som van tweedemachten van getallen 2858.00000 is. is(som(X1,X2),60.00000) |

 

Stap 3 apply references

getallen=>lastunknowns |

x1 x2, waarvan som van tweedemachten van x1 x2 2858.0000 is. Is(som(x1,x2),60.0000) |

 

Stap 4 treatment of operators

waarvan som( tweedemacht(x1), tweedemacht(x2)) 2858.0000 is. is(som(x1,x2),60.0000) |

{ Eerst zijn bij tweedemachten twee operanden gevonden. Toen zijn er twee enkelvoudige operatoren van gemaakt, met ieder hun eigen operand }

 

Stap 5 make equations

is(som(x1,x2),60.0000)  

is(som( tweedemacht(x1), tweedemacht(x2)), 2858.0000) |

            

Stap 6 solve the problem

De  variabele x1 wordt geselecteerd om x2 in uit te drukken, en wordt voortaan  X genoemd. Daarmee is de lineaire vergelijking afgehandeld.

 

X + (60 – X)= 2858.0000

2X2  - 120X + 3600 = 2858.0000

X - 60X + 371.0000 = 0

(X-7)(X-53)=0

De wortels van de vergelijking zijn 7 en 53.

Hetgeen de twee delen van 60 zijn.

 

 

 

EVALUATIE

Uit de behandelde sommen blijkt dat het programma aardig uit de voeten kan met dit type opgaven. Het gaat echter ook wel eens mis, het programma kan een echte of vermeende strijdigheid in de opgave ontdekken en met een foutmelding de opgave afbreken. Het gebeurt ook wel eens dat voor een nieuwe opgave de vocabulaire of de lijst met transformaties moet worden aangepast.

Het programma heeft daarmee grip op een belangrijk aspect van de betekenis van dit soort opgaven: het kan meestal de oplossing vinden.

Je kan echter niet stellen dat het programma grip heeft op de semantiek, de hele betekenis, van de opgaven. Twee verschillend geformuleerde opgaven kunnen leiden tot hetzelfde stelsel vergelijkingen. De verschillen in formulering zullen dan bij het “uitkleden” verdwijnen, maar daarbij kan betekenis verloren gaan.  De opgave over een rechthoekige tuin, kan tot hetzelfde stelsel leiden als een opgave over twee positieve getallen. Maar het eerste begint met een uitspraak over een rechthoekige tuin, en het tweede met een uitspraak over twee positieve getallen. De uitgeklede vergelijking zal je niet veel helpen bij het vertalen van de opgave over de tuin naar bijvoorbeeld het Frans.


Je zou een aanpak als voor deze ingeklede vergelijkingen ook kunnen gebruiken in andere situaties waarbij het soort onderwerp waar het over gaat bekend is, en dat in een vast compact formaat uitgedrukt kan worden. Bijvoorbeeld weerberichten of kookrecepten. Voor ieder van deze onderwerpen moet dan een eigen aangepaste methode gemaakt worden, en zou dan als het onderwerp gegeven is in staat kunnen zijn uit een geschikte vrije tekst een gestandaardiseerd weerbericht of kookrecept te maken. 

 

HET PROEFSCHRIFT

Het zal in 1968 geweest zijn dat Hugo vertelde dat hij ging promoveren. Het proefschrift zou Excercises In Computational Linguistics gaan heten en hij had al drie hoofdstukken, exercices, in bewerking. Over lettergrepen, getalsnamen en zelfstandig naamwoordgroepen. Het laatste hoofdstuk zou over Zinnen en hun betekenis gaan. Daarvoor wilde hij het programma over de Ingeklede Vierkantsvergelijkingen gebruiken. Omdat hij vertelde dat hij mijn rol daarbij uitdrukkelijk zou vermelden had ik daar geen bezwaar tegen. Van Wijngaarden zou de promotor zijn.

 

Zo begon een periode dat hij één of twee keer per week bij mij thuis kwam, vaak bleef hij eten, en ik hem het behoolijk complexe programma uitlegde.  (Een deel van de complexiteit die ik u in het bovenstaande onthouden heb, zit erin dat in het array P waarin de opgave staat, voortdurend geschoven wordt bij het uitvoeren van transformaties,  het verplaatsen van operanden, en het opruimen van overbodig geworden elementen).

Zijn bezoek was vaak heel gezellig, we gingen ook sociaal vaker met elkaar om. En hij leerde bij ons zijn latere vrouw kennen. We gingen in die tijd ook wel met zijn vieren naar zijn huisje aan het spoor in Houten.

 

In de aanloop naar zijn promotie kreeg ik enkele malen een voorlopige versie van het proefschrift te lezen met de vraag om op- en aanmerkingen. Steeds stond in de inleiding mijn bijdrage keurig beschreven. 

 

Tot de  definitieve versie, toen was de inleiding herschreven en werd ik niet meer genoemd. Ik vertelde Hugo dat ik me “zwaar belazerd” voelde.

Volgens Hugo wilde Van Wijngaarden niet dat er in een proefschrijft uitgebreid een bijdrage van een assistent werd genoemd, en gebeurde het vaak dat het werk voor een proefschrift deels door anderen was gedaan.

 

Bij de promotie was ik paranimf en met mijn vrouw Karien gast op het diner. Op de voorafgaande receptie werd mijn vrouw aangesproken door de moeder van Hugo die vol bewondering zei “u heeft een heel begaafde man”. Aan tafel sprak Van Wijngaarden over het proefschrift en roemde vooral het hoofdstuk over de Ingeklede Vierkantsvergelijkingen.  Hugo kon er toen niet onderuit om alsnog te vertellen dat “Gerard Kok heel veel had gedaan om hem hierbij op weg te helpen”.

 

Ik heb dit altijd een hele nare affaire gevonden. Ik had met hart en ziel aan dit programma gewerkt.  Het was met het fonetiseerprogramma het leukste van de vele dingen die ik in mijn jaren op het Mathematisch Centrum heb gedaan. Maar als ik er iemand iets over wilde vertellen, kom ik altijd in een genante situatie als het onderstaande terecht:

Het programma, en de opgaven staan uitgebreider beschreven in hoofdstuk 4 van het proefschrift van Brandt Corstius. Het idee om ingeklede vierkantsvergelijkingen met een computer te gaan oplossen was van hem; maar de oplossingsmethode en het programma zijn van mijn hand.

U zult mijn naam in het proefschrift echter niet terugvinden.

 

Brandt Corstius, H

Exercises in Computational Linguistics,

Mathematisch Centrum, Amsterdam, 1970.

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments

Popular posts from this blog

EEN INTEGRAAL SYSTEEM Deel I

Zomertocht 2022

Oudste kunstmatige Voorlezer (1972)