src/HOL/Prolog/Test.thy
author wenzelm
Sat, 01 Dec 2001 18:52:32 +0100
changeset 12338 de0f4a63baa5
parent 9015 8006e9009621
child 13208 965f95a3abd9
permissions -rw-r--r--
renamed class "term" to "type" (actually "HOL.type");
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     1
(* basic examples *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     2
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     3
Test = HOHH +
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     4
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     5
types nat
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 9015
diff changeset
     6
arities nat :: type
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     7
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     8
types 'a list
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 9015
diff changeset
     9
arities list :: (type) type
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    10
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    11
consts Nil   :: 'a list		 	 		 ("[]")
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    12
       Cons  :: 'a => 'a list => 'a list		 (infixr "#"  65)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    13
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    14
syntax
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    15
  (* list Enumeration *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    16
  "@list"     :: args => 'a list                          ("[(_)]")
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    17
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    18
translations
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    19
  "[x, xs]"     == "x#[xs]"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    20
  "[x]"         == "x#[]"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    21
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    22
types   person
12338
de0f4a63baa5 renamed class "term" to "type" (actually "HOL.type");
wenzelm
parents: 9015
diff changeset
    23
arities person  :: type
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    24
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    25
consts  
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    26
	append  :: ['a list, 'a list, 'a list]		  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    27
	reverse :: ['a list, 'a list]			  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    28
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    29
	mappred	:: [('a => 'b => bool), 'a list, 'b list] => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    30
	mapfun	:: [('a => 'b), 'a list, 'b list]	  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    31
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    32
	bob	:: person
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    33
	sue	:: person
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    34
	ned	:: person
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    36
	"23"	:: nat		("23")
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    37
	"24"	:: nat		("24")
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    38
	"25"	:: nat		("25")
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    39
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    40
	age	:: [person, nat]			  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    41
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    42
	eq	:: ['a, 'a]				  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    43
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    44
	empty	:: ['b]					  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    45
	add	:: ['a, 'b, 'b]				  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    46
	remove	:: ['a, 'b, 'b]				  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    47
	bag_appl:: ['a, 'a, 'a, 'a]			  => bool
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    48
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    49
rules   append	"append  []    xs  xs    ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    50
		 append (x#xs) ys (x#zs) :- append xs ys zs"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    51
	reverse "reverse L1 L2 :- (!rev_aux. 
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    52
		  (!L.          rev_aux  []    L  L )..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    53
		  (!X L1 L2 L3. rev_aux (X#L1) L2 L3 :- rev_aux L1 L2 (X#L3))
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    54
		  => rev_aux L1 L2 [])"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    55
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    56
	mappred "mappred P  []     []    ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    57
		 mappred P (x#xs) (y#ys) :- P x y  &  mappred P xs ys"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    58
	mapfun  "mapfun f  []     []      ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    59
		 mapfun f (x#xs) (f x#ys) :- mapfun f xs ys"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    60
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    61
	age     "age bob 24 ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    62
		 age sue 23 ..
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    63
		 age ned 23"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    64
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    65
	eq	"eq x x"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    66
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    67
(* actual definitions of empty and add is hidden -> yields abstract data type *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    68
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    69
	bag_appl"bag_appl A B X Y:- (? S1 S2 S3 S4 S5.
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    70
				empty    S1    &
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    71
				add A    S1 S2 &
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    72
				add B    S2 S3 &
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    73
				remove X S3 S4 &
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    74
				remove Y S4 S5 &
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    75
				empty    S5)"
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    76
end