wneuper@59232
|
1 |
(* Title: tests for ListC
|
wneuper@59232
|
2 |
Author: Walther Neuper 17.6.00
|
wneuper@59232
|
3 |
(c) copyright due to lincense terms.
|
neuper@37906
|
4 |
*)
|
wneuper@59232
|
5 |
"-----------------------------------------------------------------------------";
|
wneuper@59232
|
6 |
"-----------------------------------------------------------------------------";
|
wneuper@59232
|
7 |
"table of contents -----------------------------------------------------------";
|
wneuper@59232
|
8 |
"-----------------------------------------------------------------------------";
|
wneuper@59232
|
9 |
"----------- inssort in SML --------------------------------------------------";
|
wneuper@59232
|
10 |
"----------- insertion sort by rewrite stepwise ------------------------------";
|
wneuper@59232
|
11 |
"----------- insertion sort with ruleset -------------------------------------";
|
wneuper@59241
|
12 |
"----------- insertion sort with MathEngine ----------------------------------";
|
wneuper@59243
|
13 |
"----------- insertion sort: CAS-command -------------------------------------";
|
wneuper@59245
|
14 |
"----------- insertion sort: met_Prog_sort_ins_steps -------------------------";
|
wneuper@59232
|
15 |
"-----------------------------------------------------------------------------";
|
wneuper@59232
|
16 |
"-----------------------------------------------------------------------------";
|
neuper@38063
|
17 |
|
neuper@38063
|
18 |
|
wneuper@59232
|
19 |
"----------- inssort in SML --------------------------------------------------";
|
wneuper@59232
|
20 |
"----------- inssort in SML --------------------------------------------------";
|
wneuper@59232
|
21 |
"----------- inssort in SML --------------------------------------------------";
|
neuper@38063
|
22 |
fun foldr _ [] a = a
|
neuper@38063
|
23 |
| foldr f (x :: xs) a = foldr f xs (f a x);
|
neuper@38063
|
24 |
(*val foldr = fn : ('a -> 'b -> 'a) -> 'b list -> 'a -> 'a*)
|
neuper@38063
|
25 |
fun ins [] a = [a]
|
neuper@38063
|
26 |
| ins (x :: xs) a = if x < a then x :: (ins xs a) else a :: (x :: xs);
|
neuper@38063
|
27 |
(*val ins = fn : int list -> int -> int list*)
|
neuper@38063
|
28 |
fun sort xs = foldr ins xs [];
|
neuper@38063
|
29 |
(*val sort = fn : int list -> int list*)
|
neuper@38063
|
30 |
|
wneuper@59232
|
31 |
"----------- insertion sort by rewrite stepwise ------------------------------";
|
wneuper@59232
|
32 |
"----------- insertion sort by rewrite stepwise ------------------------------";
|
wneuper@59232
|
33 |
"----------- insertion sort by rewrite stepwise ------------------------------";
|
wneuper@59232
|
34 |
val ctxt = Proof_Context.init_global @{theory};
|
wneuper@59244
|
35 |
val SOME t = parseNEW ctxt "sort {|| 1, 3, 2 ||}";
|
wneuper@59232
|
36 |
|
wneuper@59233
|
37 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm sort_deff} t;
|
wneuper@59244
|
38 |
term2str t' = "xfoldr ins {|| 1, 3, 2 ||} {|| ||}";
|
wneuper@59232
|
39 |
|
wneuper@59234
|
40 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm xfoldr_Cons} t';
|
wneuper@59244
|
41 |
term2str t' = "(ins 1 o xfoldr ins {|| 3, 2 ||}) {|| ||}";
|
wneuper@59232
|
42 |
|
wneuper@59234
|
43 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm xfoldr_Cons} t';
|
wneuper@59244
|
44 |
term2str t' = "(ins 1 o (ins 3 o xfoldr ins {|| 2 ||})) {|| ||}";
|
wneuper@59232
|
45 |
|
wneuper@59234
|
46 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm xfoldr_Cons} t';
|
wneuper@59244
|
47 |
term2str t' = "(ins 1 o (ins 3 o (ins 2 o xfoldr ins {|| ||}))) {|| ||}";
|
wneuper@59232
|
48 |
|
wneuper@59234
|
49 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm xfoldr_Nil} t';
|
wneuper@59244
|
50 |
term2str t' = "(ins 1 o (ins 3 o (ins 2 o id))) {|| ||}";
|
wneuper@59232
|
51 |
|
wneuper@59232
|
52 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm o_id} t';
|
wneuper@59244
|
53 |
term2str t' = "(ins 1 o (ins 3 o ins 2)) {|| ||}";
|
wneuper@59232
|
54 |
|
wneuper@59232
|
55 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm o_assoc} t';
|
wneuper@59244
|
56 |
term2str t' = "(ins 1 o ins 3 o ins 2) {|| ||}";
|
wneuper@59232
|
57 |
|
wneuper@59232
|
58 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm o_apply} t';
|
wneuper@59244
|
59 |
term2str t' = "(ins 1 o ins 3) (ins 2 {|| ||})";
|
wneuper@59232
|
60 |
|
wneuper@59232
|
61 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm o_apply} t';
|
wneuper@59244
|
62 |
term2str t' = "ins 1 (ins 3 (ins 2 {|| ||}))";
|
wneuper@59232
|
63 |
|
wneuper@59232
|
64 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm ins_Nil} t';
|
wneuper@59244
|
65 |
term2str t' = "ins 1 (ins 3 {|| 2 ||})";
|
wneuper@59232
|
66 |
|
wneuper@59232
|
67 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm ins_Cons} t';
|
wneuper@59244
|
68 |
term2str t' = "ins 1 (if 3 < 2 then {|| 3, 2 ||} else 2 @# ins 3 {|| ||})";
|
wneuper@59232
|
69 |
|
wneuper@59232
|
70 |
val SOME (t', _) = calculate_ @{theory} ("Orderings.ord_class.less", eval_equ "#less_") t';
|
wneuper@59244
|
71 |
term2str t' = "ins 1 (if False then {|| 3, 2 ||} else 2 @# ins 3 {|| ||})";
|
wneuper@59232
|
72 |
|
wneuper@59232
|
73 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm if_False} t';
|
wneuper@59244
|
74 |
term2str t' = "ins 1 (2 @# ins 3 {|| ||})";
|
wneuper@59232
|
75 |
|
wneuper@59232
|
76 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm ins_Nil} t';
|
wneuper@59244
|
77 |
term2str t' = "ins 1 {|| 2, 3 ||}";
|
wneuper@59232
|
78 |
|
wneuper@59232
|
79 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm ins_Cons} t';
|
wneuper@59244
|
80 |
term2str t' = "if 1 < 2 then {|| 1, 2, 3 ||} else 2 @# ins 1 {|| 3 ||}";
|
wneuper@59232
|
81 |
|
wneuper@59232
|
82 |
val SOME (t', _) = calculate_ @{theory} ("Orderings.ord_class.less", eval_equ "#less_") t';
|
wneuper@59244
|
83 |
term2str t' = "if True then {|| 1, 2, 3 ||} else 2 @# ins 1 {|| 3 ||}";
|
wneuper@59232
|
84 |
|
wneuper@59232
|
85 |
val SOME (t', _) = rewrite_ @{theory} tless_true eval_rls false @{thm if_True} t';
|
wneuper@59244
|
86 |
if term2str t' = "{|| 1, 2, 3 ||}" then () else error "CHANGED RESULT FOR sort by rewrite stepwise";
|
wneuper@59232
|
87 |
|
wneuper@59232
|
88 |
"----------- insertion sort with ruleset -------------------------------------";
|
wneuper@59232
|
89 |
"----------- insertion sort with ruleset -------------------------------------";
|
wneuper@59232
|
90 |
"----------- insertion sort with ruleset -------------------------------------";
|
wneuper@59244
|
91 |
if term2str t = "InsSort.sort {|| 1, 3, 2 ||}" then () else error "CHANGED START FOR sort with ruleset";
|
wneuper@59232
|
92 |
val SOME (t', _) = rewrite_set_ @{theory} false ins_sort t;
|
wneuper@59244
|
93 |
if term2str t' = "{|| 1, 2, 3 ||}" then () else error "CHANGED RESULT FOR sort with ruleset";
|
wneuper@59232
|
94 |
|
wneuper@59241
|
95 |
"----------- insertion sort with MathEngine ----------------------------------";
|
wneuper@59241
|
96 |
"----------- insertion sort with MathEngine ----------------------------------";
|
wneuper@59241
|
97 |
"----------- insertion sort with MathEngine ----------------------------------";
|
wneuper@59244
|
98 |
val fmz = ["unsorted {||1, 3, 2||}", "sorted s_s"];
|
wneuper@59246
|
99 |
val (dI',pI',mI') = ("InsSort", ["insertion","SORT","Programming"],
|
wneuper@59246
|
100 |
["Programming","SORT","insertion"]);
|
neuper@37906
|
101 |
val p = e_pos'; val c = [];
|
wneuper@59241
|
102 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))]; (*nxt = ("Model_Problem",..*)
|
wneuper@59241
|
103 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
104 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
105 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
106 |
val (p,_,f,nxt,_,pt) = me nxt p c pt; (*nxt = ("Specify_Problem",..*)
|
wneuper@59241
|
107 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (* (@1) nxt'''' = ("Specify_Method",..*)
|
wneuper@59241
|
108 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
109 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
110 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59241
|
111 |
val (p,_,f,nxt,_,pt) = me nxt p c pt;
|
wneuper@59253
|
112 |
if f2str f = "{|| 1, 2, 3 ||}"
|
wneuper@59253
|
113 |
then case nxt of ("End_Proof'", End_Proof') => ()
|
wneuper@59253
|
114 |
| _ => error "--- insertion sort with MathEngine CHANGED 1"
|
wneuper@59253
|
115 |
else error "--- insertion sort with MathEngine CHANGED 2";
|
wneuper@59243
|
116 |
|
wneuper@59243
|
117 |
"----------- insertion sort: CAS-command -------------------------------------";
|
wneuper@59243
|
118 |
"----------- insertion sort: CAS-command -------------------------------------";
|
wneuper@59243
|
119 |
"----------- insertion sort: CAS-command -------------------------------------";
|
wneuper@59243
|
120 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [([], ("e_domID", ["e_pblID"], ["e_metID"]))];
|
wneuper@59562
|
121 |
val (_,(_,c,(pt,p))) = inform ([],[],(pt,p)) "Sort {||1, 3, 2||}";
|
wneuper@59243
|
122 |
show_pt pt;
|
wneuper@59243
|
123 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Apply_Method",..*)
|
wneuper@59245
|
124 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
125 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
126 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
127 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
128 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
129 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
130 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
131 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
132 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
133 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
134 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
135 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
136 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
137 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
138 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
139 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
140 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
141 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
142 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59245
|
143 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59243
|
144 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (* nxt = ("Check_Postcond",..*)
|
wneuper@59243
|
145 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (* nxt = ("End_Proof'",..*)
|
wneuper@59253
|
146 |
if f2str f = "{|| 1, 2, 3 ||}"
|
wneuper@59253
|
147 |
then case nxt of ("End_Proof'", End_Proof') => ()
|
wneuper@59253
|
148 |
| _ => error "--- insertion sort: CAS-command CHANGED 1"
|
wneuper@59253
|
149 |
else error "--- insertion sort: CAS-command CHANGED 2";
|
wneuper@59245
|
150 |
|
wneuper@59245
|
151 |
"----------- insertion sort: met_Prog_sort_ins_steps -------------------------";
|
wneuper@59245
|
152 |
"----------- insertion sort: met_Prog_sort_ins_steps -------------------------";
|
wneuper@59245
|
153 |
"----------- insertion sort: met_Prog_sort_ins_steps -------------------------";
|
wneuper@59245
|
154 |
reset_states ();
|
wneuper@59245
|
155 |
CalcTree
|
wneuper@59245
|
156 |
[(["unsorted {||1, 3, 2||}", "sorted s_s"],
|
wneuper@59246
|
157 |
("InsSort", ["insertion","SORT","Programming"],
|
wneuper@59246
|
158 |
["Programming","SORT","insertion_steps"]))];
|
wneuper@59245
|
159 |
Iterator 1;
|
wneuper@59245
|
160 |
moveActiveRoot 1;
|
wneuper@59245
|
161 |
autoCalculate 1 CompleteCalc;
|
wneuper@59245
|
162 |
interSteps 1 ([],Res);
|
wneuper@59245
|
163 |
|
wneuper@59245
|
164 |
val ((pt,p),_) = get_calc 1; show_pt pt;
|
wneuper@59245
|
165 |
|
wneuper@59245
|
166 |
if p = ([], Res)andalso term2str (get_obj g_res pt (fst p)) = "{|| 1, 2, 3 ||}"
|
wneuper@59245
|
167 |
andalso length (get_interval ([], Pbl) ([], Res) 1 pt) = 23 then ()
|
wneuper@59245
|
168 |
else error "met_Prog_sort_ins_steps CHANGED"
|