src/HOL/Prolog/Test.ML
author wenzelm
Wed, 09 Jun 2004 18:52:42 +0200
changeset 14898 a25550451b51
parent 13208 965f95a3abd9
child 14981 e73f8140af78
permissions -rw-r--r--
Url.File;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13208
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     1
(*  Title:    HOL/Prolog/Test.ML
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     2
    ID:       $Id$
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     3
    Author:   David von Oheimb (based on a lecture on Lambda Prolog by Nadathur)
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     4
    License:  GPL (GNU GENERAL PUBLIC LICENSE)
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     5
*)
965f95a3abd9 added the usual file headers
oheimb
parents: 12486
diff changeset
     6
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     7
open Test;
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     8
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
     9
val prog_Test = prog_HOHH@[append, reverse, mappred, mapfun, age, eq, bag_appl];
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
    10
fun pgoal s = (case Goal s of _ => by (prolog_tac prog_Test));
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    11
val p = ptac prog_Test 1;
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    12
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    13
pgoal "append ?x ?y [a,b,c,d]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    14
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    15
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    16
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    17
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    18
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    19
pgoal "append [a,b] y ?L";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    20
pgoal "!y. append [a,b] y (?L y)";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    21
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    22
pgoal "reverse [] ?L";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    23
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    24
pgoal "reverse [23] ?L";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    25
pgoal "reverse [23,24,?x] ?L";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    26
pgoal "reverse ?L [23,24,?x]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    27
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    28
pgoal "mappred age ?x [23,24]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    29
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    30
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    31
pgoal "mappred (%x y. ? z. age z y) ?x [23,24]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    32
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    33
pgoal "mappred ?P [bob,sue] [24,23]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    34
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    35
pgoal "mapfun f [bob,bob,sue] [?x,?y,?z]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    36
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    37
pgoal "mapfun (%x. h x 25) [bob,sue] ?L";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    38
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    39
pgoal "mapfun ?F [24,25] [h bob 24,h bob 25]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    40
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    41
pgoal "mapfun ?F [24] [h 24 24]";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    42
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    43
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    44
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    45
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    46
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    47
(*
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    48
goal thy "f a = ?g a a & ?g = x"; 
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
    49
by (rtac conjI 1);
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
    50
by (rtac refl 1);
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    51
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    52
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    53
*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    54
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    55
pgoal "True";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    56
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    57
pgoal "age ?x 24 & age ?y 23";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    58
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    59
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    60
pgoal "age ?x 24 | age ?x 23";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    61
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    62
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    63
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    64
pgoal "? x y. age x y";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    65
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    66
pgoal "!x y. append [] x x";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    67
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    68
pgoal "age sue 24 .. age bob 23 => age ?x ?y";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    69
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    70
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    71
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    72
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    73
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    74
(*set trace_DEPTH_FIRST;*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    75
pgoal "age bob 25 :- age bob 24 => age bob 25";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    76
(*reset trace_DEPTH_FIRST;*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    77
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    78
pgoal "(!x. age x 25 :- age x 23) => age ?x 25 & age ?y 25";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    79
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    80
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    81
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    82
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    83
pgoal "!x. ? y. eq x y";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    84
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    85
pgoal "? P. P & eq P ?x";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    86
(*
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    87
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    88
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    89
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    90
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    91
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    92
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    93
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    94
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    95
*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    96
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    97
pgoal "? P. eq P (True & True) & P";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    98
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
    99
pgoal "? P. eq P op | & P k True";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   100
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   101
pgoal "? P. eq P (Q => True) & P";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   102
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   103
(* P flexible: *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   104
pgoal "(!P k l. P k l :- eq P Q) => Q a b";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   105
(*
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   106
loops:
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   107
pgoal "(!P k l. P k l :- eq P (%x y. x | y)) => a | b";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   108
*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   109
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   110
(* implication and disjunction in atom: *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   111
goal thy "? Q. (!p q. R(q :- p) => R(Q p q)) & Q (t | s) (s | t)";
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   112
by (fast_tac HOL_cs 1);
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   113
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   114
(* disjunction in atom: *)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   115
goal thy "(!P. g P :- (P => b | a)) => g(a | b)";
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   116
by (step_tac HOL_cs 1);
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   117
by (step_tac HOL_cs 1);
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   118
by (step_tac HOL_cs 1);
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   119
by (fast_tac HOL_cs 2);
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   120
by (fast_tac HOL_cs 1);
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   121
(*
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   122
hangs:
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   123
goal thy "(!P. g P :- (P => b | a)) => g(a | b)";
12486
0ed8bdd883e0 isatool expandshort;
wenzelm
parents: 9015
diff changeset
   124
by (fast_tac HOL_cs 1);
9015
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   125
*)
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   126
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   127
pgoal "!Emp Stk.(\
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   128
\                       empty    (Emp::'b) .. \
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   129
\         (!(X::nat) S. add    X (S::'b)         (Stk X S)) .. \
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   130
\         (!(X::nat) S. remove X ((Stk X S)::'b) S))\
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   131
\ => bag_appl 23 24 ?X ?Y";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   132
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   133
pgoal "!Qu. ( \
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   134
\          (!L.            empty    (Qu L L)) .. \
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   135
\          (!(X::nat) L K. add    X (Qu L (X#K)) (Qu L K)) ..\
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   136
\          (!(X::nat) L K. remove X (Qu (X#L) K) (Qu L K)))\
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   137
\ => bag_appl 23 24 ?X ?Y";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   138
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   139
pgoal "D & (!y. E) :- (!x. True & True) :- True => D";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   140
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   141
pgoal "P x .. P y => P ?X";
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   142
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   143
(*
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   144
back();
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   145
-> problem with DEPTH_SOLVE:
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   146
Exception- THM ("dest_state", 1, ["P x & P y --> P y"]) raised
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   147
Exception raised at run-time
8006e9009621 added HOL/Prolog
oheimb
parents:
diff changeset
   148
*)