Invariantteihin perustuva ohjelmointi

Koko: px
Aloita esitys sivulta:

Download "Invariantteihin perustuva ohjelmointi"

Transkriptio

1 Invariantteihin perustuva ohjelmointi Ralph-Johan Back Abo Akademi ja TUCS 5. kesäkuuta 2006

2 Oikein toimivien ohjelmien konstruointi: vaihtoehdot Oikeellisuuden todistaminen jälkikäteen (Floyd, Naur, Hoare,...). Kirjoitetaan ensin ohjelma, testataan, ja todistetaan oikeaksi Konstruktiivinen todistus (Dijkstra,...). Konstruoidaan ohjelma ja sen todistus samaan aikaan, siten että annetut alku- ja loppuehdot toteutuvat. Invariantteihin perustuva ohjelmointi (Dijkstra?, Reynolds, van Emden, Back,...). Formuloidaan ohjelman invariantit ensiksi, tämän jälkeen konstruoidaan koodi siten että se säilyttää nämä invariantit. (Hehnerillä samanlaisia ideoita, mutta hän käyttää relaatioita eikä predikaatteja).

3 Missä vaiheessa kirjoitetaan kooodi Program code Pre/postconditions Pre/postconditions Pre/postconditions Program code Loop invariants Loop invariants Loop invariants Program code Verification Verification Verification A posteriori proof Dijkstra s approach Invariant based programming

4 Invariantteihin perustuva ohjelmointi: kysymyksiä Mikä on hyvä notaatio invariantteihin perustuvalle ohjelmoinnille (käytämme lyhennettä invarianttiohjelmointi) Mikä on työjärjestys kun rakennetaan invariantteihin perustuva ohjelma. Miten identifioidaan ja formuloidaan ohjelman invariantit ennenkuin koodi on kirjoitettu Minkälaisia eroja on tavallisten ohjelmien ja invarianttiohjelmien välillä. Minkälaista työkalutukea voidaan antaa invarianttiohjelmoinnille. Voidaanko invarianttiohjelmointia hyödyntää opetuksessa.

5 Notaatio: Sisäkkäiset invariantit (nested invariants diagrams)

6 Koodiin vai invariantteihin perustuva rakenne? Ohjelman rakenne on traditionaalisesti perustunut koodin kontrollirakenteisiin rakenteinen ohjelmointi, single entry- single exit kontrollirakenteet ohjelmamodulit, kuten proseduurit ja luokat invarianttien on sopeuduttava koodin rakenteeseen Invarianttiohjelmoinnissa ohjelman rakenne tulee määräytyä invarianteista eikä kontrollirakenteista koodin on sopeuduttava invarianttien rakenteeseen single-enty single exit rakenteet eivät välttämättä sovellu tähän

7 Summan laskeminen, vuokaavio k,sum:=0,0 k:=k+1; sum:=sum+k F k=n T

8 Laskennan eri tilanteet n, sum : integer n>=0 alkutilanne k,sum:=0,0 k: integer n>=0 0 <= k <= n sum= k silmukan invariantti k:=k+1; sum:=sum+k F k=n T sum= n lopputilanne

9 Koodi kuvataan siirtyminä n, sum : integer n>=0 k,sum:=0,0 k:=k+1:sum:=sum+k [k=/=n] k: integer n>=0 sum= k 0 <= k <= n [k=n] sum= n

10 Invariantteihin perustuva rakenne Tilanne (situation) kuvaa tilojen joukkoa (niiden tilojen joukko jotka toteuttavat tilanteen ehdot) Tilannetta voidaan vahvistaa (tarkentaa) lisäämällä uusia ehtoja Uusi tilanne on alkuperäisen tilanteen alijoukko. Voimme käyttää Venn-kaavioita tilanteiden kuvaamiseen.

11 Sisäkkäiset invariantit n,sum: integer n >=0 k: integer 0 <= k <= n sum= k k = n Olemme tässä poistaneet ehdot jotka ovat voimassa sisäkkäisyyden ansiosta. Esimerkki: ehto n 0 merkitään vain uloimpaan tilanteeseen, jolloin se on voimassa myös kaikissa sisemmissä tilanteissa.

12 Sisäkkäisten invarianttien käyttö kaaviossa n,sum: integer n >= 0 k,sum:=0,0 k:=k+1; sum:= sum+k [k=/= n] k: integer 0 <= k <= n sum= k [k=n] k = n Siirstymänuolet ovat samoja kuin aimmassa kaaviossa Tämä kaavio on ekvivalentti aiemman kanssa, vain esitystapa on muuttunut

13 Terminointi n,sum: integer n >= 0 k,sum:=0,0 k:=k+1; sum:= sum+k [k=/= n] k: integer n k>=0 0 <= k <= n sum= k [k=n] k = n Terminointifunktio kirjoitetaan invariantit oikeaan yläkulman. Ehto osoittaa että n k 0 on voimassa tässä tilanteessa, ja samalla että funktion n k arvo vähenee ennenkuin palataan tähän tilanteeseen.

14 Tilannekaaviot ja tilakaaviot Tilannekaaviot ovat samanlaisia kuin tilakaaviot (state charts). Molemmat ovat tilasiirtymäkaavioiden laajennuksia. Niiden tulkinta ja käyttötarkoitus on kuitenkin erilainen. Tilakaaviot kuvaavat ohjelman kontrollia vuorovaikuitteisissa ohjelmissa. Tilannekaaviot ovat taas lähinnä oikeellisuustodistuksia. Tilakaavio on tavallisesti abstraktio suuremmasta ohjelmasta, tilannekaavio kuvaa koko ohjelmaa.

15 Invarianttiohjelman rakentaminen

16 Esimerkki: lajitteluohjelma Ongelma: Lajittele kokonaislukutaulukko nousevaan järjestykseen

17 Algoritminen ratkaisu Valitsemme yksinkertaisen lajittelualgoritmin, insertion sort Kursori käy läpi taulukon elementit vasemmalta oikealle Haemme joka kerta pienimmän alkion kursorin oikealta puolelta, ja vaihdamme tämän ja kursorin osoittaman alkion paikkaa. Tämän jälkeen siirrämme kursoria askeleen oikealle, kunnes lopulta olemme käyneet läpi kaikki taulukon alkiot.

18 Välitilanteen (invariantin) identifiointi Piirrämme kuvan joka hahmottaa perustitetorakenteet joilla työskennellään, ja miten ne muuttuvat laskennan aikana Voimme tarvittaessa simuloida algoritmia käsin, konkreettisen datan avulla. Kuvista ja simuloinnista yritämme identifioida toistuvat tilanteet, ja kuvata ne yleisessä muodossa. Tilanteiden määrittelyä joudutaan yleensä sovittamaan kun rakennetaan tilanteiden väliset siirtymät.

19 Sovellutuksen teoriaa Sorted(A, i, j): taulukon alkiot ovat nousevassa järjestyksessä suljetussa välissä [i, j], Partitioned(A, i): jokainen taulukon A alkio ennen indeksiä i on pienempi tai yhtä suuri kuin jokainen An alkio indeksin i kohdalla tai sen jälkeen. Permutation(A, A0): taulukon A alkiot muodostavat taulukon A0 permutaation.

20 Alkutilanne ja lopputilanne Kuvaamme oletetun alkutilanteen ja toivotun lopputilanteen. 1 n A Permutation(A,A0) sort the array changing A 1 n A Sorted(A,1,n) Permutation(A,A0)

21 Looginen kuvaus Alkutilanne n : integer A : array1 : n o f integer Permutation(A,A 0 ) Lopputilanne Sorted(A, 1, n) Permutation(A,A 0 )

22 Välitilanne 1 n Permutation(A,A0) i:=1 1 i n Sorted Permutation(A,A0) Partitioned(A,i) [i<n] [i=n] swap smallest remaining element with A[i]; i:=i+1 1 n Sorted Permutation(A,A0)

23 Looginen kuvaus Välitilanne lisää seuraavat ehdot alkutilanteen kuvaukseen i : integer 1 i n Sorted(A,1,i 1) Partitioned(A,i) Sijoitus i := 1 aikaansaa välitilanteen Ehto i = n implikoi lopputilanteen Vielä selvitettävä miten ylläpitää välitilanne samalla kun edetään kohti lopputilannetta.

24 Tilannekaavio A. array 1..n of integer Permutation(A,A0) & 1<=n i:=1 [i=/=n] i: integer 1<=i<=n & Sorted(A,1,i 1) &Partitioned(A,i) n i [i=n] Sorted(A,1,n)

25 Pienimmän jäljellä olevan alkion löytäminen Pienimmän alkion löytäminen vaatii että selaamme kaikki jäljelläolevat alkiot Tarvitsemme silmukan tässä Lisäämme neljännen tilanteen, jossa osa lajittelemettomasta taulukon osasta on tarkistettu pienintä alkiota haettaessa.

26 1 n Permutation(A,A0) i:=1 1 i n Sorted Permutation(A,A0) Partitioned(i) [i=/=n] A[i],A[k]:=A[k],A[i]; i:=i+1 [A[j]>=A[k]] [A[j]<A[k]] [i=n ] k:= j j,k:=i,i 1 i k [j=n] j n Sorted Permutation(A,A0) Partitioned(i) min(a,i,j) j:= j+1 [j=/=n ] 1 Tietojenkäsittelytieteen n päivät, 5-6.6, Helsinki Sorted Permutation(A,A0)

27 Looginen kuvaus Uudessa tilanteessa on lisäehdot k, j : integer i k j n A[k] = min{a[h] i h j} Tarkistamme että tämä tilanne saadaan aikaan sijoituksella j,k := i,i kun i n. Tarkistamme myös että kun j = n, niin A[i],A[k] := A[k],A[i]; i := i + 1 aikaansaa ensimmäisen välitilanteen, kuten kaaviossa on kuvattu.

28 Välitilanteen säilyttäminen Lopuksi meidän on tarkistettava että välitilanne säilyy samalla kun laskenta etenee. Meidän on näytettävä ett kun j n, niin siirtymä j := j + 1;if A[ j] < A[k] then k := j fi säilyttää välitilanteen Sisempti silmukka pysähtyy, koska n j vähenee mutta on samalla rajoitettu alhaalta Ulompi silmukka pysähtyy koska n i vähenee ja on samalla rajoitettu alhaalta

29 Lopullinen tilannekaavio Uloin tilanne näyttää algoritmin taustaoletukset. Ensimmäinen sisäkkäinen tilanne kuvaa sitä, että olemme lajitelleet taulukon indeksiin i 1, mutta emme ole vielä aloittaneet seuraavan alkion haun. Sisin tilanne on voimassa kun haemme seuraavaa alkiota Toinen sisäkkäinen tilanne on lopputilanne

30 A. array 1..n of integer Permutation(A,A0) & 1<=n i:=1 i: integer 1<=i<=n & Sorted(A,1,i 1) &Partitioned(A,i) [i=/=n] [j=/=n] j,k:= i,i j,k: integer A[k]=min(A,i,j) i<n & i<=k<=j<=n n i n j j:=j+1; [A[j]>=A[k]] [A[j]<A[k]]; k:=j [i=n] [j=n] i:=i+1 A[i],A[k]:=A[k],A[i]; Sorted(A,1,n)

31 Huomioita Olisimme myös voineet sijoittaa lopputilanteen ensimmäisen välitilanteen sisälle. Tämä olisi kuitenkin näyttänyt että meillä olisi lopputilanteessa myös tieto muuttujan i arvosta. Koska tämä ei kuulu tehtäväasetteluun, niin asetamme lopputilanteen ulommalle tasolle.

32 Vastaava vuokaavio i:=1 i=n i=/=n j,k:=i,i j=/=n j=n A[i],A[k]:=A[k],A[i]; i:=i+1 j:=j+1; if A[j]<A[k] then k:=j

33 Keskustelu Kuvia käytetään huomattavan paljon johdettaessa invarianttipohjelmia Kuvien avulla voimme melko helposti kirjoittaa tilanteiden loogisen kuvauksen. Tätä tarvitaan kun tarkastelemme siirtymien oikeellisuutta. Kuvat auttavat myös algoritmin kehittämisessä. Tilannekaaviot ovat parempia silloin kun tarkistamme että tilanteet säilyvät siirtymissä. Ne antavat myös sisäkkäisten tilanteiden kautta tiiviimmän loogisen kuvauksen tilanteista. Yllä olevassa algoritmissa olisi luultavasti parempi kuvata pienimmän alkion haku proseduurilla, sen sijaan että meillä on sisäkkäinen silmukka ohjelmassa.

34 Invarianttiohjelmat vs. tavalliset ohjelmat

35 Oikeellisuus Invarianttiohjelma on konsistentti (consistent), jos kaikki siirtymät säilyttävät tilanteet pysähtyvä, (terminating) jos ohjelmassa ei ole päättymätöntä silmukaa elävä (live), jos ohjelma pysähtyy vain lopputilanteissa Invarianttiohjelma on totaalisesti oikea (totally correct), jos se on konsistentti, pysähtyvä ja elävä.

36 Oikeellisuuden aikaansaaminen sivutuotteena Standardi lähestymistapa ohjelmointiin tuottaa koodia, joka on vielä testattava ja korjattava. Tämä ei takaa tarpeeksi suuren luotettavuuden. Oikeellisuus voitaisiin periaatteessa todistaa jälkikäteen, mutta tätä ei tehdä, koska onglema on (tavallaan) jo ratkaistu, meillä on jo jotain joka toimii ja joka voidaan toimittaa lisätyö on liian suuri ja myös liian vaativa puute hyvistä työkaluista Invarianttiohjelmointi antaa invariantit ilmaiseksi, osana ohjelmointiprosessia. Vaatii suuremman ponnistuken ohjelmoinnissa, mutta antaa samalla suuremman luotettavuuden ja paremman ymmäryksen ohjelman toiminnasta.

37 Kuvien merkitys Ohjelmoija joka ratkaisee yllä esitetyn tapaisen ongelman piirtää yleensä kuvia jotka auttavat ymmärtämän ongelmatilanteen, ja auttaa algoritmisen ratkaisun löytämisessä. Invarianttiohjelmoinnissa nämä kuvat koodataan invarianttien muotoon. Tavallisessa ohjelmoinnissa ne hukkuvat ohjelmoinnin edetessä. Kun annamme enemmän arvoa kuville, on niiden säilyminen ja ylläpitäminen ehkä todennäköisempää. Tämä kuvien rooli ohjelmoinnissa on samanlainen kun kuvien rooli fysikkassa ja insinööritieteissä.

38 Oikeellisuuden käsite Oikeellisuuden käsite on vahvempi invarianttiohjelmoinnissa kuin mitä se on tavallisessa ohjelmoinnissa. Tavallinen ohjelmointi: jos ohjelma käynnistetään tilassa joka toteutta alkutilanteen ehdot, niin se pysähtyy tilassa joka totetuttaa lopputilanteen ehdot. Invarianttiohjelmoinnissa jokainen tilanne voi olla alkutilanne. Oikeellisuus on siten oltava voimassa myös sellaisten tilojen kohdalla, joita ei edes voida saavutta alkutilanteesta. Oikeellisuusvaatimus on myös vahvempi siinä mielessä, että kaikkien välitilanteiden on aina oltava voimassa kun suoritus saavuttaa ne. Ei riitä että vain lopputilanne on voimassa pysähdyttäessä.

39 Onko oikeellisuusvaatimus liian vahva Voidaan ajatella että oikeellisuusvaatimus on liian vahva invarianttiohjelmien kohdalla. Toisaalta, jos ohjelmassa on ainakin yksi silmukka, niin tavallisen ohjelman oikeellisuustodistuksessa tarvitaan invariantti, jonka säilyminen on todistettava. Tällöin itse asiassa todistetaan vahvempi oikeellisuusominaisuus. Toisin sanoen, tavanmukaiset oikeellisuuden todistusmenetelmät todistavat itse asiassa vahvemman tuloksen kuin mitä tavallisten ohjelmien oikeellisuus vaatii (vertaa induktiotodistus)

40 Lokaalisuus ja alhaisen tason modulaarisuus Voimme tarkastella invarianttiohjelmien oikeellisuutta lokaalisti. Tarkastelemme jokaista tilannetta kerrallaan, sekä jokaista tilannetta johon voidaan siirtyä tästä tilanteesta. Muut tilanteet voidaan sivuttaa. Invarianttiohjelmointi tarjoaa proseduuria hienojakoisemman modulaarisuuden asteen imperatiivisessa ohjelmoinnissa (moduli = siirtymä). Voimme siten rakentaa invarianttiohjelmaa modulaarisella tavalla, samalla tavoin kuin voimme rakentaa funktionaalisia ohjelmia ja logiikkaohjelmia modulaarisesti. Invarianttiohjelmaa voidaan muuttaa ja korjata lokaalisti.

41 Vain terminointi vaatii gloobaalin tarkastelun: jokainen mahdollinen sykli on tarkistettava.

42 Ohjelmointitekniikka Invarianttiohjelmien semantiikka on hyvin yleinen. Se sallii epäonnistumisen (failure), onnistumisen (miraculous success), äärettömät suoritukset sekä normaalin pysähtymisen. Lisäksi single-entry multiple-exit rakenteet ovat luonnollisia tässä lähestymistavassa, mikä taas tukee poikkeusten käsittelyä. Minimivaatimus on että invarianttiohjelma on konsistentti. Ohjelman ei välttämättä tarvitse olla pysähtyvä tai elävä. Elävyys ei esim. ole silloin voimassa kun olemme rakentamassa ohjelmaa, emmekä vielä ole huomioineet kaikki mahdolliset vaihtoehdot. Ohjelma voi myös olla pysähtymättä, joko sen takia että emme ole vielä huomioineet pysähtymisen, tai sitten tarkoituksena on rakentaa ohjelma joka ei koskaan pysähdy (reaktiivinen ohjelma).

43 Asteittainen ohjelman rakentaminen Invarianttiohjelma rakennetaan asteittain, sarjana peräkkäisiä päätöksiä, joissa jokainen päätös ja sen toteutus säilyttää ohjelman konsistenttisuuden. Tällainen päätösaskel voi olla jokin seuraavista Lisää uusi tilanne (alkutilanne, lopputilanne, välitilanne) tai uusi siirtymä. Muuta tai poista tilanne tai siirtymä Tarkista konsistenttisuus (ja muunna ohjelmaa tarvittaessa tämän perusteella) Tarkista pysähtyminen tai elävyys (ja muunna ohjelmaa tarvittaessa tämän perusteella)

44 Konsistenttisuuden tarkistaminen Invarianttiohjelmointi vaatii että jokaisen siirtymän konsistenttisuus tarkistetaan (ts todistetaan siirtymän oikeellisuus) Jos näitä tarkistuksia jätetään liian myöhäiseen vaiheeseen, niin virheet kasaantuvat ja ohjelman korjaaminen konsistenttisuuden aikaansaamiseksi tule vaikeaksi. Virheet pitäisi korjata sitä mukaan kun niitä tehdään. Tarkistusten siirtäminen myöhempään vähentää myös motivaatiota niiden tekemiseen ylipäänsä, koska liian monta keskenään riippuvaa asia joudutaan muuttamaan. Konsistenssitarkistukset voidaan tehdä toivotulla tarkkuustasolla (käsin todistaminen, mekaaninen todistaminen, tms)

45 Työkaluja invarianttiohjelmien rakentamiseen

46 Socos ympäristö Rakennamme ympäristöä invarianttiohjelmien rakentamiselle Ympäristössä on sekä graafinen ja tekstuaalinen esitys invarianttiohjelmalle. Ympäristö käyttää hyväkseen teoreeman todistajia joiden avulla pyritään automaattisesti tai interaktiivisesti todistamaan verifointiehdot. Tällä hetkellä käytämme PVS ja Simplify järjestelmiä. Käyttäjälle näytetään ainoastaan ne verifiointehdot joita ei pystytä todistamaan automaattisesti. Invarianttiohjelma käännetään suoraan Python kielelle. Ohjelmat voidaan suoritta debuggin- moodissa. Alku-ja loppuehdot sekä invariantit evaluoidaan suorituksen aikana, ja näytettän varoituksina.

47 Työn alla Invarianttiohjelmien yksinkertainen + tarkka semantiikka Lähestymistavan laajentaminen (rekursiivisiin) proseduureihin, data moduleihin, luokkiin (mukaanlukien periytyminen ja implementointi), rinnakkaisohjelmiin sekä interaktiivisiin ohjelmiin. Automaattisen verifioinnin kehittäminen Socos ympäristössä Kokeillaan menetelmän käyttökelpoisuutta suurempien ohjelmien rakentamisessa.

48 Formaalit menetelmät ensimäisenä ohjelmointikurssina

49 Kokeiluja invarianttiohjelmoinnilla Olemme kokeilleet menetelmää useissa pienissä koetilanteissa, pienryhmillä (1-20 henkilöä). Ryhmä (yleensä 2 henkilöä) ratkaisee jonkin ohjelmointitehtävän yhdessä. Yhtensä noin 10 koetta, 2-3 tuntia per sessio Toimii käytännössä hyvin, sekä erittäin kokeneilta verifiointimenetelmien ammattilaisilta (IFIP WG2.3 jäseniltä) että vasta-alkajilta (takanaan vain muutama ohjelmointikurssi) Invarianttien löytäminen melko helppoa, kun lähdetään kuvioista. Suurin ongelma vasta-alkajille on invariantin ilmaiseminen loogisella kaavalla Invariantteja parannellaan sitä mukaan kun lisätään siirtymiä Tarkistus löytää usein melko subtiileja virheitä Työkalutuki verifointiehtojen tarkistusta varten tärkeää, mutta ilman niitä pärjätään hyvin pienissä ohjelmissa.

50 Invarianttiohjelmoinnin opetus Olen itse luennoinut yhden kurssin invarianttiohjelmoinnista, tutikimuskeskuksemme jatko-opiskelijoille Lähestymistapaa on myös kokeiltu ammatti-instituutti tasolla hyvin tuloksin Suunnittelemme ohjelmointikurssia tällä memetelmäll ensimmäisen vuoden tietojenkäsittelytieteen opiskelijoille (ensi kevät) Tarkoituksena olisi suunnitella lukion kurssi invarianttiohjelmoinnista

51 Tarvitaan kaksi peruskurssia: Miten ohjelmointia tulisi opettaa Käytännön logiikkaa (esim Back & von Wright: Matematik med litet logik). Tukee invarianttien formulointia ja verifiointiehtojen todistamista Invarianttiohjelmointi Miten rakennetaan oikein toimivia ohjelmia Tämä antaa ohjelmoinnille yksinkertaisen matemaattisen perustuksen, jota voi käyttää käytännön ohjelmoinnissa. Tämän lisäksi tarvitaan tavanmukaisia test/debug/fixtyyppisiä ohjelmointikursseja.

52 Missä ohjelmointia tulisi opettaa Ohjelmoinnin opetusta voidaan antaa eri tasoilla Lukiossa Ym kurssit lisätään matematiikan kurssitarjontaan (suositeltavin taso, tulee osaksi yleisivistystä) Ammattikorkeakoulu Tietotekiikan ensimmäisen vuoden kursseja (ohjelmoinnin matemaattienen perusta) Yliopisto Tietotekniikan ensimmäisen vuoden kursseja (ohjelmoinnin matemaattienen perusta)

53 Hyöty Lukion logiikan ja ohjelmoinnin kurssit olisivat melko samanlainen kuin matematiikan ja fysiikan kurssit (mutta ehkä näitä yksinkertaisempia) Opettaisimme perusmenetelmän jolla rakennetaan ohjelmia joista tiedämme että ne toimivat oikein Logiikan kurssi opettaa argumentoimaan ohjelmien oikeasta toiminnasta. Kurssi tukee myös matematiikan opetusta yleensä Opiskelijat voivat itse vakuuttua rakentamansa ohjelman oikeellisuudesta, ja korjata virheet sitä mukaan kuin ne syntyvät.

54 Kiitos Kotisivuiltani löytyy lisää materiaalia:

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 581336 Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 1. S! axc X! axc X! by c Y! by c Y! " 2. (a) Tehtävänä on konstruoida rajoittamaton kielioppi, joka tuottaa kielen f0 n 1 n jn 1g. Vaihe1: alkutilanteen

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

Matematiikan ohjelmointi. Joakim von Wright

Matematiikan ohjelmointi. Joakim von Wright Matematiikan ohjelmointi Joakim von Wright Formaali menetelmä käytännössä miten todistetaan ohjelman oikeellisuus? miltä todistus näyttn yttää? isot ohjelmat? miljoona riviä koodia nykyajan ohjelmat? rinnakkaisuus,

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Keskeneräinen luento 3: Listat (mm. SICP 22.2.3) Riku Saikkonen 31. 10. 2011 Sisältö 1 Linkitetyt listat 2 Linkitetyt listat (SICP 2.1.1, 2.2.1) funktionaalinen

Lisätiedot

Muistutus aikatauluista

Muistutus aikatauluista Muistutus aikatauluista (Nämä eivät välttämättä koske avoimen yo:n opiskelijoita Erkki Kailan rinnakkaisella kurssilla) Luento 1: kotitehtävät sulkeutuvat 20.9 12:00, ennen tutoriaalia Tutoriaali 1 sulkeutuu

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Turingin koneen laajennuksia

Turingin koneen laajennuksia Turingin koneen laajennuksia Turingin koneen määritelmään voidaan tehdä erilaisia muutoksia siten että edelleen voidaan tunnistaa tasan sama luokka kieliä. Moniuraiset Turingin koneet: nauha jakautuu k

Lisätiedot

Miten tehdää. ään n virheettömi. miä ohjelmia. Ralph-Johan Back Joakim von Wright Åbo Akademi TUCS Formaalit menetelmät t ohjelmoinnissa ryhmä

Miten tehdää. ään n virheettömi. miä ohjelmia. Ralph-Johan Back Joakim von Wright Åbo Akademi TUCS Formaalit menetelmät t ohjelmoinnissa ryhmä Miten tehdää ään n virheettömi miä ohjelmia Ralph-Johan Back Joakim von Wright Åbo Akademi TUCS Formaalit menetelmät t ohjelmoinnissa ryhmä Esitelmät Ohjelmoinnin matematiikka Ralph Back Matematiikan ohjelmointi

Lisätiedot

Rakenteiset päättelyketjut ja avoin lähdekoodi

Rakenteiset päättelyketjut ja avoin lähdekoodi Rakenteiset päättelyketjut ja avoin lähdekoodi Mia Peltomäki Kupittaan lukio ja Turun yliopiston IT-laitos http://crest.abo.fi /Imped Virtuaalikoulupäivät 24. marraskuuta 2009 1 Taustaa Todistukset muodostavat

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

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

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet ) T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

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

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

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

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

Esimerkki 1: Kahviautomaatti.

Esimerkki 1: Kahviautomaatti. Esimerkki 1: Kahviautomaatti. ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET 2.1 Tilakaaviot ja tilataulut Tarkastellaan aluksi tietojenkäsittelyjärjestelmiä, joilla on vain äärellisen monta mahdollista tilaa.

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 21.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 21.9.2015 1 / 25 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

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

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 11.08.2010 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

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

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

Lisätiedot

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}. 42 Turingin koneiden laajennuksia 1 oniuraiset koneet Sallitaan, että Turingin koneen nauha koostuu k:sta rinnakkaisesta urasta, jotka kaikki kone lukee ja kirjoittaa yhdessä laskenta-askelessa: Koneen

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen. historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

Lisätiedot

Imperatiivisten ohjelmien organisointiparadigmojen historia

Imperatiivisten ohjelmien organisointiparadigmojen historia Imperatiivisten ohjelmien organisointiparadigmojen historia Timo Tapanainen Helsingin yliopisto, tietojenkäsittelytieteen laitos Tietojenkäsittelytieteen historia -seminaari, kevät 2007 Sisältö Paradigma,

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta kurssin alkuosasta II Algoritmien analyysi: oikeellisuus Algoritmin täydellinen oikeellisuus = Algoritmi päättyy ja tuottaa määritellyn tuloksen

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

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

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

M = (Q, Σ, Γ, δ, q 0, q acc, q rej ) 6. LASKETTAVUUSTEORIAA Churchin Turingin teesi: Mielivaltainen (riittävän vahva) laskulaite Turingin kone. Laskettavuusteoria: Tarkastellaan mitä Turingin koneilla voi ja erityisesti mitä ei voi laskea.

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

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

Karteesinen tulo. Olkoot A = {1, 2, 3, 5} ja B = {a, b, c}. Näiden karteesista tuloa A B voidaan havainnollistaa kuvalla 1 / 21

Karteesinen tulo. Olkoot A = {1, 2, 3, 5} ja B = {a, b, c}. Näiden karteesista tuloa A B voidaan havainnollistaa kuvalla 1 / 21 säilyy Olkoot A = {1, 2, 3, 5} ja B = {a, b, c}. Näiden karteesista tuloa A B voidaan havainnollistaa kuvalla c b a 1 2 3 5 1 / 21 säilyy Esimerkkirelaatio R = {(1, b), (3, a), (5, a), (5, c)} c b a 1

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

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

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen

Lisätiedot

LUKU II HOMOLOGIA-ALGEBRAA. 1. Joukko-oppia

LUKU II HOMOLOGIA-ALGEBRAA. 1. Joukko-oppia LUKU II HOMOLOGIA-ALGEBRAA 1. Joukko-oppia Matematiikalle on tyypillistä erilaisten objektien tarkastelu. Tarkastelu kohdistuu objektien tai näiden muodostamien joukkojen välisiin suhteisiin, mutta objektien

Lisätiedot

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3 T-79.48 Tietojenkäsittelyteorian perusteet Tentti 25..23 mallivastaukset. Tehtävä: Kuvaa seuraavat kielet sekä säännölisten lausekkeiden että determinististen äärellisten automaattien avulla: (a) L = {w

Lisätiedot

TAMPEREEN TEKNILLINEN YLIOPISTO

TAMPEREEN TEKNILLINEN YLIOPISTO TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja Tietokonetekniikan laitos TKT-3200 Tietokonetekniikka ASSEMBLER: QSORT 06.09.2005 Ryhmä 00 nimi1 email1 opnro1 nimi2 email2 opnro2 nimi3 email3 opnro3 1. TEHTÄVÄ

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.

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

Tarkennamme geneeristä painamiskorotusalgoritmia

Tarkennamme geneeristä painamiskorotusalgoritmia Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi

Lisätiedot

1 Kannat ja kannanvaihto

1 Kannat ja kannanvaihto 1 Kannat ja kannanvaihto 1.1 Koordinaattivektori Oletetaan, että V on K-vektoriavaruus, jolla on kanta S = (v 1, v 2,..., v n ). Avaruuden V vektori v voidaan kirjoittaa kannan vektorien lineaarikombinaationa:

Lisätiedot

Täydentäviä muistiinpanoja laskennan rajoista

Täydentäviä muistiinpanoja laskennan rajoista Täydentäviä muistiinpanoja laskennan rajoista Antti-Juhani Kaijanaho 10. joulukuuta 2015 1 Diagonaalikieli Diagonaalikieli on D = { k {0, 1} k L(M k ) }. Lause 1. Päätösongelma Onko k {0, 1} sellaisen

Lisätiedot

Joukot. Georg Cantor ( )

Joukot. Georg Cantor ( ) Joukot Matematiikassa on pyrkimys määritellä monimutkaiset asiat täsmällisesti yksinkertaisempien asioiden avulla. Tarvitaan jokin lähtökohta, muutama yleisesti hyväksytty ja ymmärretty käsite, joista

Lisätiedot

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 13. lokakuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 13.10.2016 klo 9:42 passed waiting redo submitters

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA34 Funktio-ohjelmointi, kevät 2008 Luento 3 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 2. tammikuuta 2008 Ydin-Haskell: Syntaksi Lausekkeita (e) ovat: nimettömät funktiot: \x

Lisätiedot

Kolmannen ja neljännen asteen yhtälöistä

Kolmannen ja neljännen asteen yhtälöistä Solmu /019 7 Kolmannen neljännen asteen yhtälöistä Esa V. Vesalainen Matematik och statistik, Åbo Akademi Tämän pienen artikkelin tarkoituksena on satuilla hieman algebrallisista yhtälöistä. Erityisesti

Lisätiedot

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot

A TIETORAKENTEET JA ALGORITMIT

A TIETORAKENTEET JA ALGORITMIT A274105 TIETORAKENTEET JA ALGORITMIT HARJOITUSTEHTÄVÄT 6 DEADLINE 1.4.2009 KLO 9:00 Kynätehtävät tehdään kirjallisesti ja esitetään harjoituksissa. Välivaiheet näkyviin! Ohjelmointitehtävät sähköisesti

Lisätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016 ja ja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. lokakuuta 2016 Sisällys ja ja Vuosi on 1936, eikä tietokoneita ollut. Computer oli ammattinimike. http://www.nasa.gov/centers/dryden/

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 28.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 28.9.2015 1 / 16 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

Python-ohjelmointi Harjoitus 5

Python-ohjelmointi Harjoitus 5 Python-ohjelmointi Harjoitus 5 TAVOITTEET Kerrataan silmukkarakenteen käyttäminen. Kerrataan jos-ehtorakenteen käyttäminen. Opitaan if else- ja if elif else-ehtorakenteet. Matematiikan sisällöt Tehtävät

Lisätiedot

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion.

Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Kuvaus eli funktio f joukolta X joukkoon Y tarkoittaa havainnollisesti vastaavuutta, joka liittää joukon X jokaiseen alkioon joukon Y tietyn alkion. Vastaavuus puolestaan on erikoistapaus relaatiosta.

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

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

1.5 Suljetulla välillä jatkuva funktio. Perusominaisuudet.

1.5 Suljetulla välillä jatkuva funktio. Perusominaisuudet. 1.5 Suljetulla välillä jatkuva funktio. Perusominaisuudet. Differentiaalilaskennassa on aika tavallinen tilanne päästä tutkimaan SULJETUL- LA VÄLILLÄ JATKUVAA FUNKTIOTA. Oletuksena on tällöin funktion

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

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä:

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä: 2. Vuokaaviot 2.1 Sisällys Kaavioiden rakenne. Kaavioiden piirto symbolta yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä: algoritmi oven avaamiseen vuokaaviona, keskiarvon laskeminen

Lisätiedot

2 Sanoja järjestävän funktion ohjelmoiminen

2 Sanoja järjestävän funktion ohjelmoiminen 1 Tämän dokumentin tarkoitus Tämä dokumentti ei kuulu millään tavoin tenttialueeseen, enkä ota vastuuta sen lukemisen aiheuttamista vahingoista. Tässä dokumentissa esitetään esimerkin kautta, miten matematiikan

Lisätiedot

Reaalifunktioista 1 / 17. Reaalifunktioista

Reaalifunktioista 1 / 17. Reaalifunktioista säilyy 1 / 17 säilyy Jos A, B R, niin funktiota f : A B sanotaan (yhden muuttujan) reaalifunktioksi. Tällöin karteesinen tulo A B on (aiempia esimerkkejä luonnollisemmalla tavalla) xy-tason osajoukko,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 4.10.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 4.10.2017 1 / 23 Mahdollisuus antaa luentopalautetta Luennon aikana voit kirjoittaa kommentteja ja kysymyksiä sivulle

Lisätiedot

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään Ohjelmointi Ohjelmoinnissa koneelle annetaan tarkkoja käskyjä siitä, mitä koneen tulisi tehdä. Ohjelmointikieliä on olemassa useita satoja. Ohjelmoinnissa on oleellista asioiden hyvä suunnittelu etukäteen.

Lisätiedot

1. Universaaleja laskennan malleja

1. Universaaleja laskennan malleja 1. Universaaleja laskennan malleja Laskenta datan käsittely annettuja sääntöjä täsmällisesti seuraamalla kahden kokonaisluvun kertolasku tietokoneella, tai kynällä ja paperilla: selvästi laskentaa entä

Lisätiedot

E-math - sa hko inen oppimisympa risto matematiikan opiskeluun. Ralph-Johan Back Åbo Akademi (Virtuaaliopetuksen päivät 2013)

E-math - sa hko inen oppimisympa risto matematiikan opiskeluun. Ralph-Johan Back Åbo Akademi (Virtuaaliopetuksen päivät 2013) E-math - sa hko inen oppimisympa risto matematiikan opiskeluun Ralph-Johan Back Åbo Akademi (Virtuaaliopetuksen päivät 2013) Esityksen organisointi 1. Yleisesitys E-math projektin hankkeesta ja sen tuloksista

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

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 17. kesäkuuta 2013 Sisällys Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton kontekstinen

Lisätiedot

Zeon PDF Driver Trial

Zeon PDF Driver Trial Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

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! YLEISTÄ FORMAALEISTA

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 6: Rajoite-esimerkki, funktionaalista ohjelmointia (mm. SICP 3.3.5, 3.5) Riku Saikkonen 8. 11. 2012 Sisältö 1 SICP 3.3.5 esimerkki: rajoitteiden vyörytysjärjestelmä

Lisätiedot

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä

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

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015 ja ja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho NFA:ksi TIETOTEKNIIKAN LAITOS 16. marraskuuta 2015 Sisällys ja NFA:ksi NFA:ksi Kohti säännöllisiä lausekkeita ja Nämä tiedetään:

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan valitseminen päätöksellä ja toistaminen silmukalla.

Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan valitseminen päätöksellä ja toistaminen silmukalla. 2. Vuokaaviot 2.1 Sisällys Kaavioiden rakenne. Kaavioiden piirto symbolta yhdistelemällä. Kaavion osan valitseminen päätöksellä ja toistaminen silmukalla. Esimerkkejä: algoritmi oven avaamiseen vuokaaviona,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 16.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 16.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin Yhteydettömien kielioppien ja pinoautomaattien yhteys [Sipser s. 117 124] Todistamme, että yhteydettömien kielioppien tuottamat kielet ovat tasan samat kuin ne, jotka voidaan tunnistaa pinoautomaatilla.

Lisätiedot

1 Määrittelyjä ja aputuloksia

1 Määrittelyjä ja aputuloksia 1 Määrittelyjä ja aputuloksia 1.1 Supremum ja infimum Aluksi kerrataan pienimmän ylärajan (supremum) ja suurimman alarajan (infimum) perusominaisuuksia ja esitetään muutamia myöhemmissä todistuksissa tarvittavia

Lisätiedot

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? 2013-2014 Lasse Lensu 2 Algoritmit ovat deterministisiä toimintaohjeita

Lisätiedot

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi Imperatiivisen ohjelmoinnin peruskäsitteet muuttuja muuttujissa oleva data voi olla yksinkertaista eli primitiivistä (esim. luvut ja merkit) tai rakenteista jolloin puhutaan tietorakenteista. puhuttaessa

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu 811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 3, Ratkaisu Harjoituksessa käsitellään algoritmien aikakompleksisuutta. Tehtävä 3.1 Kuvitteelliset algoritmit A ja B lajittelevat syötteenää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

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

Johdatus verkkoteoriaan 4. luento

Johdatus verkkoteoriaan 4. luento Johdatus verkkoteoriaan 4. luento 28.11.17 Viikolla 46 läpikäydyt käsitteet Viikolla 47 läpikäydyt käsitteet Verkko eli graafi, tasoverkko, solmut, välit, alueet, suunnatut verkot, isomorfiset verkot,

Lisätiedot

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari Konsensusongelma hajautetuissa järjestelmissä Niko Välimäki 30.11.2007 Hajautetut algoritmit -seminaari Konsensusongelma Päätöksen muodostaminen hajautetussa järjestelmässä Prosessien välinen viestintä

Lisätiedot

Johdatus L A TEXiin. 10. Matemaattisen tekstin kirjoittamisesta. Matemaattisten tieteiden laitos

Johdatus L A TEXiin. 10. Matemaattisen tekstin kirjoittamisesta. Matemaattisten tieteiden laitos Johdatus L A TEXiin 10. Matemaattisen tekstin kirjoittamisesta Matemaattisten tieteiden laitos Matemaattisesta tekstistä I Matemaattisella tekstillä tarkoitetaan tavallista (suomenkielisistä virkkeistä

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot