ex/qsort.thy
author nipkow
Mon, 24 Jan 1994 16:03:03 +0100
changeset 37 65a546c2b8ed
parent 36 b503da67d2f7
child 46 a73f8a7784bd
permissions -rw-r--r--
changed header
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     1
(*  Title: 	HOL/ex/qsort.thy
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     2
    ID:         $Id$
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     3
    Author: 	Tobias Nipkow
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     4
    Copyright   1994 TU Muenchen
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     5
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     6
Quicksort
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     7
*)
65a546c2b8ed changed header
nipkow
parents: 36
diff changeset
     8
36
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
     9
Qsort = List +
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    10
consts
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    11
  sorted :: "[['a,'a] => bool, 'a list] => bool"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    12
  mset   :: "'a list => ('a => nat)"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    13
  qsort  :: "[['a,'a] => bool, 'a list] => 'a list"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    14
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    15
rules
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    16
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    17
sorted_Nil "sorted(le,[])"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    18
sorted_Cons "sorted(le,Cons(x,xs)) = ((Alls y:xs. le(x,y)) & sorted(le,xs))"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    19
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    20
mset_Nil "mset([],y) = 0"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    21
mset_Cons "mset(Cons(x,xs),y) = if(x=y, Suc(mset(xs,y)), mset(xs,y))"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    22
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    23
qsort_Nil  "qsort(le,[]) = []"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    24
qsort_Cons "qsort(le,Cons(x,xs)) = qsort(le,[y:xs . ~le(x,y)]) @ \
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    25
\                                  Cons(x, qsort(le,[y:xs . le(x,y)]))"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    26
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    27
(* computational induction.
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    28
   The dependence of p on x but not xs is intentional.
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    29
*)
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    30
qsort_ind
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    31
 "[| P([]); \
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    32
\    !!x xs. [| P([y:xs . ~p(x,y)]); P([y:xs . p(x,y)]) |] ==> \
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    33
\            P(Cons(x,xs)) |] \
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    34
\ ==> P(xs)"
b503da67d2f7 Verification of quicksort
nipkow
parents:
diff changeset
    35
end