<div class="notebook"> <div class="nb-cell program" data-background="true" data-singleline="true" name="p1"> % swish helper :-style_check(-discontiguous). :-style_check(-singleton). </div> <div class="nb-cell markdown" name="md1"> # Materialien zu Kapitel 6 </div> <div class="nb-cell markdown" name="md2"> ## Baby Curt </div> <div class="nb-cell markdown" name="md3"> Zentrale Klausel: </div> <div class="nb-cell program" data-background="true" name="p2"> curtUpdate(Input,[accept],run):- kellerStorage(Input,Readings), !, updateHistory(Input), combine(Readings,NewReadings), updateReadings(NewReadings). </div> <div class="nb-cell markdown" name="md4"> Neue Äußerung wird mit bisherigen Äußerungen verknüpft: </div> <div class="nb-cell program" data-background="true" name="p3"> % combine(Readings,Updated) % Readings: Lesarten der neuen Äußerung % Updated: Lesarten der neuen Äußerung verknüpft mit den bisherigen Äußerungen combine(New,New):- readings([]). combine(Readings,Updated):- readings([Old|_]), findall(and(Old,New),memberList(New,Readings),Updated). </div> <div class="nb-cell markdown" name="md5"> **Aufgabe:** Die Zeile readings([Old|_]), sorgt dafür, dass nur die erste der bisherigen Lesarten im weiteren Verlauf beachtet wird, alle anderen werden vergessen. Ändern sie den Code so, dass keine Lesart mehr vergessen wird. </div> <div class="nb-cell markdown" name="md6"> ## Rugrat Curt (rugrat=Hosenscheißer/Kleinkind) </div> <div class="nb-cell markdown" name="md7"> Zentrale Klauseln: </div> <div class="nb-cell program" data-background="true" name="p4"> curtUpdate(Input,Moves,run):- kellerStorage(Input,Readings), !, updateHistory(Input), consistentReadings(Readings,[]-ConsReadings), ( ConsReadings=[], Moves=[contradiction] ; \+ ConsReadings=[], Moves=[accept], combine(ConsReadings,CombinedReadings), updateReadings(CombinedReadings) ). /*======================================================================== Select Consistent Readings ========================================================================*/ consistentReadings([],C-C). consistentReadings([New|Readings],C1-C2):- readings(Old), ( consistent(Old,New), !, consistentReadings(Readings,[New|C1]-C2) ; consistentReadings(Readings,C1-C2) ). /*======================================================================== Consistency Checking calling Theorem Prover ========================================================================*/ consistent([Old|_],New):- rprove(not(and(Old,New))), !, nl, write('Message (consistency checking): proof found.'), fail. consistent([],New):- rprove(not(New)), !, nl, write('Message (consistency checking): proof found.'), fail. consistent(_,_). </div> <div class="nb-cell markdown" name="md8"> **Aufgabe:** Erklären sie, wie Rugrat Curt auf Inkonsistenzen prüft. </div> <div class="nb-cell markdown" name="md9"> ## Clever Curt </div> <div class="nb-cell markdown" name="md12"> Zentrale Klauseln: </div> <div class="nb-cell program" data-background="true" name="p5"> curtUpdate(Input,Moves,run):- kellerStorage(Input,Readings), !, updateHistory(Input), consistentReadings(Readings,[]-ConsReadings,[]-Models), ( ConsReadings=[], Moves=[contradiction] ; \+ ConsReadings=[], Moves=[accept], combine(ConsReadings,CombinedReadings), updateReadings(CombinedReadings), updateModels(Models) ). /*======================================================================== Select Consistent Readings ========================================================================*/ consistentReadings([],C-C,M-M). consistentReadings([New|Readings],C1-C2,M1-M2):- readings(Old), ( consistent(Old,New,Model), !, consistentReadings(Readings,[New|C1]-C2,[Model|M1]-M2) ; consistentReadings(Readings,C1-C2,M1-M2) ). /*======================================================================== Consistency Checking calling Theorem Prover and Model Builder ========================================================================*/ consistent([Old|_],New,Model):- DomainSize=15, callTPandMB(not(and(Old,New)),and(Old,New),DomainSize,Proof,Model,Engine), format('~nMessage (consistency checking): ~p found a result.',[Engine]), \+ Proof=proof, Model=model([_|_],_). consistent([],New,Model):- DomainSize=15, callTPandMB(not(New),New,DomainSize,Proof,Model,Engine), format('~nMessage (consistency checking): ~p found a result.',[Engine]), \+ Proof=proof, Model=model([_|_],_). </div> <div class="nb-cell markdown" name="md10"> **Aufgabe:** Erklären sie, wie Clever Curt auf Inkonsistenzen prüft. </div> <div class="nb-cell markdown" name="md11"> ## Sensitive Curt </div> <div class="nb-cell program" data-background="true" name="p6"> curtUpdate(Input,Moves,run):- kellerStorage(Input,Readings), !, updateHistory(Input), consistentReadings(Readings,[]-ConsReadings,[]-Models), ( ConsReadings=[], Moves=[contradiction] ; \+ ConsReadings=[], informativeReadings(ConsReadings,[]-InfReadings), ( InfReadings=[], Moves=[obvious] ; \+ InfReadings=[], Moves=[accept] ), combine(ConsReadings,CombinedReadings), updateReadings(CombinedReadings), updateModels(Models) ). /*======================================================================== Select Informative Readings ========================================================================*/ informativeReadings([],I-I). informativeReadings([New|L],I1-I2):- readings(Old), ( informative(Old,New), !, informativeReadings(L,[New|I1]-I2) ; informativeReadings(L,I1-I2) ). /*======================================================================== Informativity Checking calling Theorem Prover ========================================================================*/ informative([Old|_],New):- DomainSize=15, callTPandMB(not(and(Old,not(New))),and(Old,not(New)),DomainSize,Proof,Model,Engine), format('~nMessage (informativity checking): ~p found a result.',[Engine]), \+ Proof=proof, Model=model([_|_],_). informative([],New):- DomainSize=15, callTPandMB(New,not(New),DomainSize,Proof,Model,Engine), format('~nMessage (informativity checking): ~p found a result.',[Engine]), \+ Proof=proof, Model=model([_|_],_). </div> </div>