Ohjelmointikielistä tutut && ja || toimivat hieman
eri tavalla kuin logiikan ”ja” ja ”tai” (tämä selitetään lähellä tämän
tehtävän loppua).
Siksi alla on estetty niiden käyttö paitsi lopussa.
Kirjoita seuraavat väittämät kaavana:
Varmaan huomasit, että MathCheckin palaute on muotoa ”model-answer ⇔ sinun
kaavasi”.
Se tarkoittaa, että MathCheck vertaa kahta kaavaa, joista ensimmäinen on
opettajan ja jälkimmäinen sinun kirjoittama.
Opettaja on käskenyt piilottaa hänen kaavansa palautteessa, joten sen tilalla
lukee ”model-answer”.
Symboli ⇔ väittää, että sen vasemmalla puolella oleva kaava on tosi niissä ja
vain niissä tilanteissa, joissa myös oikealla puolella oleva kaava on tosi.
Niinpä ⇔ ei esiinny kaavan sisällä vaan kaavojen välissä.
Luonnollisen kielen ”tai” on monikäsitteinen: toisinaan se sallii ja
toisinaan kieltää vaihtoehdon ”molemmat”.
Jos lounaan hintaan sisältyy kahvi tai tee, niin yleensä tarkoitetaan, että
vain toinen niistä.
Se siis kieltää vaihtoehdon ”molemmat”.
Jos joku sanoo ”tulen mukaan jos sieltä saa pizzaa tai kebabia”, niin hän
todennäköisesti tulee mukaan, vaikka sieltä saisi sekä pizzaa että kebabia.
Se siis sallii vaihtoehdon ”molemmat”.
MathCheckissä ”false” eli epätosi ja ”true” eli tosi kirjoitetaan
FF ja TT.
Esimerkiksi ”kuu on vihreää juustoa” on epätosi ja ”Jyväskylässä on yliopisto”
on tosi.
”Kuu on vihreää juustoa” on aina epätosi — ei ole niin että se on jonain
päivänä tosi ja jonain toisena epätosi.
”Jyväskylässä on yliopisto” on aina tosi (tyydymme tarkastelemaan nykyaikaa).
Esitä aina epätodet väittämät symbolilla FF ja aina todet väittämät
symbolilla TT.
Esitä väittämät, jotka voivat tilanteesta riippuen olla tosia tai epätosia,
isoilla kirjaimilla kuten tähänkin asti: K tarkoittaa että otan
kahvia, T että otan teetä ja niin edelleen.
Kirjoita seuraavat väittämät ensimmäiseen ruutuun suoraan kaavaksi
käännettynä ja toiseen ruutuun sievennettynä mahdollisimman lyhyeksi.
MathCheck ei osaa tarkastaa, että ensimmäiseen ruutuun kirjoittamasi on oikeaa
muotoa.
Kun saat palautteen, tarkasta itse, että sen ensimmäinen ja keskimmäinen kaava
ovat samat.
Jossittelua käyttäen vain ∧, ∨, ¬, F ja T
Otamme myöhemmin käyttöön operaattorin ”jos … niin …”, mutta sitä ennen
ilmaisemme muutaman ”jos … niin …” -muotoisen väittämän ilman sitä.
Tavoitteena on ymmärtää ”jos … niin …” läpikotaisin.
Vaikka edellä oleva kaava pääteltiin konkreettisen tapauksen avulla, se on
esimerkki yleispätevästä totuudesta:
jos väittämä1 ja väittämä2 ovat mitä tahansa hyvin määriteltyjä väittämiä,
niin ”jos ei väittämä1 niin väittämä2” tarkoittaa samaa kuin ”väittämä1 tai
väittämä2”.
(Esimerkiksi x =
1
0
ei ole hyvin määritelty väittämä, koska
nollalla ei voi jakaa.)
Kirjoita seuraavat väittämät ensin suoraan kaavaksi käännettynä ja sitten
sievennettynä mahdollisimman lyhyeksi.
MathCheck ei osaa tarkastaa, että ensimmäiseen ruutuun kirjoittamasi on oikeaa
muotoa.
Kun saat palautteen, tarkasta itse, että sen ensimmäinen ja keskimmäinen kaava
ovat samat.
Kaksi edellistä kohtaa ovat esimerkkejä siitä, että jokainen sellainen
”jos … niin …” -väittämä on tosi, jonka jos-osa on epätosi.
Tämä pätee, vaikka myös niin-osa olisi epätosi, vaikka se saattaa kuulostaa
järjettömältä.
Joidenkin on vaikea oppia tai hyväksyä tätä, joten pohditaanpa hieman.
Yksi tapa ajatella tätä on vastaesimerkkien kautta: väittämä on aina tosi,
jos ja vain jos sille ei ole vastaesimerkkiä eli tilannetta, jossa se ei päde.
Väittämän ”jos väittämä1 niin väittämä2” vastaesimerkki on tilanne, jossa
väittämä1 pätee mutta väittämä2 ei päde.
Esimerkiksi n = 34 on vastaesimerkki väittämälle ”jos n loppuu
numeroon 4, niin n:n puolikas loppuu numeroon 2”, sillä 34 loppuu
numeroon 4, mutta sen puolikas on 17, joka loppuu numeroon 7 eikä 2.
Jos väittämä1 on aina epätosi, niin ei ole olemassa tilannetta jossa
väittämä1 pätee mutta väittämä2 ei päde, koska ei ole olemassa tilannetta
jossa väittämä1 pätee.
Silloin väittämälle ”jos väittämä1 niin väittämä2” ei ole olemassa
vastaesimerkkejä.
Silloin ”jos väittämä1 niin väittämä2” on aina tosi, eli se merkitsee samaa
kuin T.
Toinen tapa ajatella tätä lähtee siitä, että esimerkiksi ”jos x = 1,
niin x + 1 = 2” on niin vahva matemaattinen totuus kuin olla voi.
Kuitenkin jos valitaan x:n arvoksi 0, niin saadaan ”jos 0 = 1, niin
0 + 1 = 2”.
Sen kumpikin puoli on epätosi, joten se on logiikan kannalta samanlainen kuin
”jos Jyväskylässä ei ole yliopistoa, niin kuu on vihreää juustoa”.
Siksi logiikan rakentamisessa joudutaan vaikeuksiin, jos ei hyväksytä todeksi
väittämää ”jos Jyväskylässä ei ole yliopistoa, niin kuu on vihreää juustoa”.
Toisaalta pitkä kokemus on osoittanut, että sen hyväksyminen ei johda
vaikeuksiin logiikan rakentamisessa.
Niinpä on järkevää hyväksyä se todeksi, vaikka intuitiomme haraisi vastaan.
Myös seuraava kohta ratkeaa sillä, että ”jos ei väittämä1 niin väittämä2”
tarkoittaa samaa kuin ”väittämä1 tai väittämä2”.
Hieman päättelemisestä
Edellä totesimme, että ”jos en ota maitoa, niin otan sokeria” tarkoittaa
samaa kuin ”otan maitoa tai sokeria”.
Kirjoittamalla se hieman kömpelömmin havaitaan, että
”jos ei ole niin, että otan maitoa, niin otan
sokeria” tarkoittaa samaa kuin ”otan maitoa tai
otan sokeria”.
Sijoittamalla ”otan maitoa” tilalle ”en ota kahvia” saamme, että
”jos ei ole niin, että en ota kahvia, niin
otan sokeria” tarkoittaa samaa kuin ”en ota
kahvia tai otan sokeria”.
”Ei ole niin, että en ota kahvia”
tarkoittaa samaa kuin ”otan kahvia”.
Niinpä
”jos otan kahvia, niin otan sokeria”
tarkoittaa samaa kuin ”en ota kahvia tai otan sokeria”.
Lisäämällä sana ”myös”, vasemman puolen merkitys ei muutu, mutta se muuttuu
helpommin ymmärrettäväksi.
Saadaan:
”jos otan kahvia, niin otan myös sokeria” tarkoittaa samaa kuin ”en ota kahvia
tai otan sokeria”.
Tuntuuko äskeinen päättely silmänkääntötempulta?
Silti se on yhtä seikkaa lukuun ottamatta pätevä matemaattinen päättely.
Sen ainoa heikkous on, että siinä korvattiin konkreettinen väittämä ”otan
maitoa” jollakin.
Pätevässä päättelyssä korvattavana pitää olla abstrakti symboli syystä, joka
kerrotaan kohta.
(Äsken myös käytettiin vaihtelevia luonnollisen kielen ilmauksia samalle
väittämälle, mutta se ei ole päättelymme vaan luonnollisen kielen piirre.)
Logiikan kaavoja esittävinä abstrakteina symboleina käytetään usein
kreikkalaisia kirjaimia φ, ψ ja χ.
Niiden avulla äskeinen päättely voidaan esittää näin:
Tiedetään: ”jos ¬φ niin ψ” tarkoittaa samaa kuin φ ∨ ψ.
Sijoittamalla φ:n paikalle ¬χ kohdassa 1 saadaan: ”jos ¬¬χ niin ψ”
tarkoittaa samaa kuin ¬χ ∨ ψ.
Tiedetään: ¬¬χ tarkoittaa samaa kuin χ.
Kohdista 2 ja 3 seuraa: ”jos χ niin ψ” tarkoittaa samaa kuin ¬χ ∨ ψ.
Kun äsken pääteltiin, että ”jos otan kahvia, niin otan myös sokeria”
tarkoittaa samaa kuin ”en ota kahvia tai otan sokeria”, niin
Mikä oli φ:n paikalla?
Vastausotan maitoa
Mikä oli ψ:n paikalla?
Vastausotan sokeria
Mikä oli χ:n paikalla?
Vastausotan kahvia
Koska ihminen ei voi olla kahdessa paikassa yhtäaikaa, ei ole väärin jättää
edellä alin vaihtoehto ruksittamatta.
Silloin ruksitus sanoo ”olen työhuoneessani tai kahvihuoneessa, mutta en
molemmissa”.
Kuitenkin edellä näimme, että ”jos en ota maitoa, niin otan sokeria”
tarkoittaa samaa kuin ”otan maitoa tai sokeria”.
Se sallii, että otan molempia.
Tämä on oikea tulkinta ilmaukselle ”jos ei …, niin …”.
Tulkinta ”otan maitoa tai sokeria, mutta en molempia” olisi väärin.
Toisaalta, ehkä yllättäen, tulkinta ”olen työhuoneessani tai
kahvihuoneessa” ei ole väärin ilmaukselle ”jos en ole työhuoneessani, niin
olen kahvihuoneessa”!
Lisäämällä tieto, että ihminen ei voi olla kahdessa paikassa yhtäaikaa, siitä
saadaan ”olen työhuoneessani tai kahvihuoneessa, mutta en molemmissa”.
Kaiken kaikkiaan saadaan siis se lopputulos, mikä maalaisjärjen mukaan tuntuu
oikealta.
Se tulee osina: ilmaus ”jos ei …, niin …” sanoo, että olen ainakin jommassa
kummassa huoneessa; ja siitä, että olen ihminen seuraa, että en kuitenkaan
molemmissa huoneissa yhtäaikaa.
”Jos en ole työhuoneessani, niin olen kahvihuoneessa” tarkoittaa sekä samaa
kuin ”olen työhuoneessani tai kahvihuoneessa, mutta en molemmissa” että samaa
kuin ”olen työhuoneessani tai kahvihuoneessa (tai molemmissa)”.
Tämä johtuu siitä, että ei voida saada aikaan tilannetta, jossa ne
tuottaisivat eri totuusarvon, koska tapausta ”molemmissa” ei voida toteuttaa.
Vastaava ei päde ilmaukselle ”jos en ota maitoa, niin otan sokeria”.
Maitoa ja sokeria voi ottaa yhtäaikaa.
Kun niitä otetaan yhtäaikaa, ”jos en ota maitoa, niin otan sokeria” on tosi ja
”otan maitoa tai sokeria” on tosi, mutta ”otan maitoa tai sokeria, mutta en
molempia” on epätosi.
Siis työ- ja kahvihuone -esimerkin käyttäminen mallina ilmauksen ”jos ¬φ
niin ψ” tulkitsemiseksi saattaa johtaa väärään lopputulokseen, joka
virheellisesti sulkee pois mahdollisuuden, että sekä φ että ψ pätee.
Se, että esimerkissä sekä φ että ψ ei voi päteä, ei johdu ilmauksen ”jos ¬φ
niin ψ” merkityksestä, vaan siitä, että esimerkissä käytettiin sellaista
konkreettista kohdetta (ihmistä), jolle φ ja ψ eivät voi päteä yhtäaikaa.
Konkreettisen kohteen mukana päättelyyn tuli jotain ylimääräistä, joka
vääristää lopputulosta.
Väittämä ”jos φ niin ψ” todellakin tarkoittaa samaa kuin ¬φ ∨ ψ.
Niinpä esimerkiksi ”jos otan kahvia niin en ota kahvia” tarkoittaa samaa kuin
”en ota kahvia tai en ota kahvia”, joka tarkoittaa samaa kuin ”en ota kahvia”.
Saadaksemme lisää harjoitusta, johdamme toisellakin tavalla kaavan
ilmaukselle ”jos otan kahvia, niin otan myös sokeria”.
Operaattorit → ja ↔
Olkoot käytettävissä myös operaattorit → eli ”jos … niin …” sekä ↔ eli ”…
jos ja vain jos …” (kirjoitetaan MathCheckille --> ja
<->).
Kirjoita seuraavat väittämät kaavana:
Kannattaa muistaa, että φ → ψ tarkoittaa samaa kuin ¬φ ∨ ψ, vaikka siitä
seuraisi kummallisen tuntuisia asioita.
Ne kummallisen tuntuiset asiat ovat logiikan mukaisia — tietysti sillä
varauksella, että päättelyssä ei tehty virhettä.
Tästä eteenpäin halutaan mahdollisimman lyhyt vastaus.
Se saattaa olla rakenteeltaan olennaisesti erilainen kuin sanallinen ilmaus,
mutta tarkoittaa silti loogisesti samaa.
Esimerkiksi ”Otan kahvia tai en ota kahvia” on suoraan kaavaksi käännettynä
K ∨ ¬K, mutta se tarkoittaa samaa kuin T eli ”true” eli
tosi.
(Varoitus: tämä ei päde niin sanotussa kolmiarvologiikassa, katso jäljempää.)
MathCheck näyttää palautteessaan kaavan, joka vastaa suoraan sanallista
ilmausta.
Lyhyesti kolmiarvologiikasta
Oppikirjoissa käsitellään lähes poikkeuksetta vain kaksiarvologiikkaa.
Sen totuusarvot ovat F ja T.
Siinä käsitellään vain hyvin määriteltyjä väittämiä.
Tällainen logiikka ei riitä esimerkiksi sen selvittämiseen, millä x:n
arvoilla
1
x
< 0 ja millä
1
x
≥ 0.
Jos x = 0, niin kumpikaan niistä ei ole tosi, koska nollalla ei voi
jakaa.
Toisaalta, jos molemmat julistetaan epätodeksi, niin menetetään se tosiasia,
että reaaliluvuilla a < b tarkoittaa aina samaa kuin
¬(a ≥ b).
Siksi MathCheck käyttää logiikkaa, jossa on kolmas totuusarvo U.
Se edustaa määrittelemättömiä väitteitä.
Sille pätee, että ¬U tuottaa U.
Jos x = 0, niin sekä
1
x
< 0 että
1
x
≥ 0 tuottaa U.
Myös tietokoneohjelma voi joutua määrittelemättömään tilanteeseen.
Silloin se voi kaatua.
Jos esimerkiksi taulukko A on indeksoitu 0:sta (n − 1):een eikä
sisällä etsittyä arvoa, niin
i := 0 whileA[i] ≠ etsitty && i < ndoi := i + 1
kokeilee lopulta onko A[n] ≠ etsitty.
Silloin se yrittää käyttää A:ta ohi takarajan, mikä voi kaataa
ohjelman.
Toisaalta
i := 0 whilei < n && A[i] ≠ etsitty
doi := i + 1
ei kaadu.
Ero johtuu siitä, että ehto1 && ehto2 lasketaan laskemalla ensin
ehto1, ja jos se tuottaa F niin ei edes yritetä laskea ehto2.
Siksi, kun i = n, jälkimmäinen ohjelma lopettaa testin i
< n ansiosta eikä niin ollen kokeile, onko A[n] ≠
etsitty.
Huomaamme, että ehto1 && ehto2 ei välttämättä toimi samalla
tavalla kuin ehto2 && ehto1.
Tämä on olennainen ero siihen, että logiikassa φ ∧ ψ tarkoittaa samaa kuin
ψ ∧ φ.
Siksi MathCheck ei salli symbolin && käyttöä esittämään ∧.
Tämä ilmiö pystytään esittämään U:n avulla.
Kun U on mukana, niin φ ∧ (¬φ ∨ ψ) käyttäytyy samoin kuin φ && ψ,
ja siis eri tavalla kuin φ ∧ ψ.
Kun U ei ole mukana, niin ilmiötä ei pystytä esittämään, jolloin kaikki
kolme käyttäytyvät samalla tavalla.
Ihmetyttääkö, miksi nyt käytettiin ≡, kun aina aikaisemmin on käytetty ⇔?
Siksi, että useimmiten ollaan kiinnostuneita vain siitä, onko väittämä tosi
vai ei, eikä haluta erotella sitä, onko väittämä epätosi vai määrittelemätön.
Näin on esimerkiksi yhtälöitä ratkaistaessa.
⇔ vertaa kaavoja sillä tavalla.
Nyt kuitenkin tarvittiin tämä ero.
≡ vertaa kaavoja siten, että kaikki kolme totuusarvoa F,
U ja T katsotaan eri asioiksi.