Gruppen 5 und 7
Samuel Teuber
propa@teuber.dev
https://teuber.dev/propa
Tutorien in der Weihnachtszeit
Geht hin wo ihr wollt...
Was kommt bei dieser Formel raus?
(10 * 10 + 15 - 8 / 2)
((10 * 10) + 15 - (8 / 2)) = 111
=> Implizite Klammerung!
f1 a b c = --something
f1 1 f1 2
f1 1 (f1 2)
a) ω′=(λx. x x)(λy. m (y y) n)
b) (λx. x x)(λy.λn. isZero n c1 ((y y) (sub n c1))) c2 Terminiert, wenn wir die richtigen Ausdrücke auswerten!
Haskell nach Lambda
Fragen?
Mit Instanziierungen ∀α.∀β.α→β→α⪰int→bool→int∀α.∀β.α→β→α⪰bool→char→bool
Fragen?
Logische Programmierung
fritz
1,2,3,4.2
X, _X
mensch(fritz)
, alter(fritz, 17)
Flashback GBI: Aussagenlogik
Disjunktionen mit höchstens einem positiven Literal ¬x1∨¬x2∨¬x3∨¬x4∨y
Kann man dann auch schreiben als: x1∧x2∧x3∧x4⟹y
Horn-Klauseln können in Polynomialzeit auf erfüllbarkeit getestet werden!
Typen von Horn-Klauseln:
mensch(sokrates).
nichtChuckNorris(sokrates).
sterblich(X) :- mensch(X), nichtChuckNorris(X).
?- mensch(sokrates), sterblich(sokrates).
liebt(fritz,fische). %Atome: fritz und fische, Funktor/Prädikat: liebt
liebt(hans,inge).
liebt(inge,fritz).
liebt(julia,fritz).
liebt(anna,X) :- liebt(julia,X). % liebt(anna,X) wahr, wenn liebt(julia,X) wahr
QUERYSTART
liebt(Y,fritz)
QUERYEND
Regeln werden wie bei Haskell List-Comprehensions reerfüllt: Jede mögliche Kombination wird durchgespielt
Prolog mit swipl
father(peter,nick).
father(john,peter).
grandfather(X,Y) :- father(X,Z),father(Z,Y).
QUERYSTART
grandfather(G,nick)
QUERYEND
Mit swipl
formula(A,B,C,R) :- R is A+(A*B)-C-(C/A).
QUERYSTART
formula(1,2,3,R)
QUERYEND
Zusätzlich: <,<=,>=,>,=:=,=\=
fib(0,0).
fib(1,1).
fib(N,R) :- N>1,
C is N-1,
D is N-2,
fib(C,A),
fib(D,B),
R is A+B.
QUERYSTART
fib(8,R)
QUERYEND
[|]
als Cons-Operatormember(X,[X|R]).
member(X,[Y|R]) :- member(X,R).
append([],L,L).
append([X|R],L,[X|T]) :- append(R,L,T).
rev([],[]).
rev([X|R],Y) :- rev(R,Y1),append(Y1,[X],Y).
startsWith1([X|_]) :- X is 1.
QUERYSTART
startsWith1([Z,2,3])
QUERYEND
not(X)
: Negation von X
: Wie? -> Nächste Woche!atom(X)
: Ist X
mit Atom instanziiert?integer(X)
: Ist X
mit Ganzzahl instanziiert?float(X)
: Ist X
mit Gleitkommazahl instanziiert?atomic(X)
: Ist X
mit Atom oder Zahl instanziiert?father(samuel, john).
father(john,peter).
mother(laura, peter).
father(peter, nick).
father(luke, ann).
mother(sara,ann).
mother(ann, nick).
father(john, guy).
mother(laura, guy).
ancestor(X,X).
ancestor(X,Y) :- father(X,Z), ancestor(Z,Y).
ancestor(X,Y) :- mother(X,Z), ancestor(Z,Y).
containsAncestors(X,[Y|Z]):-ancestor(X,Y).
containsAncestors(X,[Y|Z]):-containsAncestors(X,Z).
sibling(X,Y): mother(Z,X), mother(Z,Y).
auntOrUncle(X,Y): mother(Z,Y), sibling(Z,X).
auntOrUncle(X,Y): father(Z,Y), sibling(Z,X).
QUERYSTART
ancestor(X, nick)
QUERYEND