Chair of Software Engineering EinführungindieProgrammierung Prof.Dr.BertrandMeyer Vorlesung 5: Invarianten und Logik Erinnerung:Verträge InVerbindungmiteinemFeature: Ø Vorbedingungen Ø Nachbedingungen InVerbindungmiteinerKlasse: Ø Klasseninvariante 2 Verträge remove_all_segments --AlleStationenausserdererstenentfernen. ensure nur_eine_bleibt:count=1 Zusicherungen beide_enden_gleich:first=last append(s:STATION) --samEndederLiniehinzufügen. ensure neue_station_ist_letzte:last=s Zusicherungen eine_mehr:count=oldcount+1 3 Verträge deposit(v:INTEGER) --AddierevzumKontostand. require Zusicherung positiv:v>0 do … ensure addiert:balance=oldbalance+v end 4 Klasseninvarianten DieInvariantedrücktKonsistenzbedingungenaus,die zwischenAbfrageninderKlasseerfülltseinmüssen invariant anzahl_positiv:count>0 definition_von_first:first=i_th(1) definition_von_last:last=i_th(count) 5 WannisteineKlassekorrekt? createx.make(…) S1 x f(…) FürjedeErzeugungsprozedurcp: S2 . {Precp}docp{INVandPostcp} FürjedesexportierteFeaturer: {INVandPrer}dor{INVandPostr} . x g(…) S3 . x h(…) S4 6 AnwendungenvonVerträgen 1. KorrekteSoftware 2. DokumentationderSoftware,imSpeziellen DokumentationderProgrammierschnittstelle. 3. Testen&Fehlerbeseitigung (Späternochmehr!) Laufzeiteffekt:EinstellungimCompiler (sieheProjects->SettingsinEiffelStudio) 7 VerträgeinanderenSprachen Java:JavaModelingLanguage(JML),iContractetc. C#:Spec#(ErweiterungdurchMicrosoftResearch) UML:ObjectConstraintLanguage Python C++:Nana etc. 8 Logik Programmierenheisstlogischdenken. LogikistdieWissenschaftdeslogischenDenkens. WirbenutzenLogiktagtäglich. “SokratesisteinMensch. AlleMenschensindsterblich. DahermussSokratessterblichsein.” 9 LogischesDenkenundProgrammieren LogikistdieGrundlagevon: Ø Mathematik:Beweisesindnurgültig,fallssiedenRegeln derLogikgenügen. Ø Softwareentwicklung: § BedingungeninVerträgen: “xdarfnichtnullsein,sodass x +7 wirberechnenkönnen.” x § BedingungeninProgrammen: “Fallsipositivist,führedieseInstruktionaus.”(Mehr dazuineinerspäterenLektion) 10 Boole’scheAusdrücke EineBedingungwirddurcheinenBoole’schenAusdruck ausgedrückt. Einsolcherbestehtaus: • Boole’schenVariablen(Bezeichner,dieBoole’sche Wertebezeichnen) • Boole’schenOperatoren(not,or,and,=,implies) Undrepräsentiertmögliche • Boole’scheWerte(Wahrheitswerte,entwederTrue oderFalse) 11 Beispiele BeispielevonBoole’schenAusdrücken: (mitrain_todayundcuckoo_sang_last_nightalsBoole’sche Variablen): Ø rain_today (eineBoole’scheVariableisteinBoole’scherAusdruck) Ø notrain_today Ø (notcuckoo_sang_last_night)impliesrain_today (MittelsKlammernbildetmanUnterausdrücke.) 12 DieNegation(not) a True False nota False True FürjedenBoole’schenAusdruckeundalleWertevonVariablen gilt: Ø EntwedereodernotehatdenWahrheitswertTrue. Ø EntwedereodernotehatdenWahrheitswertFalse. (PrinzipdesausgeschlossenenDritten) Ø eundnotekönnennichtbeidedenWahrheitswertTrue haben. (SatzdesWiderspruchs) 13 DieDisjunktion(or) a True b True aorb True True False True False True True False False False Deror-Operatoristnicht-exklusiv Deror-Operatoristkommutativ Disjunktionsprinzip: Ø Eineor-DisjunktionhatdenWahrheitswertTrue,ausser beideOperandenhabendenWertFalse. 14 DieKonjunktion(and) a True b True aandb True True False False False True False False False False Derand-Operatoristkommutativ. Dualitätvonandundor: • (aandb)=not((nota)or(notb)) • (aorb)=not((nota)and(notb)) Konjunktionsprinzip: Ø Eineand–KonjunktionhatdenWahrheitswertFalse, ausserbeideOperandenhabendenWertTrue. 15 KomplexereAusdrücke AuchkomplexereBoole’scheAusdrückesindmöglich. Beispiele: aand(band(notc)) not(not(not(not(nota)))) 16 BelegungenundWahrheitstabellen EineBelegungfüreineMengevonVariablen:einebestimmte WahlvonWahrheitswerten(TrueoderFalse)fürjede Variable. EineBelegungerfüllteinenAusdruck,fallsderWahrheitswert desAusdrucksTrueist. EineWahrheitstabellefüreinenAusdruckmitnVariablenhat Ø n+1Spalten n Ø 2 Zeilen 17 WahrheitstabellefürdieGrundoperationen a b nota aorb aandb True True False True True True False True False False True True False False False False False True 18 Tautologien Tautologie:EinBoole’scherAusdruck,derfürjedemögliche BelegungdenWahrheitswertTruehat. Beispiele: Ø aor(nota) Ø not(aand(nota)) Ø (aandb)or((nota)or(notb)) 19 WidersprücheundErfüllbarkeit Widerspruch:EinBoole’scherAusdruck,derfürallemöglichen BelegungendenWahrheitswertFalsehat. Beispiele: Ø aand(nota) ErfüllbarerAusdruck:EinAusdruckisterfüllbar,sofernerfür mindestenseineBelegungdenWahrheitswertTruehat. Ø JedeTautologieisterfüllbar. Ø JederWiderspruchistunerfüllbar. 20 Äquivalenz(=) a True b True a=b True True False False False True False False False True Der=Operatoristkommutativ. (a=bhatdenselbenWertwieb=a) Der=Operatoristreflexiv. (a=aisteineTautologiefürjedesa) Substitution: Ø FüralleAusdrückeu,vundegilt:Fallsu=veine Tautologieistunde’derAusdruckist,denmanerhält, wennmaninejedesVorkommenvonudurchversetzt, danniste=e’eineTautologie. 21 DeMorgan’scheGesetze DeMorgan’scheGesetze:Tautologien Ø (not(aorb))=((nota)and(notb)) Ø (not(aandb))=((nota)or(notb)) WeitereTautologien(Distributivität): Ø (aand(borc))=((aandb)or(aandc)) Ø (aor(bandc))=((aorb)and(aorc)) 22 SyntaxkonventionundVorrangregeln Vorrangregeln(höchsterVorrangzuerst):not,and,or, implies(wirdspätervorgestellt),= andundorsindassoziativ: Ø aand(bandc)=(aandb)andc Ø aor(borc)=(aorb)orc Stilregeln: WennSieeinenBoole’schenAusdruckschreiben,können SiefolgendeKlammernweglassen: • DieKlammernaufbeidenSeitendes“=“,fallsder gesamteAusdruckeineÄquivalenzist. • DieKlammernumaufeinanderfolgendeelementare Terme,fallssiedurchdengleichenassoziativenOperator getrenntsind. 23 DieImplikation(implies) a True b True aimpliesb True True False False False True True False False True Fürjedesa,bgilt:aimpliesb=(nota)orb InaimpliesbistaderVordersatz,bderNachsatz. Implikationsprinzip: Ø EineImplikationhatdenWahrheitswertTrue,ausserder VordersatzhatdenWertTrueundderNachsatzhatden WertFalse. Ø Zudem:ImmerTruefallsderVordersatzFalseist. 24 ImplikationeninnatürlichenSprachen implieshatinnatürlichenSprachenoftdieBedeutungvon Kausalität(Wenn…dann…). Ø “WenndasWetterschönist,gehenwirbaden.” Ø “WenndudiesesGetränkinsHandgepäcknimmst,lassen siedichnichtinsFlugzeug.” 25 EinhäufigesMissverständnisüberImplikationen ImmerwennaFalseist,ergibtaimpliesbTrue,unabhängig vonb: Ø “FallsheuteMittwochist,ist2+2=5.” Ø “Falls2+2=5,istheuteMittwoch.” BeidederobigenImplikationenergebenTrue. DieFälle,indenenderVordersatzFalseist,sagennichtsüber denWahrheitswertdesNachsatzesaus. 26 DieUmkehrungderImplikation(1) ImAllgemeinengiltfolgendesnicht: aimpliesb=(nota)implies(notb) Ein(falsches!)Beispiel: Ø “AlleZürcher,dieamSeewohnen,sindreich.Ichwohne nichtamSee,alsobinichnichtreich.” live_near_lakeimpliesrich (notlive_near_lake)implies(notrich) [1] [2] 27 DieUmkehrungderImplikation(2) Korrekt: aimpliesb=(notb)implies(nota) Beispiel: Ø “AlleLeute,dieamSeewohnen,sindreich.Aliceist nichtreich,alsokannsienichtinKüsnachtwohnen.” live_near_lakeimpliesrich= (notrich)implies(notlive_near_lake) 28 Implikation 29 Semi-strikteBoole’scheOperatoren(1) EinBeispielausdruck(xisteineganzeZahl): 5 x + > y x Undefiniertfürx=0 30 Semi-strikteBoole’scheOperatoren(2) ABER: Ø DivisiondurchNull:xdarfnicht0sein. (x/=0)and(((x+5)/x)>y) Falsefürx<0 Falsefürx=0 31 Semi-strikteBoole’scheOperatoren(3) ABER: Ø UnserProgrammwürdewährendderAuswertungder Divisionabstürzen. Wirbraucheneinenicht-kommutativeVersionvonandundor: Semi-strikteBoole’scheOperatoren 32 Semi-strikteOperatoren(andthen,orelse) aandthenbergibtdasselbewieaandbfallsaundbdefiniert sind,undergibtimmerFalsewennadenWertFalsehat aorelsebergibtdasselbewieaorbfallsaundbdefiniert sind,undergibtimmerTruewennadenWertTruehat. (x/=0)andthen(((x+5)/x)>y) Semi-strikteOperatorenermöglichenesuns,eine Auswertungsreihenfolgezudefinieren(vonlinksnachrechts) WichtigfürProgrammierer,daundefinierteObjektezu Programmabstürzenführenkönnen! 33 Normalevs.Semi-strikteBoole’scheOperatoren BenutzenSie… Ø normaleboole’scheOperatoren(andundor),fallsSie garantierenkönnen,dassbeideOperandendefiniert sind Ø andthen,fallseineBedingungnurdannSinnergibt, wenneineanderewahrist Ø orelse,fallseineBedingungnurdannSinnergibt,wenn eineanderefalschist Beispiel: Ø “FallsSienichtledigsind,mussIhrEhepartnerden Vertragunterschreiben.” is_singleorelsespouse_must_sign 34 Semi-strikteImplikation Beispiel: Ø “FallsSienichtledigsind,mussIhrEhepartnerden Vertragunterschreiben.” (notis_single)impliesspouse_must_sign Definitionvonimplies:inunseremFallimmersemi-strikt! Ø aimpliesb=(nota)orelseb 35 Eiffel-NotationfürBoole’scheOperatoren SchlüsselwortinEiffel not or and = implies MathematischesSymbol ~oder¬ ∨ ∧ ⇔ ⇒ 36 Aussagen-undPrädikatenkalkül Aussagenkalkül: EigenschaftpgiltfüreineinzigesObjekt. Prädikatenkalkül: EigenschaftpgiltfürmehrereObjekte. 37 Einallgemeineresor G:eineGruppevonObjekten,p:eineEigenschaft or:IstpfürmindestenseinObjektinGerfüllt? KannmananmindestenseinerHaltestellederLinie8aufeine andereLinieumsteigen? Haldenbach.is_exchangeor ETH_Universitaetsspital.is_exchangeor Haldenegg.is_exchangeor …(alleStationenderLinie10) DerExistenzquantor:existsoder∃ ∃s:Line10 stations|s is_exchange “EsgibteineHaltestellesinLine10.stations sodasss.is_exchangewahrist.” l l 38 Einallgemeineresand and:IstpfürjedesObjektinGerfüllt? SindalleHaltestellenderLinie8Haltestellen,andenenman umsteigenkann? Haldenbach.is_exchangeand ETH_Universitatetsspital.is_exchangeand Haldenegg.is_exchangeand… (alleStationenderLinie10) DerAllquantor:for_alloder∀ ∀s:Line10 stations|s is_exchange “FürallesinLine10.stationsgilts.is_exchange.” l l 39 AusdrückemitdemExistenzquantor EinBoole’scherAusdruck: ∃s:EINE_MENGE|s.eine_eigenschaft Ø Truegenaudann,wennmindestenseinElementvon EINE_MENGEdieEigenschafteine_eigenschafterfüllt Beweise: Ø True:FindenSieeinElementinEINE_MENGE,welches dieEigenschafterfüllt Ø False:BeweisenSie,dasskeinElementvon EINE_MENGEdieEigenschafterfüllt.(Siemüssenalso alleElementeüberprüfen.) 40 AusdrückemitdemAllquantor EinBoole’scherAusdruck: ∀s:EINE_MENGE|s.eine_eigenschaft Ø Truegenaudann,wennjedesElementvon EINE_MENGEeine_eigenschafterfüllt Beweise: Ø True:BeweisenSie,dassjedesElementvon EINE_MENGEdieEigenschafterfüllt.(Siemüssenalso alleElementeüberprüfen.) Ø False:FindenSieeinElementvonEINE_MENGE, welchesdieEigenschaftnichterfüllt 41 Dualität DieVerallgemeinerungdesDeMorgan’schenGesetzes: not(∃s:EINE_MENGE|P)=∀s:EINE_MENGE|notP not(∀s:EINE_MENGE|P)=∃s:EINE_MENGE|notP 42 LeereMengen ∃ s:EINE_MENGE|eine_eigenschaft FallsEINE_MENGEleerist:immerFalse ∀ s:EINE_MENGE|eine_eigenschaft FallsEINE_MENGEleerist:immerTrue 43 QuantoreninEiffel acrossLine8asssomes item is_exchangeend acrossLine8assall s item is_exchangeend MathematischeNotation: ∃s:Line10 stations|s is_exchange ∀s:Line10 stations|s is_exchange l l l l l l l l 44 WaswirindieserLektiongesehenhaben: Ø Ø Ø Ø Ø Ø DieLogikalsWerkzeugdeslogischenDenkens Boole’scheOperationenundihreWahrheitstabellen EigenschaftenvonBoole’schenOperatoren:Benutzen SiekeineWahrheitstabellen! DasPrädikatenkalkül:LogischeAussagenüberMengen Semi-strikteBoole’scheOperatoren QuantorenundihreDarstellunginEiffel 45