src/Tools/isac/Knowledge/InsSort.thy
author Walther Neuper <neuper@ist.tugraz.at>
Wed, 25 Aug 2010 16:20:07 +0200
branchisac-update-Isa09-2
changeset 37947 22235e4dbe5f
parent 37906 src/Tools/isac/IsacKnowledge/InsSort.thy@e2b23ba9df13
child 37954 4022d670753c
permissions -rw-r--r--
renamed isac's directories and Build_Isac.thy

Scripts --> ProgLang
ME --> Interpret
IsacKnowledge --> Knowledge
neuper@37906
     1
(* 6.8.02 change to Isabelle2002 caused error -- thy excluded !
neuper@37906
     2
neuper@37906
     3
Proving equations for primrec function(s) "InsSort.foldr" ...
neuper@37906
     4
GC #1.17.30.54.345.21479:   (10 ms)
neuper@37906
     5
*** Definition of InsSort.ins :: "['a::ord list, 'a::ord] => 'a::ord list"
neuper@37906
     6
*** imposes additional sort constraints on the declared type of the constant
neuper@37906
     7
*** The error(s) above occurred in definition "InsSort.ins.ins_list_def (@@@)"
neuper@37906
     8
*)
neuper@37906
     9
neuper@37906
    10
(* insertion sort, would need lists different from script-lists WN.11.00
neuper@37906
    11
WN.7.5.03: -"- started with someList :: 'a list => unl, fun dest_list
neuper@37906
    12
WN.8.5.03: error (@@@) remained with outcommenting foldr ?!?
neuper@37906
    13
neuper@37947
    14
 use_thy_only"Knowledge/InsSort";
neuper@37906
    15
neuper@37906
    16
*)
neuper@37906
    17
neuper@37906
    18
InsSort = Script +
neuper@37906
    19
neuper@37906
    20
consts
neuper@37906
    21
neuper@37906
    22
(*foldr      :: [['a,'b] => 'a, 'b list, 'a] => 'a
neuper@37906
    23
WN.8.5.03: already defined in Isabelle2002 (instantiated by Typefix):
neuper@37906
    24
     "[[real, real] => real, real list, real] => real") : term
neuper@37906
    25
neuper@37906
    26
 val t = str2term "foldr";
neuper@37906
    27
val t =
neuper@37906
    28
  Const
neuper@37906
    29
    ("List.foldr",
neuper@37906
    30
     "[[RealDef.real, RealDef.real] => RealDef.real, RealDef.real List.list,
neuper@37906
    31
      RealDef.real] => RealDef.real") : term
neuper@37906
    32
 *)
neuper@37906
    33
  ins        :: ['a list,'a] => 'a list
neuper@37906
    34
  sort       :: 'a list => 'a list
neuper@37906
    35
neuper@37906
    36
(*descriptions, script-id*)
neuper@37906
    37
  unsorted   :: 'a list => unl
neuper@37906
    38
  sorted     :: 'a list => unl
neuper@37906
    39
neuper@37906
    40
(*subproblem and script-name*)
neuper@37906
    41
  Ins'_sort  :: "['a list, \
neuper@37906
    42
		  \ 'a list] => 'a list"
neuper@37906
    43
               ("((Script Ins'_sort (_ =))// \
neuper@37906
    44
		  \ (_))" 9)
neuper@37906
    45
  Sort       :: "['a list, \
neuper@37906
    46
		  \ 'a list] => 'a list"
neuper@37906
    47
               ("((Script Sort (_ =))// \
neuper@37906
    48
		  \ (_))" 9)
neuper@37906
    49
neuper@37906
    50
(*primrec
neuper@37906
    51
  foldr_base "foldr f [] a = a"
neuper@37906
    52
  foldr_rec  "foldr f (x#xs) a = foldr f xs (f a x)"
neuper@37906
    53
*)
neuper@37906
    54
neuper@37906
    55
rules
neuper@37906
    56
neuper@37947
    57
(*primrec .. outcommented analoguous to ListC.thy*)
neuper@37906
    58
  ins_base   "ins [] a = [a]"
neuper@37906
    59
  ins_rec    "ins (x#xs) a = (if x < a then x#(ins xs a) else a#(x#xs))" 
neuper@37906
    60
 
neuper@37906
    61
  sort_def   "sort ls = foldr ins ls []"
neuper@37906
    62
neuper@37906
    63
end