inductive nodiag :: "int => int => int list => bool" where "nodiag B D []"
| "D ≠ N - B ==> D ≠ B - N ==> Da = D + 1 ==> nodiag B Da L ==> nodiag B D (N # L)"
inductive queen :: "int list => int list => bool" where "qperm Data Out ==> safe Out ==> queen Data Out"
inductive queen_9 where "queen [1,2,3,4,5,6,7,8,9] ys ==> queen_9 ys"
values_prolog 10"{ys. queen_9 ys}"
section‹Example symbolic derivation›
hide_const Pow
datatype expr = Log expr | Mult expr expr | Div expr expr | x | Num int | Plus expr expr
| Minus expr expr | Uminus expr | Pow expr int | Exp expr
text‹
(U + V, X, DU + DV) :-
cut,
d(U, X, DU),
d(V, X, DV).
(U - V, X, DU - DV) :-
cut,
d(U, X, DU),
d(V, X, DV).
(U * V, X, DU * V + U * DV) :-
cut,
d(U, X, DU),
d(V, X, DV).
(U / V, X, (DU * V - U * DV) / ^(V, 2)) :-
cut,
d(U, X, DU),
d(V, X, DV).
(^(U, N), X, DU * num(N) * ^(U, N1)) :-
cut,
N1 is N - 1,
d(U, X, DU).
(-U, X, -DU) :-
cut,
d(U, X, DU).
(exp(U), X, exp(U) * DU) :-
cut,
d(U, X, DU).
(log(U), X, DU / U) :-
cut,
d(U, X, DU).
(x, X, num(1)) :-
cut.
(num(_), _, num(0)).
›
inductive d :: "expr => expr => expr => bool" where "d U X DU ==> d V X DV ==> d (Plus U V) X (Plus DU DV)"
| "d U X DU ==> d V X DV ==> d (Minus U V) X (Minus DU DV)"
| "d U X DU ==> d V X DV ==> d (Mult U V) X (Plus (Mult DU V) (Mult U DV))"
| "d U X DU ==> d V X DV ==> d (Div U V) X (Div (Minus (Mult DU V) (Mult U DV)) (Pow V 2))"
| "d U X DU ==> N1 = N - 1 ==> d (Pow U N) X (Mult DU (Mult (Num N) (Pow U N1)))"
| "d U X DU ==> d (Uminus U) X (Uminus DU)"
| "d U X DU ==> d (Exp U) X (Mult (Exp U) DU)"
| "d U X DU ==> d (Log U) X (Div DU U)"
| "d x X (Num 1)"
| "d (Num n) X (Num 0)"
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.