3 (*-------------------------from InsSort.thy 8.3.01----------------------*)
5 foldl :: [['b,'a] => 'b, 'b, 'a list] => 'b
7 foldl_Nil "foldl f a [] = a"
8 foldl_Cons "foldl f a (x#xs) = foldl f (f a x) xs"
12 | foldr f (x::xs) a = foldr f xs (f a x);
13 (*val fold = fn : ('a -> 'b -> 'a) -> 'b list -> 'a -> 'a*)
15 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
16 fun sort xs = foldr ins xs [];
18 (*-------------------------from InsSort.thy 8.3.01----------------------*)
21 (*-------------------------from InsSort.ML 8.3.01----------------------*)
23 theory' := (!theory') @ [("InsSort.thy",InsSort.thy)];
26 Rls{preconds = [], rew_ord = ("tless_true",tless_true),
27 rules = [Thm ("foldr_base",(*num_str*) foldr_base),
28 Thm ("foldr_rec",foldr_rec),
29 Thm ("ins_base",ins_base),
30 Thm ("ins_rec",ins_rec),
31 Thm ("sort_def",sort_def),
33 Calc ("op <",eval_equ "#less_"),
34 Thm ("if_True", if_True),
35 Thm ("if_False", if_False)
37 scr = Script ((term_of o the o (parse thy))
45 > get_pbt ["Script.thy","squareroot","univariate","equation"];
46 > get_met ("Script.thy","max_on_interval_by_calculus");
48 pbltypes:= (!pbltypes) @
51 (["InsSort.thy","inssort"]:pblID,
52 [("#Given" ,"unsorted u_"),
53 ("#Find" ,"sorted s_")
57 methods:= (!methods) @
60 (("InsSort.thy","inssort"):metID,
62 [("#Given" ,"unsorted u_"),
63 ("#Find" ,"sorted s_")
65 rew_ord'="tless_true",rls'="eval_rls",asm_rls=[],asm_thm=[],
66 scr=Script (((inst_abs (assoc_thm "InsSort.thy"))
67 o term_of o the o (parse thy)) (*for [#1,#3,#2] only*)
68 "Script Ins_sort (u_::'a list) = \
69 \ (let u_ = Rewrite sort_def False u_; \
70 \ u_ = Rewrite foldr_rec False u_; \
71 \ u_ = Rewrite ins_base False u_; \
72 \ u_ = Rewrite foldr_rec False u_; \
73 \ u_ = Rewrite ins_rec False u_; \
74 \ u_ = Calculate le u_; \
75 \ u_ = Rewrite if_True False u_; \
76 \ u_ = Rewrite ins_base False u_; \
77 \ u_ = Rewrite foldr_rec False u_; \
78 \ u_ = Rewrite ins_rec False u_; \
79 \ u_ = Calculate le u_; \
80 \ u_ = Rewrite if_True False u_; \
81 \ u_ = Rewrite ins_rec False u_; \
82 \ u_ = Calculate le u_; \
83 \ u_ = Rewrite if_False False u_; \
84 \ u_ = Rewrite foldr_base False u_ \
88 (("InsSort.thy","sort"):metID,
90 [("#Given" ,"unsorted u_"),
91 ("#Find" ,"sorted s_")
93 rew_ord'="tless_true",rls'="eval_rls",asm_rls=[],asm_thm=[],
94 scr=Script ((inst_abs o term_of o the o (parse thy))
95 "Script Sort (u_::'a list) = \
96 \ Rewrite_Set ins_sort False u_")
107 rew_ord'="tless_true",rls'="eval_rls",asm_rls=[],asm_thm=[],
108 scr=EmptyScr} : meth'),
111 (*-------------------------from InsSort.ML 8.3.01----------------------*)
114 (*------------------------- nipkow ----------------------*)
116 sort :: 'a list => 'a list
117 ins :: ['a,'a list] => 'a list
118 (*foldl :: [['a,'b] => 'a, 'a, 'b list] => 'a
121 ins_base "ins e [] = [e]"
122 ins_rec "ins e (l#ls) = (if l < e then l#(ins e ls) else e#(l#ls))"
125 sort_def "sort ls = (foldl ins ls [])"
130 (* fn : ('a * 'b -> 'b) -> 'a list -> 'b -> 'b *)
132 | foldL f (l::ls) e = f(l,foldL f ls e);
134 (* fn : int * int list -> int list *)
135 fun insL (e,[]) = [e]
136 | insL (e,l::ls) = if l < e then l::(insL(e,ls)) else e::(l::ls);
138 fun sortL ls = foldL insL ls [];
140 sortL [2,3,1]; (* [1,2,3] *)
143 (** swp, curried: ..LC **)
144 (* fn : ('a * 'b -> 'b) -> 'a list -> 'b -> 'b *)
145 fun foldLC f [] e = e
146 | foldLC f (x::xs) e = f x (foldLC f xs e);
148 (* fn : int * int list -> int list *)
150 | insLC e (l::ls) = if l < e then l::(insLC e ls) else e::(l::ls);
152 fun sortLC ls = foldLC insLC ls [];
154 sortLC [2,3,1]; (* [1,2,3] *)
158 (* fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b *)
160 (* fn : ('a * 'a -> 'a) -> 'a * 'b list -> 'a : ANDERS !!!
162 | foldl f e (l::ls) = f e (foldl f (e,ls)); 0+...+0+0
164 foldl op+ (0,[100,11,1]);
165 val it = 0 : int ... GEHT NICHT !!! *)
167 fun insl (e,[]) = [e]
168 | insl (e,l::ls) = if l < e then l::(insl(e,ls)) else e::(l::ls);
170 fun sortl ls = foldl insl [] ls;
172 sortl [2,3,1]; (* [1,2,3] *)
175 (** sml110, curried: ..lC **)
176 (* fn : ('a -> 'a -> 'a) -> 'a -> 'b list -> 'a *)
177 fun foldlC f e [] = e
178 | foldlC f e (l::ls) = f e (foldlC f e ls);
180 (* fn : int -> int list -> int list *)
182 | inslC e (l::ls) = if l < e then l::(inslC e ls) else e::(l::ls);
184 fun sortlC ls = foldlC inslC [] ls;
192 | Foldl f a (x::xs) = Foldl f (f a x) xs;
193 (*val Foldl = fn : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a*)
195 fun add a b = a+b:int;
200 | ins0 a (x::xs) = if x < a then x::(ins0 a xs) else a::(x::xs);
201 (*val ins = fn : int -> int list -> int list*)
204 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
205 (*val ins = fn : int -> int list -> int list*)
209 fun sort xs = Foldl ins0 xs [];
210 (*operator domain: int -> int list -> int
211 operand: int -> int list -> int list
215 fun sort xs = Foldl ins xs [];
223 | foldr f (x::xs) a = foldr f xs (f a x);
224 (*val fold = fn : ('a -> 'b -> 'a) -> 'b list -> 'a -> 'a*)
226 fun add a b = a+b:int;
231 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
232 (*val ins = fn : int list -> int -> int list*)
236 fun sort xs = foldr ins xs [];
242 (*--- 17.6.00 II ---*)
245 | foldl f a (x::xs) = foldl f (f a x) xs;
248 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
250 fun sort xs = foldl ins xs [];
253 (*val it = [3,1,4,2] : int list !?!?!?!?!?!?!?!?!?!?!?!?!?!?!?*)
255 (*------------------------- nipkow ----------------------*)
257 sort :: 'a list => 'a list
258 ins :: ['a,'a list] => 'a list
259 (*foldl :: [['a,'b] => 'a, 'a, 'b list] => 'a
262 ins_base "ins e [] = [e]"
263 ins_rec "ins e (l#ls) = (if l < e then l#(ins e ls) else e#(l#ls))"
266 sort_def "sort ls = (foldl ins ls [])"
271 (* fn : ('a * 'b -> 'b) -> 'a list -> 'b -> 'b *)
273 | foldL f (l::ls) e = f(l,foldL f ls e);
275 (* fn : int * int list -> int list *)
276 fun insL (e,[]) = [e]
277 | insL (e,l::ls) = if l < e then l::(insL(e,ls)) else e::(l::ls);
279 fun sortL ls = foldL insL ls [];
281 sortL [2,3,1]; (* [1,2,3] *)
284 (** swp, curried: ..LC **)
285 (* fn : ('a * 'b -> 'b) -> 'a list -> 'b -> 'b *)
286 fun foldLC f [] e = e
287 | foldLC f (x::xs) e = f x (foldLC f xs e);
289 (* fn : int * int list -> int list *)
291 | insLC e (l::ls) = if l < e then l::(insLC e ls) else e::(l::ls);
293 fun sortLC ls = foldLC insLC ls [];
295 sortLC [2,3,1]; (* [1,2,3] *)
299 (* fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b *)
301 (* fn : ('a * 'a -> 'a) -> 'a * 'b list -> 'a : ANDERS !!!
303 | foldl f e (l::ls) = f e (foldl f (e,ls)); 0+...+0+0
305 foldl op+ (0,[100,11,1]);
306 val it = 0 : int ... GEHT NICHT !!! *)
308 fun insl (e,[]) = [e]
309 | insl (e,l::ls) = if l < e then l::(insl(e,ls)) else e::(l::ls);
311 fun sortl ls = foldl insl [] ls;
313 sortl [2,3,1]; (* [1,2,3] *)
316 (** sml110, curried: ..lC **)
317 (* fn : ('a -> 'a -> 'a) -> 'a -> 'b list -> 'a *)
318 fun foldlC f e [] = e
319 | foldlC f e (l::ls) = f e (foldlC f e ls);
321 (* fn : int -> int list -> int list *)
323 | inslC e (l::ls) = if l < e then l::(inslC e ls) else e::(l::ls);
325 fun sortlC ls = foldlC inslC [] ls;
333 | Foldl f a (x::xs) = Foldl f (f a x) xs;
334 (*val Foldl = fn : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a*)
336 fun add a b = a+b:int;
341 | ins0 a (x::xs) = if x < a then x::(ins0 a xs) else a::(x::xs);
342 (*val ins = fn : int -> int list -> int list*)
345 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
346 (*val ins = fn : int -> int list -> int list*)
350 fun sort xs = Foldl ins0 xs [];
351 (*operator domain: int -> int list -> int
352 operand: int -> int list -> int list
356 fun sort xs = Foldl ins xs [];
364 | foldr f (x::xs) a = foldr f xs (f a x);
365 (*val fold = fn : ('a -> 'b -> 'a) -> 'b list -> 'a -> 'a*)
367 fun add a b = a+b:int;
372 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
373 (*val ins = fn : int list -> int -> int list*)
377 fun sort xs = foldr ins xs [];
383 (*--- 17.6.00 II ---*)
386 | foldl f a (x::xs) = foldl f (f a x) xs;
389 | ins (x::xs) a = if x < a then x::(ins xs a) else a::(x::xs);
391 fun sort xs = foldl ins xs [];
394 (*val it = [3,1,4,2] : int list !?!?!?!?!?!?!?!?!?!?!?!?!?!?!?*)
395 (*------------------------- nipkow ----------------------*)