Kyky muodostaa täsmällisiä väittämiä vaikka yksityiskohdat tekevät kiusaa
on tärkeä sekä ohjelmoinnissa että asiakkaiden vaatimusten keräämisessä.
Kiusaa tekevät yksityiskohdat ovat usein juuri niitä, jotka aiheuttavat
kalliita virheitä ja muutostarpeita, jos niitä ei huomata ajoissa.
Yksityiskohtien saamista oikein voi harjoitella muodostamalla taulukoita
koskevia väittämiä predikaateilla.
Tässä tehtävässä kaikki väittämät koskevat taulukkoa nimeltä A,
jonka indeksejä ovat 1, …, n.
”Jokainen taulukon alkio on 2” voidaan ilmaista
∀ i; 1 ≤ i ≤ n: A[i] = 2 .
MathCheckille sen voi kirjoittaa ihan samalla tavalla, mutta koska merkkejä
∀ ja ≤ on hankala syöttää näppäimistöltä, MathCheck huolii myös seuraavan:
AA i; 1 <= i <= n: A[i] = 2 .
Olemassaolokvanttori ∃ voidaan kirjoittaa MathCheckille sellaisenaan tai
EE.
Kirjoita seuraavat väittämät.
Väittämässä voi esiintyä jokin muuttuja vapaana.
Silloin väittämän totuusarvo yleensä, mutta ei aina, riippuu vapaan muuttujan
arvosta.
”Jokin taulukon alkio on x” voidaan ilmaista kaavalla ∃ i; 1 ≤
i ≤ n: A[i] = x.
Siinä vapaana esiintyvät x ja A.
Jatka väittämien ilmaisemista kaavoina.
Usein vapaata muuttujaa käytetään valitsemaan jokin paikka taulukosta.
Silloin se täytyy rajoittaa lailliselle alueelle, koska muutoin väittämä
puhuisi myös olemattomien alkioiden arvoista, mikä tyypillisesti johtaa
määrittelemättömään totuusarvoon joillakin taulukon sisällöillä.
Rajoite ei aina ole 1 ≤ i ≤ n, koska jos kaavassa puhutaan myös
esim. edellisestä (eli kohdassa i − 1 olevasta) alkiosta, niin senkin
täytyy olla laillisella alueella.
”Kohdassa i oleva alkio on x” voidaan ilmaista kaavalla 1 ≤
i ≤ n ∧ A[i] = x.
Tässä kaavassa ei tarvittu kvanttoreita lainkaan!
Seuraavassa tarvitaan sekä vapaa i:n esiintymä että kvanttori.
Kvanttorin luomana muuttujana ei voi käyttää i:tä, koska sillä on jo
toinen tehtävä.
Pitää siis valita jokin toinen muuttuja.
Mikä tahansa muuttuja kelpaa, jolla ei jo ole muuta tehtävää.
Väittämä ”Kohdassa i oleva alkio on suurempi kuin mikään alkio” ei
koskaan päde.
Jos i ei osu lailliselle alueelle, niin väittämä on määrittelemätön tai
epätosi riippuen siitä, onko i rajattu väittämässä lailliselle
alueelle.
Jos i osuu lailliselle alueelle, niin väittämä tuottaa epätosi, koska
kohdassa i oleva alkio ei ole suurempi itseään eli kohdassa i
olevaa alkiota.
Suomenkielessä on kätevä pieni sana ratkaisemaan tämä ongelma: ”kohdassa
i oleva alkio on suurempi kuin mikään muu alkio” on hyödyllinen
taulukkoa koskeva väittämä, joka pätee joillekin taulukon sisällöille ja
i:n arvoille, ja toisille ei päde.
Kaavoissa tämä joudutaan sanomaan esimerkiksi lisäämällä rajoitteeseen osa,
joka sanoo että kvantifioitu muuttuja on erisuuri kuin i.
Taulukon alkio ja taulukon alkion paikka ovat eri asioita.
Harjoitellaanpa tätä hieman!
Kohdassa i olevaa alkiota ennen ovat kohdissa 1, …, i − 1
sijaitsevat alkiot.
Kohdassa i olevan alkion jälkeen ovat kohdissa i + 1, …, n
sijaitsevat alkiot.
Eri ihmiset tulkitsevat väittämän ”viimeisen ykkösen jälkeen on vain
kakkosia” eri tavoin.
Ryhmän (a) mielestä väittämä vaatii, että taulukossa on ykkönen.
Joidenkin muiden mielestä ei vaadi.
Jälkimmäinen joukko jakautuu kahtia sen mukaan, mitä taulukossa saa olla
jos siinä ei ole lainkaan ykkösiä.
Ryhmän (b) mielestä siellä saa olla mitä vain (paitsi tietenkin ykkösiä),
koska väittämä ei velvoita mitään kun viimeistä ykköstä ei ole.
Vaihtoehtoisen tulkinnan (c) mukaan siinä saa olla vain kakkosia.
Tämän tulkinnan mukaan väittämä tarkoittaa samaa kuin ”ennen ensimmäistä
ykköstä saa olla vain kakkosia” sovellettuna taulukkoon takaperin eli lopusta
alkuun.
(Siitäkin voidaan olla eri mieltä, että jos taulukossa on ykkönen, onko
taulukossa pakko olla lopussa ainakin yksi kakkonen.
Noudatamme kantaa, jonka mukaan ei ole pakko.)