Nun gut, aber wir können nicht mal warten auf diejenigen, die zu spät kommen.
Ich würde sagen, wir beginnen dann jetzt. Also guten Morgen,
allen, die da sind, die Tür ist noch offen,
falls halt jetzt so nach und nach noch die anderen eintrudeln.
Worum soll es heute gehen oder worum soll es in dieser Woche gehen?
Bisher haben wir uns rein mit Logik befasst. Das ist gut,
das ist auch sehr wichtig, aber meistens,
wenn man irgendwelche Sachverhalte, sei es in der Mathematik,
sei es, vor allem aber auch in der Informatik hat,
sind die eben nicht rein logischer Natur.
Logik spielt immer eine Rolle,
aber nicht die alleinige
Und das ist der Grund, warum wir
jetzt in dieser zweiten Woche uns mit Datentypen auseinandersetzen werden.
Heute speziell zunächst einmal mit nicht-rekursiven Datentypen. Verbundsdatentypen, wo wir
verschiedene Dinge ansammeln. Das ist halt, wie gesagt,
wichtig, damit wir nicht nur von der Logik her argumentieren können,
sondern über Dinge,
die tatsächlich irgendwie in der Welt
eine Rolle spielen
Und dafür gehen wir befolgt vor. Als erstes werden wir
so ein bisschen darüber sprechen, wie man Datentypen überhaupt einführt.
Dann werden wir darüber sprechen, wie wir Funktionen in Kork
über diesen Datentypen definieren können.
Und dann zum Schluss geht es darum,
wie können wir eigentlich dann Beweise führen über diese Datentypen.
Und darum geht es uns ja letztendlich.
Schauen wir uns also mal das erste Beispiel hier an
Und zwar ist das das folgende. Wir haben verschiedene Transportmittel,
da ist ein Zug, das ist ein Fahrradflugzeug, Bus, Auto.
Und wir brauchen irgendwie einen Datentyp, der diese verschiedenen Transportmittel erhält.
Ich könnte jetzt natürlich noch mehr dazufügen,
aber es kommen keine neuen Erkenntnisse dazu,
deswegen beschränke ich mich jetzt auf diese Transportmittel und nehme nicht,
was weiß ich, E-Bike oder Schiff oder so,
ist jetzt nicht drauf,
weil es kommen keine neuen Erkenntnisse dazu.
Wie kann ich
das definieren
Und das geht in Cork folgendermaßen.
Nämlich mit dem Schlüsselwort Inductive. Danach folgt der Datentyp,
den wir definieren wollen, in dem Fall Transport.
Hier sagen wir, dass das jetzt eine Menge von Objekten sein soll.
Man könnte auch teilnehmen, aber bleiben wir lieber bei Set.
Und jetzt zählen wir hier, sie sehen das,
die verschiedenen Möglichkeiten auf
Dass etwas vom Typen Transport sein kann. Also ein Fahrrad
ist vom Typen Transport, ein Auto ist vom Typen Transport,
ein Bus, ein Zug und ein Flugzeug.
Und weiter jetzt nichts. Man könnte das natürlich dann erweitern im Nachhinein.
Aber jetzt hier für unser Beispiel wollen wir es dabei belassen.
Dieses oder, das kennen Sie wahrscheinlich von Grammatiken,
falls nicht, also es heißt, oder,
also etwas vom Typen Transport ist ein Fahrrad oder ein Auto
oder ein Bus oder ein Zug oder ein Flugzeug,
so können Sie
das lesen
Schauen wir uns mal ein zweites Beispiel an.
Wir wollen ein Datentyp in Cock definieren, der Buhl entspricht.
Buhl hatte zwei Werte. Nämlich True und False.
Das muss sich irgendwie widerspiegeln. Schauen wir uns das an
. Das ist nämlich tatsächlich so. Wir können Buhl
wie folgt definieren, wir sagen Inductive Boohl vom Typen Set
Jetzt eine kleine Überraschung, sage ich gleich was dazu.
Wir können jetzt hier schreiben, True, Doppelpunkt,
Buhl oder Falls Doppelpunkt Buhl. Wäre völlig okay.
Wenn man das immer macht, wir werden später sehen,
dass man dahinter hinter den Doppelpunkt auch was anderes schreiben kann.
Wenn man das immer macht,
ist immer nur Doppelpunkt und dann das, was hier steht.
Wenn das bei jedem einzelnen der Fall ist,
dann kann man es auch immer weglassen und einfach nur True oder Fortschreiben.
Dann ist das eine abkürzende Schreibweise. Wir können also sagen,
in Buhl haben wir diese beiden Objekte,
True und Forts
Und damit ist der ganze Datentyp charakterisiert.
Drittes Beispiel. Wir wollen in Cock einen Datentyp definieren,
der Matrikel nun mal Semesteranzahl und Anzahl an Leistungspunkten eines Studenten erfasst.
Und jetzt sehen Sie, was ich meinte, damit,
dass wir nicht immer nur Doppelpunkt und dann kommt das,
also der Datentyp, den wir definieren wollen.
Ich zeige es
ein Beispiel
Also, wir wollen Student Data, also wir erheben ein paar Daten von Studenten.
So. Und jetzt steht hier Student Data Konstrukte,
das heißt, wir haben eigentlich immer nur eine Möglichkeit,
wie wir einen konkreten Studenten in die Daten bekommen können.
Und jetzt, was jetzt neu ist,
also mal abgesehen davon,
dass wir hier nur eine Möglichkeit haben und nicht irgendwie Student und weiß ich nicht,
irgendwie Schüler und,
weil wir wollen jetzt uns wirklich
nur um Studenten kümmern
Mal abgesehen davon, dass wir hier nur eine Möglichkeit haben,
was neu ist, ist, dass hier nicht einfach steht,
Doppelpunkt und dann Student Data, sondern hier kommen verschiedene Sachen davor.
Und das können sie so ansehen wie Parameter,
also um einen Studenten in die Datenbank aufzunehmen,
muss ich drei verschiedene Werte konkret eingeben.
Und das sind hier diese Werte. Matrikel Nummer,
eine natürliche Zahl, Semesterzahl,
ebenfalls eine natürliche Zahl
Und Anzahl an Leistungspunkten in dem Fall, ebenfalls eine natürliche Zahl.
Und wenn ich das eingebe, wenn ich also mache,
Stune, Data, Sea von, sagen wir mal,
Matrikelnummer, 6, 2, 5, 4,
3 oder sowas, Semester an 2, 4,
Anzahl an Leistungspunkten, keine Ahnung, 100, ja,
dann ist das ein fertiges Objekt dieser Datentyps-Stune-Data.
Und wir haben halt keine anderen Möglichkeiten, Studenten in
die Datenbank aufzunehmen. Deswegen gibt es hier kein oder,
also kein Lot, das sie irgendwie sehen würden.
So, wie sieht es allgemein aus? Joben ist nun mal das Beispiel mit dem Transport.
Und wir können halt, wir sind das allgemeine Schema,
eigene Datentypen als Zusammensetzung von bereits bekannten Objekten definieren, eben mit Inductive.
Sie sehen das, der Typname, wie soll das heißen?
Wir benutzen eigentlich immer Set, soweit ich das überblicke.
Man kann ja aber auch andere Sachen hinschreiben. Und das ist jetzt erstmal nur Der Fall,
wie es hier oben auch ist,
dass wir verschiedene Möglichkeiten haben, die, ah nee,
nee, sorry, wenn ihr überall Typen, Name,
Stände oder Stünde, Stünde ist richtig, ne,
Stünde,
dann hätten wir hier diese verschiedenen Objekte und die werden alle von diesen Typen und damit wäre das wie hier oben im Beispiel.
Es kann aber sein, dass ihr verschiedene Typen stehen,
also Typ 2, Typ 2 und so weiter.
Das heißt also, wir haben hier verschiedene Möglichkeiten,
Elemente zu wählen und die können verschiedene Eingaben verlangen,
wie zum Beispiel Student Data eben,
was eben nicht sofort ein Objekt der Klasse war,
sondern wo erst noch gewisse Eingaben
getätigt werden müssen
Das war jetzt die Einführung von Datentypen. Und jetzt ist wieder die Frage,
oder was heißt wieder, jetzt kommt die Frage,
wie können wir auf diesen Datentypen Funktionen definieren?
Denn das ist, was wir so üblicherweise machen,
wir wollen irgendwie Beziehungen zwischen den verschiedenen Objekten herstellen,
der Datentyp, ohne dass wir irgendwas damit machen könnten,
wäre ja wertlos
Ja, und wir sehen das jetzt hier am Beispiel,
wie das möglich ist.
Wir sagen Differenition, dann geben wir unsere Funktion einen Namen.
Hier Engine, guten Morgen. Und sagen,
das Ganze ist vom Typen Transport nach Prop. Heißt,
wir wollen den verschiedenen Transportmitteln zuordnen, ob sie eine Engine besitzt,
also ob sie einen Motor besitzen oder nicht.
So,
und das tun wir jetzt
wie folgt
Wir hätten hier übrigens sich gerade, wir hätten ja auch
Gudulen nehmen können und dann False und True klein geschrieben.
Das sind dann die beiden Werte vom Buhl.
Aber es geht auch so. Was tun wir hier?
Wir sagen, und jetzt kommt die Lamna-Notation,
die sie letzten am Samstag kennengelernt haben, sagt.
Sie nehmen ihr, also wir haben eine Funktion,
die nimmt etwas vom Typen Transport.
Und jetzt tut sie das folgendes, das folgende.
Sie matcht dieses Objekt vom Typen Transport mit folgenden Möglichkeiten
Entweder es ist ein Fahrrad, dann bildet das Ganze,
bildet die Funktion auf False ab,
was ja vom Typen Prop ist, also groß geschrieben.
Oder, und jetzt könnt ihr mehrere möglich,
könnt ihr jetzt alle aufzählen, eine Möglichkeit,
ich könnte jetzt also sagen, was war das,
K wird auf True abgebildet, Plane wird auf Tour abgebildet, was hatten wir noch?
Was? Bass, genau, Bass wird auf True abgebildet,
ich könnte sie alle aufzählen oder ich sage mit dem Stichwort,
also mit diesem Schlüsselwort other, kann ich sagen, alle anderen,
das ist manchmal recht praktisch, alle anderen bitte auf True.
Sollen wir, glaube ich, noch weitere Beispiele, genau.
Schauen wir mal, welche, also wir wollen definieren, welche Verkehrsmittel umweltfreundlich sind.
Das könnten wir beispielsweise so tun. Also wir sagen wieder,
äh, Difinition, und jetzt, wie heißt unsere Funktion?
Ecofriendly. Es ist wiederum eine Funktion, die ein,
äh, konkretes Transportmittel bekommt, und herausgibt in Prop,
ob das umweltfreundlich ist oder nicht.
Okay, wir haben hier erst mal wieder die Zeile,
dass wir sagen, okay,
du nimmst deinen Tee vom Typen Transport und match das mit folgendem.
Und jetzt haben wir verschiedene Möglichkeiten,
ein Fahrrad wird auf True gematcht, ist umweltfreundlich,
ein Auto wird auf Falls gematcht,
ist nicht umweltfreundlich,
Bus wird auf True gematcht,
Train of True und Plain of Falls
Ich hätte das hier auch kürzer schreiben können, also eine Alternative,
Schreibweise wäre hier gewesen, in Anlehnung an die vorjährige Folie.
Die hätte einfach nur aufschreiben können. K wird
nach False abgebildet, Plane wird nach False abgebildet.
Und dann hätte ich machen können, aber auf True.
Das wäre genauso möglich gewesen, ja. Ich habe eine Sache noch nicht erklärt,
also bei der Datentyp-Definition kannten sie das bereits,
hier genauso dieses hier ist halt das.
Oder wenn es das ist, dann machst du das
oder du möchtest mit dem, dann tust du folgendes.
Also dieser Strich ist wieder als oder zu lesen
Das ist jetzt eine Geschmackssache. Sie dürfen auch,
also Kork erlaubt es auch hier, so einen Strich zu setzen.
Das finde ich irgendwie von der Logik schlechter. Vom Sehen
her ist das ein bisschen besser, weil dann alles so
schön in Reihe ist und man die müssen sie entscheiden.
Ich mache es ohne hier einen Strich zu setzen.
Sie können aber auch hier einen Strich setzen, wenn sie wollen.
Gut. Jetzt kommt nochmal das allgemeine Schema.
Also wir haben hier nochmal das Beispiel,
woran wir
uns orientieren können
Und wie sieht das Schema aus? Also wir sorgen definition,
Funktionenname. Wir sagen, von wo, nach wo soll
diese Funktion gehen? Und wir können dann Folgendes tun.
Wir nehmen Tee eben, als Objekt dieses Typs hier an.
Das wird reingegeben. Also das ist jetzt hier unser Lamna-Ausdruck
hier insgesamt. Und wir sagen, Match Tee with.
Und jetzt? Hier sollte es übrigens besser eingerückt sein,
aber das ist jetzt kein Fehler.
Und jetzt geben wir die verschiedenen Elemente durch und sagen jeweils,
was das Ergebnis sein soll
Und vergessen sie nicht immer, wenn sie mit dem Matchen
fertig sind, müssen sie so ein End schreiben.
Dass er weiß, dass ein Matchen ist vorbei.
So, jetzt haben wir also was getan. Wir haben
Datentypen definiert und wir haben Funktionen auf diesen Datentypen definiert.
Heißt, wir haben Gegenstände und können ein paar Dinge
mit denen machen. Das ist schon mal ganz nett.
Worum es uns aber hier in diesem Kurs geht,
ist ja zu beweisen, dass diese Funktion,
also dass wenn ich da was tue,
auch bestimmte Dinge passieren,
dass es so passiert und nicht anders
Und die Frage ist, wie kriegen wir das hin?
Und das machen wir hier auch erstmal wieder am Beispiel.
Damit sie jetzt erstmal sehen, was eigentlich das Problem ist,
wollen wir beweisen, dass Theorien suggeriert ist,
ecofriendly or Engine, dass alle Transportmittel entweder, also nicht entweder,
sondern sie sind umweltfreundlich oder sie haben meinen Motor.
Das sollte jetzt mit diesen Transportmitteln, die wir hier definiert
haben, korrekt sein. Und die Frage ist,
wie fangen wir an
Nun ja, wir haben eine Allquantifizierte Aussage und das,
was wir üblicherweise tun, ist, wir sagen, proof all.
Also, sei Tee, beliebig, aber fest.
Wir haben umweltfreundlich von Tee oder Motor von Tee zu zeigen.
Turnu? Ja? Geben wir durch eine Fälle durch.
Wie? Es sind ja nur fünf Stück vorhanden und
da muss er halt alles aufflößen,
wie zu den einzelnen Fällen und zu ihm
für einzelne entscheiden
Das ist am Ende die richtige Lösung. Aber so,
also wir kommen da, das ist genau richtig,
wir kommen da gleich drauf zurück.
Aber jetzt an der Stelle, wenn wir es so machen,
du wirst bisher kennengelernt haben, das ist jetzt hier der Punkt.
Und wir hier stehen, können wir zwar noch sagen,
keine Ahnung, das habe ich gesagt, poof or left,
oder proof or right, das wären jetzt die einzigen Möglichkeiten.
Und das jetzt nachweisen. Und wir wissen
nichts Konkretes über Tee, das kann so nicht funktionieren.
Okay? Das heißt, wir müssen es jetzt
irgendwie anders regeln
So, und jetzt soll ich mal den Stuhl hier ran,
der Rest passiert in Cock. Okay. So,
also ich gehe jetzt hier nur Give it Transport definiert,
Bu wird definiert, Engine wird definiert,
Eco Friendly wird definiert.
Die Sache mit der Matrikel-Nummer, ups.
Und das ist jetzt der Satz und den
wollen wir beweisen
So, und was jetzt ganz richtig vorgeschlagen wurde,
ist, dass wir irgendwie über Fallunterscheidung gehen müssen.
Wir müssen also die verschiedenen Fälle betrachten und darüber die ganze Geschichte beweisen.
Okay, wir haben eine Aussage für alle Transportmöglichkeiten, gilt.
Und wir zeigen das, indem wir es für
jedes einzelne Transportmittel zeigen. Und da müssen wir es,
also eine zweite Möglichkeit in der Hand haben,
um allquantifizierte Aussagen zu zeigen,
wenn wir einen induktiven Typen haben
Konkret können wir folgende Taktik benutzen. Proof by Induction.
Ist mit dem Ton alles okay? Ja. Okay.
Proof by Induction. Und sie sehen, jetzt werden uns
fünf Teilziele offeriert. Und diese fünf Teilziele röhnen daher,
dass wir fünf verschiedene Transportmittel hatten. Und wir müssen sie
jetzt einzeln abklappern, würden wir uns zunächst dem ersten.
Als erstes haben wir zu beweisen,
dass ein Fahrrad umweltfreundlich ist oder
einen Motor hat
Naja, wenn wir es nicht völlig verquer definiert haben,
dann solltest du bitte umweltfreundlich sein.
Also proof, or left. Gut, jetzt ist immer noch
die Frage, wie gehen wir jetzt eigentlich weiter voran?
Weil wir wollen ihm jetzt sagen, naja,
ecofriendly from Bisical, das war doch wahr.
Wie machen wir das? Wie werten wir das jetzt eigentlich aus?
Und das ist eine Sache, die habe ich ihn,
glaube ich, auch noch nicht vorgestellt,
weil die auch in der ersten Woche noch nicht relevant war.
Das wird jetzt aber in der zweiten Woche werden sie
das benutzen, wenn sie sagen wollen,
dass er etwas ausrechnen soll
Dann machen sie simpel, also simplify, ja.
Und das passiert jetzt hier. Also er rechnet umweltfreundlich war
eine Funktion und die war, ich zeige Ihnen das hier nochmal,
hier definiert, wo jetzt die Maus ist.
Und dort haben wir ihm gesagt, wenn die Eingabe
ein Fahrrad ist, was er da auszurechnen hat.
Nämlich hier das True. Und genau das rechnet er jetzt
hier an der Stelle aus.
So, und ein True beweisen wir mit Proof True
Das können wir immer beweisen, das ist kein Problem.
So, haben wir jetzt verschiedene weitere Fälle?
Ein Auto sollte nicht umweltfreundlich sein,
wir konzentrieren uns also auf die zweite Teil,
oder die zweite Möglichkeit, nämlich, dass es einen Motor besitzt.
Und da geht es jetzt wieder ähnlich zu,
simpel, und dann prove true.
So, was mache ich jetzt beim Bus?
Helfen Sie mir mal
Ja. Ja. Genau. Genau, simple.
Genauso ist es sehr schön. So, Sie merken,
ja, beim Zug haben wir jetzt auch wieder beide Möglichkeiten.
Machen wir mal Proof all right diesmal.
Und sie merken, ich tippe das jetzt,
weil wir es vorführen, aber wenn sie für sich selbst arbeiten,
würden sie vielleicht dann irgendwann auch die Idee kommen,
Copy und Pace zu benutzen,
ja, nur noch gegebenenfalls umzumodeln.
Aber sie merken eben auch, der Rechner will das von ihnen alles ganz genau wissen.
Also so ein analog mal dahin geschleudert, das funktioniert nicht.
So, dann haben wir das also durchgeixt und damit ist
diese Aussage für alle Transportmittel bewiesen,
also alle Transportmittel,
die wir jetzt als Transportmittel zugelassen haben
Gut. Jetzt haben wir hier eine Geschichte,
die werden wir gleich brauchen. Also wenn sich fragen,
wie komme ich denn jetzt darauf,
dieses komische Theorien hier aufzuschreiben, liegt einfach daran,
dass wir es gleich, ich weiß nicht,
müsste im nächsten Theorien sein, wir werden es sehen,
gut benutzen können.
Da habe ich dann gemerkt, ah, an der Stelle bräuchte ich das jetzt.
Deswegen steht es jetzt hier als Lämmer, kommt also,
wenn man es selbst durchführt, würde es dann erst später auftauchen.
Aber im Text muss es natürlich vorher stehen. Okay,
also wie können wir sowas beweisen? Froof not. Ja,
es ist ja eine Negation, die zu beweisen ist.
So, ja, und was mache ich jetzt?
Ist ein bisschen tricky. Auf der anderen Seite
viel Möglichkeiten hat man auch nicht.
Nein, dort
Use equality h, genau. Achso, ja, ich muss erst,
okay. Jetzt macht er aus dem True und False.
Ich muss erst, ob es... Ich muss es andersrum haben, ne?
Das heißt, ich nutze jetzt einmal aus Fact,
ich glaube, wir hatten das Equality Sim genannt.
So ist es. So. Und jetzt setzen wir das ein
und wir würden das gerne mit folgenden Sachen einsetzen,
zunächst mit Prop
Dann mit True, dann mit False. Machen wir es
erstmal soweit. Und jetzt kann ich das so nicht machen,
weil use all ja nur eine Eingabe zulässt.
Es gibt aber in diesem Self mit Strategies die Möglichkeit,
use all 3 und das geht bis 5 hoch zu machen,
dann können sie gleich mehrere auf einmal einsetzen.
Achso, die müssen natürlich trotzdem Hanull sagen.
Und wenn ich das mache, dann kriege ich die Geschichte,
nehme ich nach und sie können das jetzt einzeln machen,
aber sie können auch nach und nach,
also direkt hier Prop einsetzen,
True und False
Und es bleibt dann diese Implikation übrig, ja?
Gut. Und wenn ich das mache,
dann kann ich hier wieder sagen, use Implication,
H1 mit H, denn wir wollen ja vorrats gleich Drew haben.
So, und jetzt können wir Use Equality H1 machen,
nachdem wir das umgedreht haben.
Schwupp. Und jetzt müssen wir nur noch True beweisen.
Also Merken ist ein bisschen tricky,
aber jetzt hat man es bewiesen und damit ist gut
Und jetzt schauen wir uns weitere Beispiele an.
Da haben wir zunächst einmal die Definition schneller als 50,
hatten wir gerade auf den Folien, glaube ich, noch nicht.
Also, nur beim Fahrrad falsch und bei allen anderen ist es wahr,
dass sie schneller als 50 Kilometer pro Stunde fahren.
So, also das bezieht sich jetzt vielleicht nicht auf den Profi-Rennsport.
Ich weiß nicht, ob die über 50 schaffen wahrscheinlich
Gut. Und jetzt ist die nächste Aussage, die wir
beweisen wollen, die folgende. Am besten gucken sie hier
, oben rechts. Also für alle Transportmittel gilt,
wenn sie umweltfreundlich und schneller als 50 sind,
dann sind sie ein Zug oder ein Bus.
Also ein bisschen weniger holprig formuliert,
nur Züge und Busse sind umweltfreundlich und schneller als 50
Kilometer pro Stunde
Gut, was ist der erste Schritt? Jo.
Ich mache das jetzt mal. Ich kann jetzt noch mal
einen Puff im... Ich kann noch einen Use and H.
Das ist die alte Variante und sie funktioniert halt Nicht immer bei induktiven Typen.
Also bei den Typen, die wir definieren,
hier durch Fallunterscheidung, reicht das mit dem Proof All?
Also sie merken jetzt, sie kommen hier nicht weiter.
Und bei den Typen, die wir hier haben, sich Vollunterscheidungen,
können wir nicht immer die Sachen mit Proof All beweisen.
Manchmal schon. Aber oft eben nicht. Und wir haben jetzt
hier eben die zweite Möglichkeit kennengelernt, statt Proof All,
Proof by Induction.
Und dann macht er
die Fallunterscheidung
So, dann machen wir erst mal Proof Implication.
Sagen erst mal Use and H. Und dann sehen wir,
dass wir hier eine Annahme haben. Also erst mal sehen
wir, gucken wir uns mal das Ziel an.
Und beim Ziel stellen wir fest,
ein Fahrrad kann kein Zug sein und ein Fahrrad kann
kein Bus sein
Also die einzige Chance, die wir haben, ist,
wir müssen zeigen, dass das, was wir hier oben bereits haben,
eins von den beiden Dingern oder die Sachen zusammen,
bereits widersprüchlich sind.
Gut, und wie machen wir das? Naja,
schauen wir uns an, umweltfreundlich von Fahrrad,
das können wir zwar auflösen, aber das muss ja stimmen.
Ja, das ist ja korrekt. Aber schneller als 50 und Fahrrad
, das ist nicht korrekt. Also können wir ihm sagen,
rechne das mal aus, weil es müssen ihm sagen,
in Haar,
weil das
eben in der Hypothese Haar
ausrechnen soll
Und wenn er das tut, dann rechnet er eben Falls aus.
Und jetzt können wir sagen, use falls.
Habe ich Ihnen schon gesagt, dass viele Beweise dadurch laufen,
dass sie ihre Voraussetzungen als widersprüchlich aufweisen müssen.
Sie sehen das jetzt, das wird noch häufiger jetzt mit den induktiven Datentypen.
Gut, dann machen wir hier das Gleiche,
wir machen Proof Implication, ein Auto ist weder Zug noch Bus,
Also müssen wir irgendwie eins von den beiden dort oben als widersprüchlich herleiten.
Wir trennen sie erst einmal und dann überlegen wir uns,
dass ein Auto nicht umweltfreundlich ist und sagen ihnen,
dass ihm das, indem wir sagen,
simpel in H0. Und dann haben wir auch wieder unser Fall zur Verfügung,
Husefalts H0. Dritter Fall,
was machen wir diesmal
Was tun wir? Jo. Genau. Also wir lassen
die ganze Voraussetzung hier völlig, ob es außer Acht,
denn wir können hier einfach die Sache wunderbar nachweisen.
Und jetzt können wir einfach sagen, proof, equality.
Es ist ja die einfachste Form der Gleichheit,
die zu zeigen ist,
die kriegen wir
immer geschenkt
Und sie sehen jetzt ganz analog, diesmal ist die linke Seite richtig.
Wir sind beim Train, also proof all left.
Und hier haben wir jetzt wieder eine Situation,
wo sie natürlich das Flugzeug, ist weder Zug noch Bus,
Also muss irgendwie die Voraussetzung, wenn unser Satz nicht falsch ist,
die Voraussetzung bereits falsch sein.
Und da haben wir wieder die Geschichte mit dem Echo Friendly,
also umweltfreundlich, das ist nicht richtig.
Also simpel in Hanull. Und dann können wir sagen,
use falls Hanull. So, und damit haben wir auch
das nachgewiesen. Jetzt schauen wir uns diese Funktion an,
das soll jetzt einfach mal darstellen,
sie sind irgendwie im Urlaub
Und sie benutzen so nach und nach verschiedene Transportmittel.
Und das soll jetzt einfach mal eine Reihenfolge darstellen.
Sagen wir mal, sie fangen mit dem Bus an,
dann geht es zum Zug, vom Zug geht es ins Flugzeug,
vom Flugzeug ins Auto, vom Auto am Ende,
aus irgendwelchen Gründen noch mal mit dem Fahrrad.
Und dann wieder zum Auto. Und wenn sie beim Auto
sind, dann kommen sie hier wieder zum Fahrrad.
Also dann wechseln sie nur noch zwischen Auto und Fahrrad.
Weil sie irgendwie vor Ort sind und manchmal mit dem Auto
fahren und sich manchmal ein Fahrrad ausleihen.
So, und wenn sie so eine Funktion haben, dann können wir dort wieder Dinge beweisen.
Und in dem Fall folgende Aussage, gucken Sie wieder hier oben rechts. Nämlich,
dass für alle Transportmittel gilt,
dass wenn das nachfolgende Transportmittel von Tee ein Auto ist,
Tee ein Flugzeug oder Tier ein Fahrrad ist,
das schauen wir uns nochmal an,
hier in dieser Funktion, also wir suchen die Situation,
dass rechts gewissermaßen ein Auto steht, Sie sehen,
dass hier, ah, da muss hier links,
der Plane ist okay und das Fahrrad bildet auf das Auto ab.
Gut, und das wollen wir jetzt wieder beweisen.
Und das kennen Sie inzwischen, wir machen Proof
Binduction und haben verschiedene Dinge zu zeigen. So,
und weil man diese Funktion jetzt irgendwie nicht mehr so gut im Blick hat,
weil umweltfreundlich war so, dass man es recht schnell wieder wusste,
sagen wir jetzt mal direkt, rechnen uns mal alles aus.
Und wenn du es ausgerechnet hast, dann schauen wir,
was wir eigentlich noch zu zeigen haben.
So, wenn sie das tun, dann sehen sie,
aha, wir sollen also zeigen, dass aus K,
gleich K, da können wir nichts mit anfangen.
Sollen wir zeigen, dass Bicycle gleich playen oder Bicycle gleich Bicycle.
Okay, das sollte gut möglich sein. Wir müssen ihm
erst mal, müssen es proof imp machen.
Wir müssen das wegkriegen, auch wenn wir mit dem Haar,
also das heißt, hier Zar, nichts anfangen können.
Und jetzt können wir sagen, proof alright.
Und jetzt können wir sagen,
proof equality
Das war relativ problemlos. Schauen wir mal,
ob es bei den anderen Fällen genauso ist.
Wir sagen ihm erst mal wieder, rechne das bitte mal aus.
So, und jetzt haben wir den ersten Fall,
glaube ich, der spannend wird, genau.
Also wir haben auf jeden Fall eine Implikation zu zeigen, das sagen wir ihm auch.
Und wir können auf jeden Fall nicht das Ziel beweisen,
weil ein Auto kein Flugzeug und sein Auto kein Fahrrad ist.
So, und jetzt haben wir als, müssen wir also,
weil wir das Ziel nicht nachweisen können,
wenn dieser Satz korrekt ist das haben wir uns gerade überlegt,
da müssen wir nachweisen, dass unsere Voraussetzungen, also unsere Voraussetzung hier falsch ist.
Und wir haben Bicycle gleich K, ja. Ja,
ja, ja, ja, ja, ja, ja,
ja, okay, okay, dann machen wir das.
Ich hoffe, dass wir jetzt nicht überall mit dem Trick durchkommen,
sonst, aber wir können es erstmal auf jeden Fall so machen,
wenn wir überall mit dem Trick durchkommen,
dann muss ich trotzdem mal einhängen,
weil immer wird dieser Trick nicht funktionieren.
Aber hier schöne Idee, ja, also machen wir Facts,
Equality, symmetrisch. Ähm, use all 3 Hannull und
wir sagen ihm jetzt, dass wir in Transport sind.
Und es geht um Bicycle und um K. So,
und jetzt können wir machen, use im H1H.
Und dann können wir sagen, proof alright.
Was? Ach, jetzt hat er wieder was Altes.
Ich muss jetzt hier einmal mit exakt arbeiten, weil der,
jetzt habe ich umgestellt aus gewissen Gründen auf einer anderen Fahrt
und da ist das Selfmade Strategies wieder noch nicht angepasst.
Also sie können dann Use H1 benutzen auch, ne?
Gut, also das war nicht die Art,
wie ich das gedacht hatte, dass wir das behandeln.
Wir schauen jetzt mal, was jetzt bei den anderen Fällen passiert,
wenn wir immer mit dem Trick durchkommen,
muss ich an der Stelle dann später nochmal zurück
Machen wir jetzt erstmal Proof Impf. Was haben wir hier?
Also ein Bus. Achso, ich sollte vielleicht erst wieder ausrechnen lassen.
Jetzt kommen wir mit dem Trick nicht mehr weiter.
Also wir haben in dem Fall das Ziel wieder als falsch.
Also das werden wir nicht nachweisen können, wenn alles mit rechten Dingen zugeht.
Und unsere Voraussetzung müssen daher einen Widerspruch liefern. Und dieser
Widerspruch ist jetzt erstmal nicht Offensichtlich. Also es ist doch,
er ist irgendwie offensichtlich, aber es ist nicht offensichtlich,
wie wir Cox sagen, dass das nicht sein kann.
Denn wir haben hier Objekte, natürlich sollen die unterschiedlich sein.
Aber wie können wir Cock das verklickern, dass die auch
unterschiedlich sind, dass wir also hier einen Widerspruch erhalten.
Und die Idee ist folgende, um Cock dazu zu bringen,
das einzusehen, dass das nicht sein kann.
Tun wir folgendes. Wir benutzen das Pattern-Matching,
was ja auf den verschiedenen Konstruktoren, so heißen sie,
also die verschiedenen Möglichkeiten, um ein Element aus dem Datentyp Transportmittel zu sein.
Dass darüber matcht und daraufhin verschiedene Dinge herausgibt. Und die Art und Weise,
wie es das tun kann, ist mittels von Funktionen.
Das heißt, wir können diese Gleichheit hier nutzen und wenden auf
diese Gleichheit oder auf die einzelnen Objekte dieser Gleichheit Funktionen an,
Wenn wir mit gleichem Gleiches machen,
müsste ja auch wieder das Gleiche herauskommen.
Wenn aber Funktionen an, die das Train und das K auf Dinge abbilden,
von denen wir wissen, dass sie bereits ungleich sind.
Okay. Also, was wir tun, ist,
wir nutzen folgende Funktion, Function, Equality,
Equality Function heißt es, glaube ich.
Quality Function, ja, so ist es.
Was macht ihr die nochmal? Achten Sie mal nur auf
den hinteren Teil hier, den ich jetzt orange färbe
Macht, wenn ich habe, A, gleich am Strich,
dann ist F und A, gleich F von A, Strich.
Natürlich müssen wir ihm jetzt sagen, welche A,
A, Strich und welches F wir da benutzen.
Gut. Und dafür geben wir ihm fünf Eingaben.
Und zwar wollen wir eine Funktion angeben,
die von Transport aus abbildet in Prop
Und zwar die... Jetzt muss ich einmal kurz gucken,
Train und K haben wir.
Train und K. So schauen wir uns mal an,
was... Ach so, ich muss noch, ja,
ich muss noch die Funktion fehlt noch.
Gut. Aber ich mach's anders. Ich mach erst mal
Use all 4 und lass es dabei und dann machen wir
das andere im nächsten Schritt.
Dann sehen Sie das jetzt nochmal Zwischenschritt.
Also wir brauchen jetzt eine Funktion, die von Transport
nach Prop geht.
Die wir dann benutzen können, um aus dem Train gleich K,
was wir hier oben haben, zu Schlussfolgern,
das F von Train gleich F von K ist.
Und die Funktion muss halt so sein, dass sie F von Train,
also dass sie Train und K auf uns bereits ist,
unterschiedlich bekannte Objekte abbildet.
Welche Objekte kennen wir, die bereits unterschiedlich sind?
Naja, wo haben wir es denn jetzt?
Hier. Wir wissen, dass Two ungleich vor Ort ist.
Es reicht also, Wenn wir hier an der Stelle das
Train of True abbilden können und das K auf Fords.
Hat jemand eine Idee, mit welcher Funktion wir das tun könnten?
Ja. Genau. Mit der Funktion,
die uns sagt, Objekte, Umweltfreundlich sind.
Machen wir also Us, All H1, Echo Friendly.
Dann können wir jetzt erstmal sagen,
okay, Train gleich K haben wir,
machen wir Us
H2H. Und jetzt haben wir Echo Friendly Train, gleich Echo Friendly Car.
Das können wir jetzt wieder ausrechnen. Simple in H2.
Und dann steht da Two gleich vor Orts. So,
und damit wir jetzt den Beweis, also tatsächlich den Widerspruch
konstruieren können, können wir nun sagen, Fact.
True not equal force heißt es, glaube ich.
Nein, wie haben wir
es genannt
Mit Kuno, okay, meinetwegen. So, jetzt haben wir
uns das hereingeholt, damit wir es wieder benutzen können.
Und jetzt können wir sagen, use not,
H3, H2, wir müssen das nicht aufhalten.
Also wir können hier direkt auf den Not operieren. Jetzt
haben wir unser False und wir können sagen, use false,
H3. Damit ist dieser Teilbeweis abgeschlossen. Sie merken also,
dieses Nachweisen, dass die verschiedenen Konstruktoren, die wir haben,
unterschiedlich sind, erfordert ein bisschen Aufwand und die Möglichkeit,
sie in irgendeiner Form zu differenzieren.
Ja? Dann haben wir bei diesem Beispiel aber ganz schnell
ein Problem, weil es völlig unmöglich ist,
ein K von den Planes und der Scheiben nun ein Frame von Bass.
Ah, guter Einwand. Wir haben nicht wirklich ein Problem,
ich habe jetzt, also in dem Beispiel konnten wir eine Funktion nehmen, die wir vorher definiert hatten.
Wir können uns aber auch an der Stelle immer mittels Landernotation Eine Funktion definieren,
die genau das tut, was wir brauchen, nämlich die beiden Objekte,
die wir unterscheiden möchten, zu unterscheiden, indem sie das eine,
nur das eine auf Two matcht und alles andere auf False.
Das heißt, sie definieren dann in dieser Taktik ihr F mittels Landernotation.
Mal schauen, ob das gleich noch drankommt,
sonst gehen wir, machen wir das gleich nochmal.
Also hier haben wir wieder Proof Imp. Das Ziel ist
wieder falsch, also ich wollte vorher simplify machen,
mache ich das auch
So, jetzt haben wir doch den Fall, ne?
Ja. Gut. A. Also, wir machen mal den Anfang hier gleich,
das kopiere ich jetzt mal runter. Also, Fact,
Equality Function und wir setzen es ein mit Hanul,
Transport, Prop und jetzt eben nicht Train und K,
sondern Plain und K. So, und der ganz berechtigte Einwand war,
was tun wir jetzt eigentlich, wenn wir umweltfreundlich,
können wir jetzt schlecht nutzen, weil Umweltfreundlich sind sie beide nicht.
Motor haben sie beide. Wie unterscheiden wir sie eigentlich?
Nun, und was wir tun können, ist folgendes.
Wir machen News all H1 ist es jetzt. Und jetzt
geben wir ihm die Funktion. Und die Funktion können wir,
wenn wir keine passende Funktion an der Hand haben,
können wir einfach eine definieren.
Durch, ich muss erst mal das aktivieren.
Durch Lamna, Tee in Transport. Jetzt sage ich
ihm, Match Tee With
Und jetzt muss ich... Warte mal, hier.
Jetzt muss ich es so gestalten,
dass das Plane of True und das andere auf False gematcht wird,
dann mache ich das einfach wie folgt.
Ich sage Plane wird of True. Aber auf False
muss ich ihm noch entsagen. Dann habe ich hier meine
Funktion definiert. Da muss ich jetzt keinen Namen geben,
konnte ich jetzt
hier einbauen
Und wenn ich das tue, dann sagt er mir,
ah, aus Playing, gleich K, folgt True gleich Folds.
Und jetzt kann ich wieder ganz analog zu oben vorgehen,
indem ich sage, huse, Implication, H2H.
Ich habe True gleich Folds. Ja,
den Rest kann ich wieder runterkopieren, ja.
Yuse, nots und huse, 443. Und damit ist auch
der Fall abgeschlossen
So, und hier haben wir jetzt Glück. Also ich
kann zwar Simplify machen, aber nötig ist das eigentlich nicht.
Denn in dem Fall haben wir kein Problem, denn wir können einfach das Linke zeigen.
Proof or left. Dann haben wir Plane, gleich Plane.
Und das können wir zeigen. Gut, Sie sehen also,
wie es möglich ist, verschiedene Dinge zu beweisen über Transportmittel,
der die große Schwierigkeit liegt, sicherlich am Anfang darin,
immer wenn sie verschiedene Konstruktoren haben in den Voraussetzungen und die gleich sein sollen,
angeblich daraus einen Widerspruch herzuleiten.
Aber das werden sie üben, genauso die anderen Beweise.
Gut, dann gehen wir gleich wieder in die Räume im
ersten Stock und machen dann für den Rest des Tages Übung
eben mit diesen Nichtrekursiven Datentypen