src/HOL/Predicate_Compile_Examples/Code_Prolog_Examples.thy
author bulwahn
Sun, 01 Aug 2010 10:15:43 +0200
changeset 38116 823b1e8bc090
parent 38080 8c20eb9a388d
child 38117 5ae05823cfd9
permissions -rw-r--r--
adding queens and symbolic derivation example for prolog code generation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     2
imports Predicate_Compile_Alternative_Defs
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     3
uses "~~/src/HOL/Tools/Predicate_Compile/code_prolog.ML"
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     4
begin
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     5
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     6
section {* Example append *}
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
     7
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
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
    13
code_pred append .
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
    14
38116
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    15
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
    16
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    17
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    18
section {* Example queens *}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    19
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    20
inductive nodiag :: "int => int => int list => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    21
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    22
  "nodiag B D []"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    23
| "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
    24
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    25
text {*
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    26
qdelete(A, [A|L], L).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    27
qdelete(X, [A|Z], [A|R]) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    28
	qdelete(X, Z, R).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    29
*}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    30
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    31
inductive qdelete :: "int => int list => int list => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    32
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    33
  "qdelete A (A # L) L"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    34
| "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
    35
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    36
text {*
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    37
qperm([], []).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    38
qperm([X|Y], K) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    39
	qdelete(U, [X|Y], Z),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    40
	K = [U|V],
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    41
	qperm(Z, V).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    42
*}
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
inductive qperm :: "int list => int list => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    45
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    46
  "qperm [] []"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    47
| "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
    48
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    49
text {*
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    50
safe([]).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    51
safe([N|L]) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    52
	nodiag(N, 1, L),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    53
	safe(L).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    54
*}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    55
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    56
inductive safe :: "int list => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    57
where
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
| "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
    60
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    61
text {*
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    62
queen(Data, Out) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    63
	qperm(Data, Out),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    64
	safe(Out)
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    65
*}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    66
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    67
inductive queen :: "int list => int list => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    68
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    69
  "qperm Data Out ==> safe Out ==> queen Data Out"
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
inductive queen_9
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    72
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    73
  "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
    74
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    75
code_pred queen_9 .
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
values 150 "{ys. queen_9 ys}"
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
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    80
section {* Example symbolic derivation *}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    81
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    82
hide_const Plus Pow
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
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
    85
  | 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
    86
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    87
text {*
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
d(U + V, X, DU + DV) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    90
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    91
	d(U, X, DU),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    92
	d(V, X, DV).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    93
d(U - V, X, DU - DV) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    94
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    95
	d(U, X, DU),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    96
	d(V, X, DV).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    97
d(U * V, X, DU * V + U * DV) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    98
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
    99
	d(U, X, DU),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   100
	d(V, X, DV).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   101
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
   102
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   103
	d(U, X, DU),
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   104
	d(V, X, DV).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   105
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
   106
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   107
	N1 is N - 1,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   108
	d(U, X, DU).
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
	cut,
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   111
	d(U, X, DU).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   112
d(exp(U), X, exp(U) * DU) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   113
	cut,
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(log(U), X, DU / U) :-
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(x, X, num(1)) :-
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(num(_), _, num(0)).
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   121
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   122
*}
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   123
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   124
inductive d :: "expr => expr => expr => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   125
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   126
  "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
   127
| "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
   128
| "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
   129
| "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
   130
| "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
   131
| "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
   132
| "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
   133
| "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
   134
| "d x X (Num 1)"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   135
| "d (Num n) X (Num 0)"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   136
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   137
text {*
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   138
ops8(E) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   139
	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
   140
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   141
divide10(E) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   142
	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
   143
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   144
log10(E) :-
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   145
	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
   146
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   147
times10(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
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   151
inductive ops8 :: "expr => bool"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   152
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   153
  "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
   154
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   155
inductive divide10
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   156
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   157
  "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
   158
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   159
inductive log10
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   160
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   161
 "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
   162
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   163
inductive times10
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   164
where
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   165
  "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
   166
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   167
code_pred ops8 .
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   168
code_pred divide10 .
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   169
code_pred log10 .
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   170
code_pred times10 .
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   171
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   172
values "{e. ops8 e}"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   173
values "{e. divide10 e}"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   174
values "{e. log10 e}"
823b1e8bc090 adding queens and symbolic derivation example for prolog code generation
bulwahn
parents: 38080
diff changeset
   175
values "{e. times10 e}"
38075
3d5e2b7d1374 adding values command and parsing prolog output
bulwahn
parents: 38074
diff changeset
   176
38074
31174744b9a2 adding example file for prolog code generation; adding prolog code generation example to IsaMakefile
bulwahn
parents:
diff changeset
   177
end