1 Základní formalismy: Důkaz a Algoritmus Studium informatiky neznamená jen „naučit se nějaký programovací jazyk", nýbrž zahrnuje celý soubor dalších relevantních predmetu, mezi nimiž najdeme i matematicko-teoreticke (formalní) základy moderní informatiky. Prave odborny nadhled nad celou informatikou vcetne nezbytne formalní teorie odliší radoveho „programatora", kterych jsou dnes spousty i bez VŠ vzdelaní, od skutecneho a mnohem lepe placeneho IT experta. c Stručný přehled lekce * Pochopení formálního zápisu a významu matematických tvrzení (vet) a jejich dUkazU. * Rozbor logicke struktury matematických vet, potrebne Urovne formality a diskuze konstruktivnosti dukazu. * Spravný formalní zapis postupu - algoritmu, ve svetle matematických formalismu. 1.1 Úvod do matematického dokazování Matematika (a tudíž i teoretická informatika jako její součást) se vyznačuje velmi prísnymi formalními poZadavky na korektnost argumentace. c • UvaZme matematickou vetu (neboli tvrzení) tvaru „JestliZe platí předpoklady, pak platí zaver". c • Důkaz teto vety je konečna posloupnost tvrzení, kde * kazde tvrzení je bud' - předpoklad, nebo - obecne přijata „pravda" - axiom, nebo - plyne z předchozích a drive dokazanych tvrzení podle nejakeho „ak-ceptovaneho" logickeho principu - odvozovacího pravidla; * poslední tvrzení je záver. c O potřebné urovni formality matematických dukazu a o beznych dukazovych technikach se dozvíme dale v teto a prístí lekci.. . Nyní si proste celou problematiku uvedeme nazornymi príklady. Petr Hliněný, FI MU Brno__: IB000: Základní formalismy r. ^ Příklad 1.2. Uvažujme následující matematické tvrzení (které jistě už znáte). Věta. Jestliže x je součtem dvou lichých čísel, pak x je sude. Poznámka pro připomenut í: - Sude číslo je cele číslo dělitelné 2, tj. tvaru 2k. - Lichí číslo je cele číslo nedelitelne 2, tj. tvaru 2k + 1. c Důkaz postupuje v následujících formálních krocích: tvrzení zduvodnení 1) a = 2k + 1, k cele predpoklad 2) b = 21 + 1, l cele predpoklade 3) x = a + b = 2k + 21 + 1 + 1 1,2) a komutativita scítaní (axiom)c 4) x = 2(k + 1) +2 • 1 3) a distributivnost nasobeníc 5) x = 2(k +1 + 1) 4) a opet distributivnost nasoben íc 6) x = 2m, m cele 5) a m = k + 1 + 1 je cele c íslo (axiom) □ Petr Hliněný, FI MU Brno Příklad 1.3. Dokažte následující tvrzení: Věta. Jestliže x a y jsou racionální čísla pro která platí x < y, pak existuje racionální číslo z pro ktere platí x < z < y. c Důkaz po kroc ích (s již trochu méně formaln ím zápisem) zn í: • Nechť z = ^=x + ^=y-^f. • C íslo z je racionáln í, nebol! x á y jsou racionáln í. • Platí z > x, neboť ^ > 0. • Dále platí z < y, opět neboť > 0. • Celkem x < z < y. c Poznámka. Alternativn í formulace Vety z Príkladu 1.3 mohou zn ít: - Pro kázde x,y G Q, kde x < y, existuje z G Q tákove, ze x < z 7 mensí nez 1, bude existovat obarvení bez jednobarevnych zvolenych podmnozin. □ Petr Hliněný, FI MU Brno___IB000: Zýkladní formalismy 1.4 Fořmainí popis algoritmu Položme si otažku, co je vlastne algoritmus? Poznámka: Za definici algoritmu je obecne prijímana tžv. Churčh-Turingova teže tvrd ící, že vsechný algoritmý lže „simulovat" na Turingove stroji. Jedna se sice o presnou, ale žnacne nepraktickou definici. Mimo Turingova stroje existuj í i jine matematičke modely výpočtů, jako treba stroj RAM, který je abstrakc í skutecneho strojového kodu. c Konvěncě 1.7. Zjednodusene žde algoritmem rožum íme konecnou posloupnost elementarn ích výpocetn ích kroku, ve ktere každý dalsí krok vhodne výuž íva (neboli žavisí na) vstupn í udaje ci hodnotý výpoctene v pňedchož ích krocích. Tuto žavislost pňitom poj ímame žcela obecne nejen na operandý, ale i na výkonavane instrukce v krocích. Pro žapis algoritmu a jeho žprehlednen í a žkracen í výuž ívame řidiči konstrukče - podm ínena vetven í a cýklý. c Vid íte, jak bl ížke si jsou konstruktivn í matematicke dukažý a algoritmý v nasem pojet í? Jedna se nakonec o jeden že žameru naseho prístupu... Petr Hliněný, FI MU Brno__: IB000: Základní formalismy Příklad 1.8. Zápis algoritmu pro výpočet průměru z daního pole a[] s n prvky. • Inicializujeme sum — 0 ; • postupne pro i=0,1,2, ...,n-1 provedeme * sum —sum+a[i]; • vypíšeme podíl (sum/n) . □ G Ve „vyssí urovni" formalnosti (s jasnejsím vyznacením řídících struktur algoritmu) se totez da zapsat jako: Algoritmus 1.9. Přůméř z daneho pole a[] s n prvky. sum — 0; foreach i — 0,1,2,...,n-1 do sum — sum+a[i]; done res — sum/n; output res; Petr Hliněný, FI MU Brno Značení. Pro potřeby symbolického formáln ího zápisu algoritmů v předmětu Fl: IB000 si zavedeme následovnou konvenci: • Proměnné nebudeme deklarovat ani typovat, pole odliSíme závorkami p []. • Přiřazeni hodnoty zapisujeme a — b, připadne a := b, ale nikdy ne a=b. • Jako elem. operace je moZne pouZ ít jakekoliv aritmetické výrazy v beZnem matematickem zapise. Rozsahem a presnost í C ísel se zde nezabývame. c • Podm ínene větveni uvedeme kl iCovymi slovy if ... then . . . else ... fi, kde else vetev lze vynechat (a nekdy, na jednom řadku, i fi). • Pevny cyklus uvedeme kl icovymi slovy foreach ... do ... done, kde cast za foreach musí obsahovat predem danou mnozinu hodnot pro přirazovan í do ríd íc í promenne. • Podmíněný cyklus uvedeme kl icovymi slovy while ... do ... done. Zde se muze za while vyskytovat jakakoliv logicka podm ínka. c • V zapise pouz ívame jasne odsazovan i (zleva) podle urovne zanoren í ríd íc ích struktur (coz jsou if, foreach, while). • Pokud je to dostateřcnře jasne, elementarn i operace nebo podm inky muzeme i ve formaln ím zapise popsat beznym jazykem. Petr Hliněný, FI MU Brno Malé srovnání závěrem Jak to tedy je s vhodnou a únosnou mírou formalizace u matematických důkazů zcela formální běžná úroveň matematika algoritmy programování formální rozepsání všech elem. kroků (Příklad 1.2) rozepsání všech elem. kroků ve výpočetním modelu assembler / strojový kód (kde se s ním dnes běžně setkáte?) strukturovaný a matem, přesný text v běžném jazyce strukturovaný rozpis kroků (Algoritmus 1.9), i s využitím běžného jazyka „vyšší" (strukturované) programovací jazyky, například Java Pochopitelne se ve vsech trech bodech obvykle drzíme drůheho prístůpů, tedy bezne ůrovne formality, pokůd si specificke podmínky vyslovne nevyzadůjí prístůp nejvyssí formality. .. ^----Petr Hliněný, FI MU Brno_13_