| author | Andreas Lochbihler | 
| Fri, 27 Sep 2013 09:26:31 +0200 | |
| changeset 53946 | 5431e1392b14 | 
| 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: 
38791diff
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: 
38791diff
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: 
38791diff
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: 
38791diff
changeset | 22 | |
| 39466 
f3c5da707f30
adding values to show and ensure that values works with complex terms and restores numerals on natural numbers
 bulwahn parents: 
39463diff
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: 
39463diff
changeset | 24 | |
| 38116 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 25 | values 3 "{(x, y, z). append x y z}"
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 26 | |
| 38950 
62578950e748
storing options for prolog code generation in the theory
 bulwahn parents: 
38949diff
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: 
38791diff
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: 
38791diff
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: 
38791diff
changeset | 36 | |
| 38950 
62578950e748
storing options for prolog code generation in the theory
 bulwahn parents: 
38949diff
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: 
38791diff
changeset | 44 | |
| 38116 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 45 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 46 | section {* Example queens *}
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 47 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 48 | inductive nodiag :: "int => int => int list => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 49 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 50 | "nodiag B D []" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 52 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 53 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 54 | qdelete(A, [A|L], L). | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 57 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 58 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 59 | inductive qdelete :: "int => int list => int list => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 60 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 61 | "qdelete A (A # L) L" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 63 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 64 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 65 | qperm([], []). | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 70 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 71 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 72 | inductive qperm :: "int list => int list => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 73 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 74 | "qperm [] []" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 76 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 77 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 78 | safe([]). | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 82 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 83 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 84 | inductive safe :: "int list => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 85 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 86 | "safe []" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 87 | | "nodiag N 1 L ==> safe L ==> safe (N # L)" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 88 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 89 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 93 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 94 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 95 | inductive queen :: "int list => int list => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 96 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 97 | "qperm Data Out ==> safe Out ==> queen Data Out" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 98 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 99 | inductive queen_9 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 100 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 102 | |
| 38731 
2c8a595af43e
invocation of values for prolog execution does not require invocation of code_pred anymore
 bulwahn parents: 
38728diff
changeset | 103 | values 10 "{ys. queen_9 ys}"
 | 
| 38116 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 104 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 105 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 106 | section {* Example symbolic derivation *}
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 107 | |
| 40271 | 108 | hide_const Pow | 
| 38116 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 109 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
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: 
38080diff
changeset | 112 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 113 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 114 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
changeset | 144 | d(x, X, num(1)) :- | 
| 41457 | 145 | cut. | 
| 38116 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 146 | d(num(_), _, num(0)). | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 147 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 148 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 149 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 150 | inductive d :: "expr => expr => expr => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 151 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
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: 
38080diff
changeset | 160 | | "d x X (Num 1)" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 161 | | "d (Num n) X (Num 0)" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 162 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 163 | text {*
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 166 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 169 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 172 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 175 | *} | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 176 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 177 | inductive ops8 :: "expr => bool" | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 178 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 180 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 181 | inductive divide10 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 182 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 184 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 185 | inductive log10 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 186 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 188 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 189 | inductive times10 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 190 | where | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
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: 
38080diff
changeset | 192 | |
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 193 | values "{e. ops8 e}"
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 194 | values "{e. divide10 e}"
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 195 | values "{e. log10 e}"
 | 
| 
823b1e8bc090
adding queens and symbolic derivation example for prolog code generation
 bulwahn parents: 
38080diff
changeset | 196 | values "{e. times10 e}"
 | 
| 38075 | 197 | |
| 38727 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 198 | section {* Example negation *}
 | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 199 | |
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 200 | datatype abc = A | B | C | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 201 | |
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 202 | inductive notB :: "abc => bool" | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 203 | where | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 204 | "y \<noteq> B \<Longrightarrow> notB y" | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
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: 
38117diff
changeset | 213 | |
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 214 | values 2 "{y. notB y}"
 | 
| 
c7f5f0b7dc7f
adding very basic transformation to ensure groundness before negations
 bulwahn parents: 
38117diff
changeset | 215 | |
| 38728 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 bulwahn parents: 
38727diff
changeset | 216 | inductive notAB :: "abc * abc \<Rightarrow> bool" | 
| 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 bulwahn parents: 
38727diff
changeset | 217 | where | 
| 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 bulwahn parents: 
38727diff
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: 
38727diff
changeset | 219 | |
| 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 bulwahn parents: 
38727diff
changeset | 220 | values 5 "{y. notAB y}"
 | 
| 
182b180e9804
improving ensure_groundness in prolog generation; added further example
 bulwahn parents: 
38727diff
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 |