author | bulwahn |
Fri, 27 Aug 2010 09:34:06 +0200 | |
changeset 38792 | 970508a5119f |
parent 38791 | 4a4be1be0fae |
child 38949 | 1afa9e89c885 |
permissions | -rw-r--r-- |
38074
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
1 |
theory Code_Prolog_Examples |
38117 | 2 |
imports Code_Prolog |
38074
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
3 |
begin |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
4 |
|
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
5 |
section {* Example append *} |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
6 |
|
38792
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
7 |
|
38074
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
8 |
inductive append |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
9 |
where |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
10 |
"append [] ys ys" |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
11 |
| "append xs ys zs ==> append (x # xs) ys (x # zs)" |
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
12 |
|
38792
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
13 |
ML {* Code_Prolog.options := { ensure_groundness = false, limited_types = [], prolog_system = Code_Prolog.SWI_PROLOG} *} |
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
14 |
|
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
15 |
values "{(x, y, z). append x y z}" |
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
16 |
|
38116
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
17 |
values 3 "{(x, y, z). append x y z}" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
18 |
|
38792
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
19 |
ML {* Code_Prolog.options := { ensure_groundness = false, limited_types = [], prolog_system = Code_Prolog.YAP} *} |
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
20 |
|
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
21 |
values "{(x, y, z). append x y z}" |
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
22 |
|
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
23 |
ML {* Code_Prolog.options := { ensure_groundness = false, limited_types = [], prolog_system = Code_Prolog.SWI_PROLOG} *} |
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
24 |
|
38116
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
25 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
26 |
section {* Example queens *} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
27 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
28 |
inductive nodiag :: "int => int => int list => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
29 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
30 |
"nodiag B D []" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
31 |
| "D \<noteq> N - B ==> D \<noteq> B - N ==> Da = D + 1 ==> nodiag B Da L ==> nodiag B D (N # L)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
32 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
33 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
34 |
qdelete(A, [A|L], L). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
35 |
qdelete(X, [A|Z], [A|R]) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
36 |
qdelete(X, Z, R). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
37 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
38 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
39 |
inductive qdelete :: "int => int list => int list => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
40 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
41 |
"qdelete A (A # L) L" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
42 |
| "qdelete X Z R ==> qdelete X (A # Z) (A # R)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
43 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
44 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
45 |
qperm([], []). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
46 |
qperm([X|Y], K) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
47 |
qdelete(U, [X|Y], Z), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
48 |
K = [U|V], |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
49 |
qperm(Z, V). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
50 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
51 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
52 |
inductive qperm :: "int list => int list => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
53 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
54 |
"qperm [] []" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
55 |
| "qdelete U (X # Y) Z ==> qperm Z V ==> qperm (X # Y) (U # V)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
56 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
57 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
58 |
safe([]). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
59 |
safe([N|L]) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
60 |
nodiag(N, 1, L), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
61 |
safe(L). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
62 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
63 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
64 |
inductive safe :: "int list => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
65 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
66 |
"safe []" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
67 |
| "nodiag N 1 L ==> safe L ==> safe (N # L)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
68 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
69 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
70 |
queen(Data, Out) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
71 |
qperm(Data, Out), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
72 |
safe(Out) |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
73 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
74 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
75 |
inductive queen :: "int list => int list => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
76 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
77 |
"qperm Data Out ==> safe Out ==> queen Data Out" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
78 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
79 |
inductive queen_9 |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
80 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
81 |
"queen [1,2,3,4,5,6,7,8,9] ys ==> queen_9 ys" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
82 |
|
38731
2c8a595af43e
invocation of values for prolog execution does not require invocation of code_pred anymore
bulwahn
parents:
38728
diff
changeset
|
83 |
values 10 "{ys. queen_9 ys}" |
38116
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
84 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
85 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
86 |
section {* Example symbolic derivation *} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
87 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
88 |
hide_const Plus Pow |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
89 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
90 |
datatype expr = Log expr | Mult expr expr | Div expr expr | x | Num int | Plus expr expr |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
91 |
| Minus expr expr | Uminus expr | Pow expr int | Exp expr |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
92 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
93 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
94 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
95 |
d(U + V, X, DU + DV) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
96 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
97 |
d(U, X, DU), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
98 |
d(V, X, DV). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
99 |
d(U - V, X, DU - DV) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
100 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
101 |
d(U, X, DU), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
102 |
d(V, X, DV). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
103 |
d(U * V, X, DU * V + U * DV) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
104 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
105 |
d(U, X, DU), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
106 |
d(V, X, DV). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
107 |
d(U / V, X, (DU * V - U * DV) / ^(V, 2)) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
108 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
109 |
d(U, X, DU), |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
110 |
d(V, X, DV). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
111 |
d(^(U, N), X, DU * num(N) * ^(U, N1)) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
112 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
113 |
N1 is N - 1, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
114 |
d(U, X, DU). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
115 |
d(-U, X, -DU) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
116 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
117 |
d(U, X, DU). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
118 |
d(exp(U), X, exp(U) * DU) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
119 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
120 |
d(U, X, DU). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
121 |
d(log(U), X, DU / U) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
122 |
cut, |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
123 |
d(U, X, DU). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
124 |
d(x, X, num(1)) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
125 |
cut. |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
126 |
d(num(_), _, num(0)). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
127 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
128 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
129 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
130 |
inductive d :: "expr => expr => expr => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
131 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
132 |
"d U X DU ==> d V X DV ==> d (Plus U V) X (Plus DU DV)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
133 |
| "d U X DU ==> d V X DV ==> d (Minus U V) X (Minus DU DV)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
134 |
| "d U X DU ==> d V X DV ==> d (Mult U V) X (Plus (Mult DU V) (Mult U DV))" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
135 |
| "d U X DU ==> d V X DV ==> d (Div U V) X (Div (Minus (Mult DU V) (Mult U DV)) (Pow V 2))" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
136 |
| "d U X DU ==> N1 = N - 1 ==> d (Pow U N) X (Mult DU (Mult (Num N) (Pow U N1)))" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
137 |
| "d U X DU ==> d (Uminus U) X (Uminus DU)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
138 |
| "d U X DU ==> d (Exp U) X (Mult (Exp U) DU)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
139 |
| "d U X DU ==> d (Log U) X (Div DU U)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
140 |
| "d x X (Num 1)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
141 |
| "d (Num n) X (Num 0)" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
142 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
143 |
text {* |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
144 |
ops8(E) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
145 |
d((x + num(1)) * ((^(x, 2) + num(2)) * (^(x, 3) + num(3))), x, E). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
146 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
147 |
divide10(E) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
148 |
d(((((((((x / x) / x) / x) / x) / x) / x) / x) / x) / x, x, E). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
149 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
150 |
log10(E) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
151 |
d(log(log(log(log(log(log(log(log(log(log(x)))))))))), x, E). |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
152 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
153 |
times10(E) :- |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
154 |
d(((((((((x * x) * x) * x) * x) * x) * x) * x) * x) * x, x, E) |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
155 |
*} |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
156 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
157 |
inductive ops8 :: "expr => bool" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
158 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
159 |
"d (Mult (Plus x (Num 1)) (Mult (Plus (Pow x 2) (Num 2)) (Plus (Pow x 3) (Num 3)))) x e ==> ops8 e" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
160 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
161 |
inductive divide10 |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
162 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
163 |
"d (Div (Div (Div (Div (Div (Div (Div (Div (Div x x) x) x) x) x) x) x) x) x) x e ==> divide10 e" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
164 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
165 |
inductive log10 |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
166 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
167 |
"d (Log (Log (Log (Log (Log (Log (Log (Log (Log (Log x)))))))))) x e ==> log10 e" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
168 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
169 |
inductive times10 |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
170 |
where |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
171 |
"d (Mult (Mult (Mult (Mult (Mult (Mult (Mult (Mult (Mult x x) x) x) x) x) x) x) x) x) x e ==> times10 e" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
172 |
|
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
173 |
values "{e. ops8 e}" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
174 |
values "{e. divide10 e}" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
175 |
values "{e. log10 e}" |
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
bulwahn
parents:
38080
diff
changeset
|
176 |
values "{e. times10 e}" |
38075 | 177 |
|
38727
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
178 |
section {* Example negation *} |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
179 |
|
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
180 |
datatype abc = A | B | C |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
181 |
|
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
182 |
inductive notB :: "abc => bool" |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
183 |
where |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
184 |
"y \<noteq> B \<Longrightarrow> notB y" |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
185 |
|
38792
970508a5119f
added support for yet another prolog system (yap); generate has only one option ensure_groundness; added one example of yap invocation in example theory
bulwahn
parents:
38791
diff
changeset
|
186 |
ML {* Code_Prolog.options := {ensure_groundness = true, limited_types = [], prolog_system = Code_Prolog.SWI_PROLOG} *} |
38727
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
187 |
|
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
188 |
values 2 "{y. notB y}" |
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
bulwahn
parents:
38117
diff
changeset
|
189 |
|
38728
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
190 |
inductive notAB :: "abc * abc \<Rightarrow> bool" |
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
191 |
where |
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
192 |
"y \<noteq> A \<Longrightarrow> z \<noteq> B \<Longrightarrow> notAB (y, z)" |
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
193 |
|
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
194 |
values 5 "{y. notAB y}" |
182b180e9804
improving ensure_groundness in prolog generation; added further example
bulwahn
parents:
38727
diff
changeset
|
195 |
|
38735 | 196 |
section {* Example prolog conform variable names *} |
197 |
||
198 |
inductive equals :: "abc => abc => bool" |
|
199 |
where |
|
200 |
"equals y' y'" |
|
38791 | 201 |
|
38735 | 202 |
values 1 "{(y, z). equals y z}" |
203 |
||
38074
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff
changeset
|
204 |
end |