ALKEIS-kielen semantiikan aksiomaattinen määrittely

Koko: px
Aloita esitys sivulta:

Download "ALKEIS-kielen semantiikan aksiomaattinen määrittely"

Transkriptio

1 ALKEIS-kielen semantiikan aksiomaattinen määrittely Antti Jokipii Antti Vuorenmaa Eero Lempinen Pete Räsänen Tiivistelmä Kuvaamme kurssilla esimerkkikielenä kehitetyn ALKEIS-ohjelmointikielen semantiikan aksiomaattisesti sekä käymme läpi kielellä kirjoitettujen ohjelmien oikeellisuustodistuksia. 1 Johdanto Tony Hoaren vuonna 1969 esittelemä tietokoneohjelmien verifiointimenetelmä [1] perustuu kolmikoihin, jotka ovat muotoa {P} S {Q}, missä S edustaa suoritettavaa ohjelmaa tai koodiriviä, {P} joukkoa muuttujien arvoja koskevia väittämiä ennen S:n suoritusta ja {Q} joukkoa väittämiä S:n suorituksen jälkeen. Hoaren logiikalla pyritään todistamaan S:n osittainen oikeellisuus, ts. "Mikäli esiehto (engl. precondition) {P} on totta ennen S:n suoritusta ja S pysähtyy, niin jälkiehto (engl. postcondition) {Q} on totta S:n suorituksen jälkeen." Esi- ja jälkiehtojen sanotaan yhdessä muodostavan ohjelman spesifikaation. Käytännön esimerkkinä kolmikosta voidaan esittää { x = 0 } x := x + 2 { x 1 }, missä esiehto olettaa, että muuttujan x arvo on 0 ennen sijoitusoperaation suorittamista ja jälkiehto olettaa, että x 1 sijoituksen jälkeen. Sittemmin tällaista aksiomaattista lähestymistapaa on sovellettu ohjelmointikielten semantiikan määräämiseen (mm. [2]) osoittamalla kielen jokaiselle syntaktiselle rakenteelle päättelysääntö (engl. inference rule), joka kuvaa ko. rakenteen merkityksen. Tässä artikkelissa määrittelemme kurssilla esimerkkikielenä kehitetyn ja käytetyn ALKEIS-ohjelmointikielen semantiikan aksiomaattisesti ja käymme läpi myös lyhyitä todistuksia, jotka selventänevät päättelysääntöjen ideaa. Seuraavaksi hahmottelemme ALKEISkielen syntaksin karkealla tasolla, jonka jälkeen esittelemme päättelysäännöt erilaisille syntaktisille rakenteille. 2 ALKEIS-kielen tyypit ja syntaksi ALKEIS-kielessä on kaksi tietotyyppiä, kokonaislukujen esittämiseen tarkoitettu int ja liukuluvuille float. Lukualueet ja tarkkuus riippuvat kulloisestakin toteutuksesta. Kielen syntaksin lähtöproduktio on StatementList, joka koostuu yhdestä tai usemmasta Statementista: Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos. 1

2 StatementList ::= Statement StatementList Statement Statement puolestaan edustaa sijoituslausetta, while-silmukkaa, iflausetta, I/O-operaatiota tai lohkoa: Statement ::= Id := Expr ; while Expr do StatementList od if Expr then StatementList else StatementList fi put Expr ; get Id ; begin Vars StatementList end, missä Id on muuttujan nimi, Expr laskulauseke: Expr ::= Id IntLit FloatLit Expr + Expr Expr - Expr Expr * Expr Expr / Expr Expr mod Expr Expr == Expr Expr <= Expr ( Expr ) ja Vars yhden tai useamman muuttujan esittely: Vars ::= var Id Vars, Id Operaattorit +, -, *, / ja mod vastaavat tavallisia laskutoimituksia toiminnaltaan ja suoritusjärjestykseltään. Mikäli operandit ovat eri tyyppiä, kummatkin muunnetaan floattyyppisiksi ennen operaatiota ja paluuarvo on float-tyyppinen. Vertailuoperaattorit == ja <= palauttavat kokonaisluvun 1, mikäli vertailu on totta, muussa tapauksessa palautetaan 0. Tyyppimuunnokset tehdään samalla tavalla kuin muidenkin operaattoreiden kanssa. 3 Sijoituslause ja aksioomat Sijoitusaksiooma (engl. assignment axiom) määrittää esiehdon annetun sijoitusoperaation ja jälkiehdon perusteella: { P[E/x] } x := E { P }, missä P[E/x] tarkoittaa P:tä, jossa kaikki x:n vapaat esiintymät on korvattu lausekkeen E arvolla. Esimerkiksi seuraava kolmikko on sijoitusaksiooman perusteella tosi: { x + 1 = 2 } x := x + 1 { x = 2 }, sillä esiehto { x + 1 = 2 } saadaan jälkiehdosta { x = 2 } sijoittamalla x:n paikalle lauseke x + 1. Sijoitusaksiooman lisäksi muita aksioomia ovat mm. normaalit lukujen laskusäännöt (kommutatiivisuus, assosiatiivisuus, jne). Niitä ei kuitenkaan tässä käydä. 4 Seuraus Seuraussuhteen (engl. consequence) päättelysääntöjä on kaksi. Ensimmäistä käytetään vahventamaan esiehtoa ja toista heikentämään jälkiehtoa. Seuraus 1: Seuraus 2: P Q, {Q} S {R} {P} S {R} {P} S {Q}, Q R {P} S {R} Seuraus ei siis liity erityisesti mihinkään yksittäiseen ALKEIS-kielen syntaksin produktioon, vaan se on yleispätevä todistamisen apukeino. 2 Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos.

3 4.1 Esimerkki Olkoon annettuna kolmikko { x = y } x := y + 1 { x > y x = 1 y = 0 }, mikä Seuraus 1:stä soveltamalla saadaan muotoon: { x = 0 y = 0 x = y } x := y + 1 { x > y x = 1 y = 0 }, ja Seuraus 2 :sta soveltamalla muotoon { x = 0 y = 0 x = y } x := y + 1 { x > y }. Huom. Edellisessä esimerkissä ei todistettu annetun ohjelman oikeellisuutta, sillä siinä ei sovellettu sijoitusaksioomaa. Tarkoituksena oli näyttää kuinka esiehtoja voidaan lisätä ja jälkiehtoja karsia. 5 Yhdistäminen Yhdistämissäännöllä (engl. composition rule) liitetään yhteen kaksi peräkkäistä lausetta, joista ensimmäisen jälkiehto on jälkimmäisen esiehto. Tämä on välttämätöntä, jotta todistuksissa voidaan käsitellä useammasta lauseesta koostuvia ohjelmia. Yhdistämissääntö: 5.1 Esimerkki {P} S 1 {Q}, {Q} S 2 {R} {P} S1; S2 {R} { x = 0 } x := x + 1 { x = 1 }, { x = 1 } x := x + 1 { x 2 } { x = 0 } x := x + 1; x := x + 1 { x 2 } Tässä esimerkissä ensimmäisen kolmikon jälkiehto { x = 1 } on sama kuin jälkimmäisen kolmikon esiehto. Yhdistämissäännön perusteella näistä kahdesta voidaan yhdistää kolmikko, jonka esiehto on ensimmäisen kolmikon esiehto ja jälkiehto on jälkimmäisen kolmikon jälkiehto. Yhdistetyn kolmikon lause saadaan liittämällä kolmikoiden lauseet yhteen erotettuna puolipisteellä. Jälleen on huomattava, että edellisessä esimerkissä ei varsinaisesti todistettu mitään (sillä sijoitusaksioomaa ei sovellettu kolmikoiden sijoituslauseisiin). Seuraavassa esimerkissä sovelletaan kaikkia tähän mennessä esitettyjä sääntöjä ja todistetaan kahdesta sijoituslauseesta koostuva ohjelma osittain oikeelliseksi. 5.2 Esimerkki { x = 0 y = x } x := x + 1; y := y + x { y > 0 } Ensimmäiselle sijoituslauseelle saadaan jälkiehto soveltamalla sijoitusaksioomaa: { x = 0 y = x } x := x + 1 { x = 1 y = x 1 }. Käytetään saatua jälkiehtoa toisen sijoituslauseen esiehtona ja etsitään sille jälkiehto soveltamalla toistamiseen sijoitusaksioomaa: { x = 1 y = x 1 } y := y + x { x = 1 y = x 1 + x }. Koska { x = 1 y = x 1 + x } { y > 0 }, niin toisen sijoituslauseen kolmikko voidaan kirjoittaa muodossa (ts. sen jälkiehtoa voidaan heikentää): { x = 1 y = 0 } y := y + x { y > 0 }. Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos. 3

4 Lopuksi liitetään palat yhteen soveltamalla yhdistämissääntöä (tämä voidaan tehdä, sillä ensimmäisen jälkiehto on jälkimmäisen esiehto): 6 Silmukat { x = 0 y = x } x := x + 1; y := y + x { y > 0 }. ALKEIS-kielen silmukkarakenteen semantiikka määräytyy silmukan päättymisehdon (E) ja muuttumattoman ehdon, invariantin (P), totuusarvojen tarkastelulla: { P E } S { P } { P } while E do S od { P E }, missä S edustaa silmukassa suoritettavia operaatioita. Säännöstä käytetään tässä artikkelissa nimeä toistosääntö (engl. rule of iteration). Koska kielessä käytetään kokonaislukuja 0 ja 1 totuusarvoina, E on tulkittava siten, että lausekkeen E arvo on 1 ja E siten, että E:n arvo on 0. Todistuksia tehdessä käyttökelpoisen invariantin löytäminen ei ole välttämättä helppoa, mutta annettu väittämä P voidaan todistaa invariantiksi osoittamalla, että P on totta ennen silmukan suoritusta, P on totta silmukan suorituksen aikana ja P on totta silmukan suorituksen jälkeen. 6.1 Esimerkki { x 1 } while ( x 1 ) do { x := x - 1} od { x = 0 } Arvataan invariantiksi { x 0 }. Invarianttiehdokas on selvästi totta ennen silmukan suoritusta, sillä esiehdosta { x 1 } seuraa { x 0 }. Aloitetaan silmukan todistaminen mää- rittelemällä sijoituslauseelle x := x 1 esi- ja jälkiehdot: { x 1 } x := x 1 { x 0 }, mikä (sijoitusaksiooman perusteella) pitää paikkansa, sillä jälkiehtoon { x 0 } sijoittamalla muuttujan x paikalle lauseke x 1 saadaan haluttu esiehto { x 1 }. Tätä esiehtoa voidaan vielä vahvistaa ensimmäisen seuraussäännön avulla, jolloin uudeksi esiehdoksi saadaan { x 1 x 0 }. Nyt ollaan siis todistettu tällaisen kolmikon osittainen oikeellisuus: { x 1 x 0 } x := x 1 { x 0 }. Seuraavaksi sovelletaan toistosääntöä käyttäen väittämää x 0 invarianttina P ja silmukan ehtoa x 1 ehtona E: { x 1 x 0 } x := x 1 { x 0 } { x 0 } while x 1 do x := x 1 od { x 0 (x 1) }. Haluttu jälkiehto { x = 0 } saadaan ehdosta { x 0 (x 1) } seuraavalla päättelyllä (oletetaan x kokonaisluvuksi): { x 0 (x 1) } { x 0 x < 1 } { x = 0 }. On paikallaan vielä varmistaa, että invariantti { x 0 } on totta 1. ennen silmukkaa (tämä nähtiin jo alussa), 2. silmukan suorituksen aikana (ok, sillä { x 0 } esiintyy sijoituslauseen esi- ja jälkiehdossa), ja 3. silmukan suorituksen jälkeen (ok, sillä { x 0 } on jälkiehdon { x = 0 } heikennys). 4 Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos.

5 7 If-lause If-lauseelle on voimassa sääntö if-then-else: { P E } S 1 { Q }, { P E } S 2 { Q } { P } if E then S 1 else S 2 fi { Q } Kuten while-lauseen määrittelyn yhteydessä, tässäkin on muistettava totuusarvojen korvaaminen kokonaisluvuilla. 7.1 Esimerkki { x = 2 y = 5 } if ( x y ) then { x := y + 1 } else ; fi { x > y } Lähdetään jälleen liikkeelle sijoituslauseesta x := y + 1 keksimällä sille esija jälkiehdot (ja todistamalla näin saatava sijoituslause): { x y } x:= y + 1 { x > y }, mikä on totta, sillä jälkiehtoon { x > y } sijoittamalla x:n paikalle y + 1 saadaan tautologia 1 { y + 1 > y }, joten esiehtona voi olla mitä tahansa, erityisesti siis { x y } kelpaa. Seuraavaksi sovelletaan if-then-elsesääntöä, valitaan ehdoksi P { x = 2 y = 5 }, silmukkaehdoksi E { x y }, E:n negaatioksi { x > y } ja jälkiehdoksi Q ehto { x > y }: { x = 2 y = 5 x y } x:= y + 1 { x > y }, { x = 2 y = 5 x > y } { x > y } { x = 2 y = 5 } if x y then x := y + 1 else ; fi { x > y }, mikä on haluttu muoto. 1 tautologia = väite, joka on muuttujiensa arvoista riippumatta aina tosi 8 I/O-operaatiot Syöte- ja tulostusvirrat mallinnetaan merkeistä koostuvina jonoina, joista lukuoperaatiossa (merkitään get) poistetaan alusta ja joihin kirjoitusoperaatiossa (merkitään put) lisätään loppuun alkio. Syötevirtaa merkitään symbolilla IN ja tulostusvirtaa symbolilla OUT. Merkintä IN = al tarkoittaa, että syötevirran ensimmäinen alkio on a, jota seuraa jono L, jossa on 0 tai useampi alkio. Vastaavasti OUT = La tarkoittaa, että tulostusvirran viimeinen alkio on a, jota edeltää jono L, jossa on 0 tai useampi alkio. Seuraavat päättelysäännöt määräävät luku- ja kirjoitusoperaatioiden merkityksen: Luku: { IN = al P[a/x] } get x { IN = L P } Kirjoitus: { OUT = L E = a P } put E { OUT = La E = a P }, missä E tarkoittaa lauseketta, jonka arvo on a. 8.1 Esimerkki { IN = [17, 5]L 1 OUT = L 2 } get x; get y; put x + y { IN = L 1 OUT = L 2 [22] } Lähdetään liikkeelle ensimmäisestä getoperaatiosta. Käytetään esiehtona ohjelman esiehtoa ja poistetaan INjonosta 1. alkio. OUT-jono pysyy muuttumattomana. Kun jälkiehdossa { x = 17 } x:n paikalle sijoitetaan luettu alkio Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos. 5

6 17, niin saadaan jälleen tautologia, joka ei siis vaadi esiehdolta mitään lisää: { IN = [17, 5]L 1 OUT = L 2 } get x { IN = [5]L 1 OUT = L 2 x = 17 } Siirrytään toiseen get-operaatioon. Käytetään edellisen get-operaation jälkiehtoa tämän get-operaation esiehtona (jotta jatkossa päästään soveltamaan yhdistämissääntöä). INjonosta poistuu jälleen alkio, OUT pysyy ennallaan ja jälkiehdossa { y = 5 } on jälleen tautologia, joten muita vaatimuksia esiehdolle ei tule: { IN = [5]L 1 OUT = L 2 x = 17 } get y { IN = L 1 OUT = L 2 x = 17 y = 5 } Koska ensimmäisen get-operaation jälkiehto on toisen esiehto, yhdistämissäännön perusteella kolmikot voidaan yhdistää: { IN = [17, 5]L 1 OUT = L 2 } get x; get y; { IN = L 1 OUT = L 2 x = 17 y = 5 } Siirrytään put-operaatioon. Käytetään yhdistetyn kolmikon jälkiehtoa putoperaation esiehtona (jotta päästään taas soveltamaan yhdistämissääntöä). Esiehtoa voidaan vahvistaa oletuksella x + y = 22, sillä se suoraa oletuksesta { x = 17 y = 6 }. IN-jono pysyy muuttumattomana, OUT:iin lisätään lausekkeen x + y arvo (joka nyt siis oletuksen mukaan on 22), x, y ja x + y pysyvät muuttumattomina. Saadaan siis kolmikko: { IN = L 1 OUT = L 2 x = 17 y = 5 x + y = 22 } put x + y; { IN = L 1 OUT = L 2 [22] x = 17 y = 5 x + y = 22 } Yhdistetään kolmikot (tämä voidaan tehdä, sillä put-kolmikon esiehto on yhtäpitävä get-kolmikon jälkiehdon kanssa). put-kolmikon jälkiehtoa voidaan heikentää poistamalla siitä ehto { x = 17, y = 5, x + y = 22}. Näin saadaan { IN = [17, 5]L 1 OUT = L 2 } get x; get y; put x + y; { IN = L 1 OUT = L 2 [22] } mikä on sitä, mitä haluttiin. 9 Lohkot ALKEIS-kielen lohko (engl. block) koostuu joukosta lauseita, joissa on voimassa paikallisesti määriteltyjä muuttujia. Lohkon päättelysäännössä { P } S { Q } { P } begin D S end; { Q } D edustaa paikallisten muuttujien määrittelyä (kieliopin Vars-produktio) ja ehdot P ja Q eivät saa sisältää D:ssä esiteltyjä muuttujia. Sisäkkäisten lohkojen samannimiset muuttujat tulee pystyä erottelemaan. Tämä voidaan esimerkiksi tehdä uudelleennimeämällä ohjelman kaikki muuttujat siten, että muuttujien vanhaan nimeen lisätään # -merkki (tai mikä tahansa muu merkki, jota ALKEISkielen konkreetti syntaksi ei salli muuttujien nimissä), jonka jälkeen 6 Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos.

7 kirjoitetaan kulloisenkin lohkon syvyys ohjelman lohkohierarkiassa. Esimerkiksi siis ohjelman begin end; var x, var y begin end; var y y = y + 1; muuttujat seuraavasti: begin end; var x#1, var y#1 begin end; var y#2 y#2 = y#2 + 1; 10 Terminoituvuus uudelleennimetään Tässä luvussa käsittelemme lyhyesti ALKEIS-kielellä kirjoitettujen ohjelmien pysähtymisongelmaa. Asia ei suoranaisesti liity ohjelmointikielen semantiikan määrittämiseen, mutta on hyvin keskeinen oikeellisuustodistuksissa. Esitystapa mukailee lähteen [3] esitystä. Ohjelma P on terminoituva ts. se pysähtyy, joss se ei jää ikuiseen silmukkaan. Tähänastisilla menetelmillä on kyetty todistamaan osittainen oikeellisuus, ts. jos esiehdot täyttyvät ja ohjelma terminoituu, niin myös jälkiehdot täyttyvät. Ohjelman täydellinen oikeellisuus edellyttää, että aina esiehtojen ollessa voimassa ohjelma terminoituu ja antaa oikeat tulokset. Ohjelmissa on kaksi erityyppistä syntaktista rakennetta, jotka mahdollistavat ikuiseen silmukkaan jäämisen: 1. while-silmukat 2. rekursiiviset aliohjelmakutsut. While-silmukka todistetaan terminoituvaksi löytämällä sille ns. terminoiva lauseke (engl. termination expression). Rekursio todistetaan terminoituvaksi induktiotodistuksella. Koska käsittelemässämme ALKEISkielen versiossa ei aliohjelmia ole, keskitymme tarkastelemaan vain silmukoita. Seuraavaksi käydään läpi terminoivan lausekkeen määritelmä ja todistetaan yksinkertainen silmukka terminoituvaksi Aito ja koherentti järjestysrelaatio Joukon W osittainen järjestys on koherentti (engl. well-founded), joss kaikille W:n väheneville sekvensseille x 1 x 2 x 3... on olemassa luonnollinen luku k siten, että x i = x j i, j k. Järjestysrelaatio on aito (engl. strict), joss se ei ole refleksiivinen ja missään vähenevässä sekvenssissä ei esiinny sama alkio useampaa kertaa (ja näin kaikki vähenevät sekvenssit ovat äärellisiä) Terminoiva lauseke Olkoon joukon W aito ja koherentti järjestysrelaatio. Lauseke E on silmukan S terminoiva lauseke, joss 1. E:n arvo W jokaisella S:n iteraatiolla ja 2. jokaisella toistolla E:n arvo on :n mielessä pienempi kuin edellisellä kerralla. Osoitettaessa annettua silmukkaa terminoituvaksi on siis löydettävä Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos. 7

8 määritelmissä esiintyvät joukko W, järjestys ja lauseke E, jolla on W:n ja :n suhteen vaaditut ominaisuudet. Seuraavaksi katsotaan, kuinka tämä käytännössä tehdään Esimerkki Seuraava ohjelma laskee luonnollisen luvun 2 (muuttuja n) kertoman: { n N k = 1 i = n } while ( i 1 ) do od { k = n! } k := k * i; i := i 1; Nyt joukoksi W kelpaavat luonnolliset luvut, relaatioksi normaali luonnollisten lukujen järjestys ja terminoivaksi lausekkeeksi E muuttujan i arvo. Käytetään 3 ehtoa i Ν silmukkainvarianttina. Tarkistetaan terminoivan lausekkeen määritelmässä annetut ehdot: 1. E:n arvo W jokaisella S:n iteraatiolla ; Tämä on totta, sillä se sisältyy invarianttiehtoon i Ν. 2. Jokaisella toistolla E:n arvo on :n mielessä pienempi kuin edellisellä kerralla ; { i = A } k:= k * i; i := i 1 { A i = A 1 }. Näin siis voidaan päätellä esimerkin while-silmukan terminoituvan. Mikäli lisäksi osoittaisiin jälkiehtojen seuraavan esiehdoista, voitaisiin todeta ohjelma täydellisesti oikeelliseksi. 11 Yhteenveto Semantiikan aksiomaattinen määritteleminen ALKEIS-kielelle ja yksinkertaisten ohjelmien todistukset näyttävät siis olevan mahdollisia. Asiat mutkistuvat kun kieleen tuodaan aliohjelmat ja oliot. Artikkelissa ei todistettu esitetyn päättelysäännöstön oikeellisuutta (engl. soundness) tai täydellisyyttä (engl completeness). Seuraussääntö, yhdistämissääntö ja terminoituvuuden tarkastelu eivät varsinaisesti määritä kielen semantiikkaa, mutta ovat keskeisiä käsitteitä todistuksia tehdessä. Viitteet [1] C.A.R. Hoare, An Axiomatic Basis for Computer Programming, Communications of the ACM 12, 1969 [2] C. A. R. Hoare and N. Wirth, An axiomatic definition of the programming language Pascal, Acta Informatica, 2(4), 1973 [3] K. Slonneger, B. L. Kurtz "Formal Syntax and Semantics of Programming Languages: A Laboratory-Based Approach", luku 11, ISBN Addison- Wesley, Tässä luonnolliset luvut alkavat ykkösestä. 3 Oikeasti pitäisi vielä osoittaa, että i Ν kelpaa invariantiksi. 8 Ohjelmointikielten periaatteet, päätösseminaari , Jyväskylän yliopisto, tietotekniikan laitos.

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet ) T-79.144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet 9.1 9.5) 30.11. 3.12.2004 1. Osoita lauselogiikan avulla oheisten ehtolausekkeiden ekvivalenssi. (a)!(a

Lisätiedot

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus FORMAALI SYSTEEMI (in Nutshell): Formaali kieli: aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus esim. SSM:n tai EBNF:n avulla Semantiikka:

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E.

Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E. Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E. Perusaksioomat: Laki 1: Kukin totuusfunktio antaa kullekin propositiolle totuusarvoksi joko toden T tai epätoden

Lisätiedot

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

Lisätiedot

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos. TIE303 Formaalit menetelmät, kevät 2005 Logiikan kertausta Antti-Juhani Kaijanaho antkaij@mit.jyu.fi Jyväskylän yliopisto Tietotekniikan laitos TIE303 Formaalit mentetelmät, 2005-01-27 p. 1/17 Luento2Luentomoniste

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita! Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita! eli... Hyvä kaava sanoo enemmän kuin,... tuhat riviä koodia!... sata riviä tekstiä!... kymmenen diagrammia! Sopimusohjelmointi

Lisätiedot

Toinen muotoilu. {A 1,A 2,...,A n,b } 0, Edellinen sääntö toisin: Lause 2.5.{A 1,A 2,...,A n } B täsmälleen silloin kun 1 / 13

Toinen muotoilu. {A 1,A 2,...,A n,b } 0, Edellinen sääntö toisin: Lause 2.5.{A 1,A 2,...,A n } B täsmälleen silloin kun 1 / 13 2 3 Edellinen sääntö toisin: Lause 2.5.{A 1,A 2,...,A n } B täsmälleen silloin kun {A 1,A 2,...,A n,b } 0, jatkoa jatkoa 1 / 13 2 3 Edellinen sääntö toisin: Lause 2.5.{A 1,A 2,...,A n } B täsmälleen silloin

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. syyskuuta 2016 Sisällys a https://tim.jyu.fi/view/kurssit/tie/ tiea241/2016/videoiden%20hakemisto Matemaattisen

Lisätiedot

Johdatus matemaattiseen päättelyyn

Johdatus matemaattiseen päättelyyn Johdatus matemaattiseen päättelyyn Maarit Järvenpää Oulun yliopisto Matemaattisten tieteiden laitos Syyslukukausi 2015 1 Merkintöjä 2 Todistamisesta 2 3 Joukko-oppia Tässä luvussa tarkastellaan joukko-opin

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Miten osoitetaan joukot samoiksi?

Miten osoitetaan joukot samoiksi? Miten osoitetaan joukot samoiksi? Määritelmä 1 Joukot A ja B ovat samat, jos A B ja B A. Tällöin merkitään A = B. Kun todistetaan, että A = B, on päättelyssä kaksi vaihetta: (i) osoitetaan, että A B, ts.

Lisätiedot

-Matematiikka on aksiomaattinen järjestelmä. -uusi tieto voidaan perustella edellisten tietojen avulla, tätä kutsutaan todistamiseksi

-Matematiikka on aksiomaattinen järjestelmä. -uusi tieto voidaan perustella edellisten tietojen avulla, tätä kutsutaan todistamiseksi -Matematiikka on aksiomaattinen järjestelmä -uusi tieto voidaan perustella edellisten tietojen avulla, tätä kutsutaan todistamiseksi -mustavalkoinen: asia joko on tai ei (vrt. humanistiset tieteet, ei

Lisätiedot

LAUSELOGIIKKA (1) Sanalliset ilmaisut ovat usein epätarkkoja. On ilmaisuja, joista voidaan sanoa, että ne ovat tosia tai epätosia, mutta eivät molempia. Ilmaisuja, joihin voidaan liittää totuusarvoja (tosi,

Lisätiedot

Rekursiiviset tyypit

Rekursiiviset tyypit Rekursiiviset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. helmikuuta 2007 Hiloista Kiintopisteet (Ko)rekursio Rekursiiviset

Lisätiedot

4 Matemaattinen induktio

4 Matemaattinen induktio 4 Matemaattinen induktio Joidenkin väitteiden todistamiseksi pitää näyttää, että kaikilla luonnollisilla luvuilla on jokin ominaisuus P. Esimerkkejä tällaisista väitteistä ovat vaikkapa seuraavat: kaikilla

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Luonnollisten lukujen ja kokonaislukujen määritteleminen

Luonnollisten lukujen ja kokonaislukujen määritteleminen Luonnollisten lukujen ja kokonaislukujen määritteleminen LuK-tutkielma Jussi Piippo Matemaattisten tieteiden yksikkö Oulun yliopisto Kevät 2017 Sisältö 1 Johdanto 2 2 Esitietoja 3 2.1 Joukko-opin perusaksioomat...................

Lisätiedot

WP-LASKENNAN OIKEELLISUUS JA TÄYDELLISYYS

WP-LASKENNAN OIKEELLISUUS JA TÄYDELLISYYS Antti Vuorenmaa WP-LASKENNAN OIKEELLISUUS JA TÄYDELLISYYS Tietotekniikan pro gradu -tutkielma Ohjelmistotekniikan linja 24.6.2003 Jyväskylän yliopisto Tietotekniikan laitos Tekijä: Antti Vuorenmaa Yhteystiedot:

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. maaliskuuta 2011 Sisällys Sisällys Väitelauseet lause (tai virke), joka sanoo jonkin asian pitävän paikkaansa

Lisätiedot

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista Matematiikan johdantokurssi, syksy 06 Harjoitus, ratkaisuista. Valitse seuraaville säännöille mahdollisimman laajat lähtöjoukot ja sopivat maalijoukot niin, että syntyy kahden muuttujan funktiot (ks. monisteen

Lisätiedot

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen!

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen! Matematiikan johdantokurssi Kertausharjoitustehtävien ratkaisuja/vastauksia/vihjeitä. Osoita todeksi logiikan lauseille seuraava: P Q (P Q). Ratkaisuohje. Väite tarkoittaa, että johdetut lauseet P Q ja

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet

MS-A0402 Diskreetin matematiikan perusteet MS-A0402 Diskreetin matematiikan perusteet Osa 1: Joukko-oppi ja logiikka Riikka Kangaslampi 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Kiitokset Nämä luentokalvot perustuvat Gustaf

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa. Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa. Vastaus 2. Vertaillaan

Lisätiedot

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }? Vastaus

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

Insinöörimatematiikka A

Insinöörimatematiikka A Insinöörimatematiikka A Mika Hirvensalo mikhirve@utu.fi Matematiikan ja tilastotieteen laitos Turun yliopisto 2018 Mika Hirvensalo mikhirve@utu.fi Luentoruudut 3 1 of 23 Kertausta Määritelmä Predikaattilogiikan

Lisätiedot

Todistusmenetelmiä Miksi pitää todistaa?

Todistusmenetelmiä Miksi pitää todistaa? Todistusmenetelmiä Miksi pitää todistaa? LUKUTEORIA JA TO- DISTAMINEN, MAA11 Todistus on looginen päättelyketju, jossa oletuksista, määritelmistä, aksioomeista sekä aiemmin todistetuista tuloksista lähtien

Lisätiedot

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 5 Ratkaisuehdotukset

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 5 Ratkaisuehdotukset HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 5 Ratkaisuehdotukset 1. Päättele resoluutiolla seuraavista klausuulijoukoista: (a) {{p 0 }, {p 1 }, { p 0, p 2 },

Lisätiedot

Tehtävä 1. Päättele resoluutiolla seuraavista klausuulijoukoista. a. 1 {p 3 } oletus. 4 {p 1, p 2, p 3 } oletus. 5 { p 1 } (1, 2) 7 (4, 6)

Tehtävä 1. Päättele resoluutiolla seuraavista klausuulijoukoista. a. 1 {p 3 } oletus. 4 {p 1, p 2, p 3 } oletus. 5 { p 1 } (1, 2) 7 (4, 6) Tehtävä 1 Päättele resoluutiolla seuraavista klausuulijoukoista. a. {{p 0 }, {p 1 }, { p 0, p 2 }, {p 1, p 2, p 3 }, { p 2, p 3 }, {p 3 }}, b. {{ p 0, p 2 }, {p 0, p 1 }, {{ p 1, p 2 }, { p 2 }}, c. {{p

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet

MS-A0402 Diskreetin matematiikan perusteet MS-A040 Diskreetin matematiikan perusteet Osa : Relaatiot ja funktiot Riikka Kangaslampi 017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Relaatiot Relaatio Määritelmä 1 Relaatio joukosta A

Lisätiedot

Tietojenkäsittelyteorian alkeet, osa 2

Tietojenkäsittelyteorian alkeet, osa 2 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. syyskuuta 2016 Sisällys vs Ovat eri asioita! Älä sekoita niitä. Funktiot Funktio f luokasta A luokkaan B, merkitään

Lisätiedot

uv n, v 1, ja uv i w A kaikilla

uv n, v 1, ja uv i w A kaikilla 2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu 811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,

Lisätiedot

Johdanto II. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Johdanto II. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos. TIE303 Formaalit menetelmät, kevät 2005 Johdanto II Antti-Juhani Kaijanaho antkaij@mit.jyu.fi Jyväskylän yliopisto Tietotekniikan laitos TIE303 Formaalit mentetelmät, 2005-01-20 p. 1/21 Luento2Luentomoniste

Lisätiedot

1. Logiikan ja joukko-opin alkeet

1. Logiikan ja joukko-opin alkeet 1. Logiikan ja joukko-opin alkeet 1.1. Logiikkaa 1. Osoita totuusarvotauluja käyttäen, että implikaatio p q voidaan kirjoittaa muotoon p q, ts. että propositio (p q) ( p q) on identtisesti tosi. 2. Todista

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012 TIEA241 Automaatit ja, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 2. helmikuuta 2012 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti lueteltava

Lisätiedot

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Alityypitys TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 5. maaliskuuta 2007 Muistatko tietueet? {I 1 = E 1,..., I n = E n } : {I

Lisätiedot

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään 5. Primitiivinen alkio 5.1. Täydennystä lukuteoriaan. Olkoon n Z, n 2. Palautettakoon mieleen, että kokonaislukujen jäännösluokkarenkaan kääntyvien alkioiden muodostama osajoukko Z n := {x Z n x on kääntyvä}

Lisätiedot

Taulumenetelmä modaalilogiikalle K

Taulumenetelmä modaalilogiikalle K / Kevät 2004 ML-6 1 Taulumenetelmä modaalilogiikalle On vaikeaa löytää Hilbert-tyylisiä todistuksia: Käytössä Modus Ponens -sääntö: jotta voidaan johtaa Q, täytyy johtaa P ja P Q. Mutta mikä on sopiva

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

Logiikka 1/5 Sisältö ESITIEDOT:

Logiikka 1/5 Sisältö ESITIEDOT: Logiikka 1/5 Sisältö Formaali logiikka Luonnollinen logiikka muodostaa perustan arkielämän päättelyille. Sen käyttö on intuitiivista ja usein tiedostamatonta. Mikäli logiikka halutaan täsmällistää esimerkiksi

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx x x x x x x x x Matematiikan johdantokurssi, syksy 08 Harjoitus, ratkaisuista Hanoin tornit -ongelma: Tarkastellaan kolmea pylvästä A, B ja C, joihin voidaan pinota erikokoisia renkaita Lähtötilanteessa

Lisätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti

Lisätiedot

MS-A0401 Diskreetin matematiikan perusteet

MS-A0401 Diskreetin matematiikan perusteet MS-A0401 Diskreetin matematiikan perusteet Osa 2: Relaatiot ja funktiot Riikka Kangaslampi Syksy 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Relaatiot Relaatio Määritelmä 1 Relaatio joukosta

Lisätiedot

Lisää kvanttoreista ja päättelyä sekä predikaattilogiikan totuustaulukot 1. Negaation siirto kvanttorin ohi

Lisää kvanttoreista ja päättelyä sekä predikaattilogiikan totuustaulukot 1. Negaation siirto kvanttorin ohi Lisää kvanttoreista ja päättelyä sekä predikaattilogiikan totuustaulukot 1. Negaation siirto kvanttorin ohi LUKUTEORIA JA TODISTAMINEN, MAA11 Esimerkki a) Lauseen Kaikki johtajat ovat miehiä negaatio ei

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

TIES542 kevät 2009 Denotaatio

TIES542 kevät 2009 Denotaatio TIES542 kevät 2009 Denotaatio Antti-Juhani Kaijanaho 27.1.2009 (korjauksia 28.1.2009) Denotationaalisessa merkitysopissa kukin (ohjelmointi)kielen konstrktiolle määritellään matemaattinen otus, jota sanotaan

Lisätiedot

Loogiset konnektiivit

Loogiset konnektiivit Loogiset konnektiivit Tavallisimmat loogiset konnektiivit ovat negaatio ei konjunktio ja disjunktio tai implikaatio jos..., niin... ekvivalenssi... jos ja vain jos... Sulkeita ( ) käytetään selkeyden vuoksi

Lisätiedot

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Sisällys 3. Pseudokoodi Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen. Ohjausrakenteet: Valinta if- ja if--rakenteilla. oisto while-, do-while- ja for-rakenteilla. 3.1 3.2 Johdanto

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

DFA:n käyttäytyminen ja säännölliset kielet

DFA:n käyttäytyminen ja säännölliset kielet säännölliset kielet TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. marraskuuta 2015 Sisällys toiminta formaalisti Olkoon M = (Q, Σ, δ, q 0, F) deterministinen

Lisätiedot

Ilkka Mellin Todennäköisyyslaskenta Liite 1: Joukko-oppi

Ilkka Mellin Todennäköisyyslaskenta Liite 1: Joukko-oppi Ilkka Mellin Todennäköisyyslaskenta Liite 1: Joukko-oppi TKK (c) Ilkka Mellin (2007) 1 Joukko-oppi >> Joukko-opin peruskäsitteet Joukko-opin perusoperaatiot Joukko-opin laskusäännöt Funktiot Tulojoukot

Lisätiedot

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I MS-A040 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I G. Gripenberg Aalto-yliopisto. maaliskuuta 05 G. Gripenberg (Aalto-yliopisto) MS-A040 Diskreetin matematiikan perusteet Esimerkkejä. ym.,

Lisätiedot

[a] ={b 2 A : a b}. Ekvivalenssiluokkien joukko

[a] ={b 2 A : a b}. Ekvivalenssiluokkien joukko 3. Tekijälaskutoimitus, kokonaisluvut ja rationaaliluvut Tässä luvussa tutustumme kolmanteen tapaan muodostaa laskutoimitus joukkoon tunnettujen laskutoimitusten avulla. Tätä varten määrittelemme ensin

Lisätiedot

Säännöllisten kielten sulkeumaominaisuudet

Säännöllisten kielten sulkeumaominaisuudet Säännöllisten kielten sulkeumaominaisuudet Osoitamme nyt, että säännöllisten kielten joukko on suljettu yhdisteen, konkatenaation ja tähtioperaation suhteen. Toisin sanoen jos A ja B ovat säännöllisiä,

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I MS-A040 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I G. Gripenberg Aalto-yliopisto. maaliskuuta 05 G. Gripenberg (Aalto-yliopisto) MS-A040 Diskreetin matematiikan perusteet Esimerkkejä. ym.,

Lisätiedot

Luonnollisten lukujen induktio-ominaisuudesta

Luonnollisten lukujen induktio-ominaisuudesta Solmu 1/2019 19 Luonnollisten lukujen induktio-ominaisuudesta Tuomas Korppi Johdanto Kuten lukija varmaan tietääkin, luonnollisille luvuille voidaan tehdä induktiotodistuksia. Tämä mahdollisuus on ominainen

Lisätiedot

Ensimmäinen induktioperiaate

Ensimmäinen induktioperiaate 1 Ensimmäinen induktioperiaate Olkoon P(n) luonnollisilla luvuilla määritelty predikaatti. (P(n) voidaan lukea luvulla n on ominaisuus P.) Todistettava, että P(n) on tosi jokaisella n N. ( Kaikilla luonnollisilla

Lisätiedot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu. Johdatus yliopistomatematiikkaan Helsingin yliopisto, matematiikan ja tilastotieteen laitos Kurssikoe 23.10.2017 Ohjeita: Vastaa kaikkiin tehtäviin. Ratkaisut voi kirjoittaa samalle konseptiarkille, jos

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Luonnollisen päättelyn luotettavuus

Luonnollisen päättelyn luotettavuus Luonnollisen päättelyn luotettavuus Luotettavuuden todistamiseksi määrittelemme täsmällisesti, milloin merkkijono on deduktio. Tässä ei ole sisällytetty päättelysääntöihin iteraatiosääntöä, koska sitä

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Jokaisen parittoman kokonaisluvun toinen potenssi on pariton.

Jokaisen parittoman kokonaisluvun toinen potenssi on pariton. 3 Todistustekniikkaa 3.1 Väitteen kumoaminen vastaesimerkillä Monissa tilanteissa kohdataan väitteitä, jotka koskevat esimerkiksi kaikkia kokonaislukuja, kaikkia reaalilukuja tai kaikkia joukkoja. Esimerkkejä

Lisätiedot

4.3. Matemaattinen induktio

4.3. Matemaattinen induktio 4.3. Matemaattinen induktio Matemaattinen induktio: Deduktion laji Soveltuu, kun ominaisuus on osoitettava olevan voimassa luonnollisilla luvuilla. Suppea muoto P(n) : Ominaisuus, joka joka riippuu luvusta

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Johdatus matematiikkaan

Johdatus matematiikkaan Johdatus matematiikkaan Luento 3 Mikko Salo 1.9.2017 Sisältö 1. Logiikasta 2. Suora ja epäsuora todistus 3. Jaollisuus ja alkuluvut Todistus Tähän asti esitetyt todistukset ovat olleet esimerkinomaisia.

Lisätiedot

Johdatus matemaattiseen päättelyyn

Johdatus matemaattiseen päättelyyn Johdatus matemaattiseen päättelyyn Maarit Järvenpää Oulun yliopisto Matemaattisten tieteiden laitos Syyslukukausi 2015 1 Merkintöjä Luonnollisten lukujen joukko N on joukko N = {1, 2, 3,...} ja kokonaislukujen

Lisätiedot

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta.

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta. Väitelause Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta. Tässä P:tä kutsutaan oletukseksi ja Q:ta väitteeksi. Jos yllä oleva väitelause on totta, sanotaan, että P:stä

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015 TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free

Lisätiedot

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset 1. Etsi lauseen (p 0 (p 1 p 0 )) p 1 kanssa loogisesti ekvivalentti lause joka on (a) disjunktiivisessa

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 25.1.2010 1 / 41 Valintakäsky if Tähänastiset ohjelmat ovat toimineen aina samalla tavalla. Usein ohjelman pitäisi

Lisätiedot