| author | bulwahn | 
| Fri, 02 Mar 2012 09:35:33 +0100 | |
| changeset 46757 | ad878aff9c15 | 
| parent 41956 | c15ef1b85035 | 
| child 55447 | aa41ecbdc205 | 
| 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  | 
| 41956 | 2  | 
imports "~~/src/HOL/Library/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  | 
|
| 38963 | 13  | 
setup {* Code_Prolog.map_code_options (K
 | 
14  | 
  {ensure_groundness = false,
 | 
|
| 39800 | 15  | 
limit_globally = NONE,  | 
| 38963 | 16  | 
limited_types = [],  | 
17  | 
limited_predicates = [],  | 
|
18  | 
replacing = [],  | 
|
| 39463 | 19  | 
manual_reorder = []}) *}  | 
| 
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
 | 
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  | 
|
| 
39466
 
f3c5da707f30
adding values to show and ensure that values works with complex terms and restores numerals on natural numbers
 
bulwahn 
parents: 
39463 
diff
changeset
 | 
23  | 
values 4 "{(z, x, y). append x y ((1::nat) # (2 # (3 # z)))}"
 | 
| 
 
f3c5da707f30
adding values to show and ensure that values works with complex terms and restores numerals on natural numbers
 
bulwahn 
parents: 
39463 
diff
changeset
 | 
24  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
25  | 
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
 | 
26  | 
|
| 
38950
 
62578950e748
storing options for prolog code generation in the theory
 
bulwahn 
parents: 
38949 
diff
changeset
 | 
27  | 
setup {* Code_Prolog.map_code_options (K
 | 
| 38949 | 28  | 
  {ensure_groundness = false,
 | 
| 39800 | 29  | 
limit_globally = NONE,  | 
| 38963 | 30  | 
limited_types = [],  | 
31  | 
limited_predicates = [],  | 
|
32  | 
replacing = [],  | 
|
| 39463 | 33  | 
manual_reorder = []}) *}  | 
| 
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
 | 
34  | 
|
| 
 
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
 | 
35  | 
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
 | 
36  | 
|
| 
38950
 
62578950e748
storing options for prolog code generation in the theory
 
bulwahn 
parents: 
38949 
diff
changeset
 | 
37  | 
setup {* Code_Prolog.map_code_options (K
 | 
| 38949 | 38  | 
  {ensure_groundness = false,
 | 
| 39800 | 39  | 
limit_globally = NONE,  | 
| 38963 | 40  | 
limited_types = [],  | 
41  | 
limited_predicates = [],  | 
|
42  | 
replacing = [],  | 
|
| 39463 | 43  | 
manual_reorder = []}) *}  | 
| 
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
 | 
44  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
45  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
46  | 
section {* Example queens *}
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
47  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
48  | 
inductive nodiag :: "int => int => int list => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
49  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
50  | 
"nodiag B D []"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
51  | 
| "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
 | 
52  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
53  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
54  | 
qdelete(A, [A|L], L).  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
55  | 
qdelete(X, [A|Z], [A|R]) :-  | 
| 41457 | 56  | 
qdelete(X, Z, R).  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
57  | 
*}  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
58  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
59  | 
inductive qdelete :: "int => int list => int list => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
60  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
61  | 
"qdelete A (A # L) L"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
62  | 
| "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
 | 
63  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
64  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
65  | 
qperm([], []).  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
66  | 
qperm([X|Y], K) :-  | 
| 41457 | 67  | 
qdelete(U, [X|Y], Z),  | 
68  | 
K = [U|V],  | 
|
69  | 
qperm(Z, V).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
70  | 
*}  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
71  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
72  | 
inductive qperm :: "int list => int list => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
73  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
74  | 
"qperm [] []"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
75  | 
| "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
 | 
76  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
77  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
78  | 
safe([]).  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
79  | 
safe([N|L]) :-  | 
| 41457 | 80  | 
nodiag(N, 1, L),  | 
81  | 
safe(L).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
82  | 
*}  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
83  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
84  | 
inductive safe :: "int list => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
85  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
86  | 
"safe []"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
87  | 
| "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
 | 
88  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
89  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
90  | 
queen(Data, Out) :-  | 
| 41457 | 91  | 
qperm(Data, Out),  | 
92  | 
safe(Out)  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
93  | 
*}  | 
| 
 
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  | 
inductive queen :: "int list => int list => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
96  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
97  | 
"qperm Data Out ==> safe Out ==> queen Data Out"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
98  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
99  | 
inductive queen_9  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
100  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
101  | 
"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
 | 
102  | 
|
| 
38731
 
2c8a595af43e
invocation of values for prolog execution does not require invocation of code_pred anymore
 
bulwahn 
parents: 
38728 
diff
changeset
 | 
103  | 
values 10 "{ys. queen_9 ys}"
 | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
104  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
105  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
106  | 
section {* Example symbolic derivation *}
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
107  | 
|
| 40271 | 108  | 
hide_const Pow  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
109  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
110  | 
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
 | 
111  | 
| 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
 | 
112  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
113  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
114  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
115  | 
d(U + V, X, DU + DV) :-  | 
| 41457 | 116  | 
cut,  | 
117  | 
d(U, X, DU),  | 
|
118  | 
d(V, X, DV).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
119  | 
d(U - V, X, DU - DV) :-  | 
| 41457 | 120  | 
cut,  | 
121  | 
d(U, X, DU),  | 
|
122  | 
d(V, X, DV).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
123  | 
d(U * V, X, DU * V + U * DV) :-  | 
| 41457 | 124  | 
cut,  | 
125  | 
d(U, X, DU),  | 
|
126  | 
d(V, X, DV).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
127  | 
d(U / V, X, (DU * V - U * DV) / ^(V, 2)) :-  | 
| 41457 | 128  | 
cut,  | 
129  | 
d(U, X, DU),  | 
|
130  | 
d(V, X, DV).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
131  | 
d(^(U, N), X, DU * num(N) * ^(U, N1)) :-  | 
| 41457 | 132  | 
cut,  | 
133  | 
N1 is N - 1,  | 
|
134  | 
d(U, X, DU).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
135  | 
d(-U, X, -DU) :-  | 
| 41457 | 136  | 
cut,  | 
137  | 
d(U, X, DU).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
138  | 
d(exp(U), X, exp(U) * DU) :-  | 
| 41457 | 139  | 
cut,  | 
140  | 
d(U, X, DU).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
141  | 
d(log(U), X, DU / U) :-  | 
| 41457 | 142  | 
cut,  | 
143  | 
d(U, X, DU).  | 
|
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
144  | 
d(x, X, num(1)) :-  | 
| 41457 | 145  | 
cut.  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
146  | 
d(num(_), _, num(0)).  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
147  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
148  | 
*}  | 
| 
 
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  | 
inductive d :: "expr => expr => expr => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
151  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
152  | 
"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
 | 
153  | 
| "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
 | 
154  | 
| "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
 | 
155  | 
| "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
 | 
156  | 
| "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
 | 
157  | 
| "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
 | 
158  | 
| "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
 | 
159  | 
| "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
 | 
160  | 
| "d x X (Num 1)"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
161  | 
| "d (Num n) X (Num 0)"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
162  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
163  | 
text {*
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
164  | 
ops8(E) :-  | 
| 41457 | 165  | 
d((x + num(1)) * ((^(x, 2) + num(2)) * (^(x, 3) + num(3))), x, E).  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
166  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
167  | 
divide10(E) :-  | 
| 41457 | 168  | 
d(((((((((x / x) / x) / x) / x) / x) / x) / x) / x) / x, x, E).  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
169  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
170  | 
log10(E) :-  | 
| 41457 | 171  | 
d(log(log(log(log(log(log(log(log(log(log(x)))))))))), x, E).  | 
| 
38116
 
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  | 
times10(E) :-  | 
| 41457 | 174  | 
d(((((((((x * x) * x) * x) * x) * x) * x) * x) * x) * x, x, E)  | 
| 
38116
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
175  | 
*}  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
176  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
177  | 
inductive ops8 :: "expr => bool"  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
178  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
179  | 
"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
 | 
180  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
181  | 
inductive divide10  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
182  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
183  | 
"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
 | 
184  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
185  | 
inductive log10  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
186  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
187  | 
"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
 | 
188  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
189  | 
inductive times10  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
190  | 
where  | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
191  | 
"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
 | 
192  | 
|
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
193  | 
values "{e. ops8 e}"
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
194  | 
values "{e. divide10 e}"
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
195  | 
values "{e. log10 e}"
 | 
| 
 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 
bulwahn 
parents: 
38080 
diff
changeset
 | 
196  | 
values "{e. times10 e}"
 | 
| 38075 | 197  | 
|
| 
38727
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
198  | 
section {* Example negation *}
 | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
199  | 
|
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
200  | 
datatype abc = A | B | C  | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
201  | 
|
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
202  | 
inductive notB :: "abc => bool"  | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
203  | 
where  | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
204  | 
"y \<noteq> B \<Longrightarrow> notB y"  | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
205  | 
|
| 38963 | 206  | 
setup {* Code_Prolog.map_code_options (K
 | 
207  | 
  {ensure_groundness = true,
 | 
|
| 39800 | 208  | 
limit_globally = NONE,  | 
| 38963 | 209  | 
limited_types = [],  | 
210  | 
limited_predicates = [],  | 
|
211  | 
replacing = [],  | 
|
| 39463 | 212  | 
manual_reorder = []}) *}  | 
| 
38727
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
213  | 
|
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
214  | 
values 2 "{y. notB y}"
 | 
| 
 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 
bulwahn 
parents: 
38117 
diff
changeset
 | 
215  | 
|
| 
38728
 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 
bulwahn 
parents: 
38727 
diff
changeset
 | 
216  | 
inductive notAB :: "abc * abc \<Rightarrow> bool"  | 
| 
 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 
bulwahn 
parents: 
38727 
diff
changeset
 | 
217  | 
where  | 
| 
 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 
bulwahn 
parents: 
38727 
diff
changeset
 | 
218  | 
"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
 | 
219  | 
|
| 
 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 
bulwahn 
parents: 
38727 
diff
changeset
 | 
220  | 
values 5 "{y. notAB y}"
 | 
| 
 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 
bulwahn 
parents: 
38727 
diff
changeset
 | 
221  | 
|
| 38735 | 222  | 
section {* Example prolog conform variable names *}
 | 
223  | 
||
224  | 
inductive equals :: "abc => abc => bool"  | 
|
225  | 
where  | 
|
226  | 
"equals y' y'"  | 
|
| 38791 | 227  | 
|
| 38735 | 228  | 
values 1 "{(y, z). equals y z}"
 | 
229  | 
||
| 
38074
 
31174744b9a2
adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
 
bulwahn 
parents:  
diff
changeset
 | 
230  | 
end  |