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