test/Tools/isac/Knowledge/inssort.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Wed, 03 Jul 2019 15:09:16 +0200
changeset 59562 d50fe358f04a
parent 59559 f25ce1922b60
child 59749 cc3b1807f72e
permissions -rw-r--r--
lucin: fix Test_Isac, rename aux-funs in lucas-interpreter.
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"