src/HOL/Prolog/Test.thy
changeset 21425 c11ab38b78a7
parent 17311 5b1d47d920ce
child 34974 18b41bba42b5
--- a/src/HOL/Prolog/Test.thy	Mon Nov 20 11:51:10 2006 +0100
+++ b/src/HOL/Prolog/Test.thy	Mon Nov 20 21:23:12 2006 +0100
@@ -80,6 +80,202 @@
                                 remove Y S4 S5 &
                                 empty    S5)"
 
-ML {* use_legacy_bindings (the_context ()) *}
+lemmas prog_Test = append reverse mappred mapfun age eq bag_appl
+
+lemma "append ?x ?y [a,b,c,d]"
+  apply (prolog prog_Test)
+  back
+  back
+  back
+  back
+  done
+
+lemma "append [a,b] y ?L"
+  apply (prolog prog_Test)
+  done
+
+lemma "!y. append [a,b] y (?L y)"
+  apply (prolog prog_Test)
+  done
+
+lemma "reverse [] ?L"
+  apply (prolog prog_Test)
+  done
+
+lemma "reverse [23] ?L"
+  apply (prolog prog_Test)
+  done
+
+lemma "reverse [23,24,?x] ?L"
+  apply (prolog prog_Test)
+  done
+
+lemma "reverse ?L [23,24,?x]"
+  apply (prolog prog_Test)
+  done
+
+lemma "mappred age ?x [23,24]"
+  apply (prolog prog_Test)
+  back
+  done
+
+lemma "mappred (%x y. ? z. age z y) ?x [23,24]"
+  apply (prolog prog_Test)
+  done
+
+lemma "mappred ?P [bob,sue] [24,23]"
+  apply (prolog prog_Test)
+  done
+
+lemma "mapfun f [bob,bob,sue] [?x,?y,?z]"
+  apply (prolog prog_Test)
+  done
+
+lemma "mapfun (%x. h x 25) [bob,sue] ?L"
+  apply (prolog prog_Test)
+  done
+
+lemma "mapfun ?F [24,25] [h bob 24,h bob 25]"
+  apply (prolog prog_Test)
+  done
+
+lemma "mapfun ?F [24] [h 24 24]"
+  apply (prolog prog_Test)
+  back
+  back
+  back
+  done
+
+lemma "True"
+  apply (prolog prog_Test)
+  done
+
+lemma "age ?x 24 & age ?y 23"
+  apply (prolog prog_Test)
+  back
+  done
+
+lemma "age ?x 24 | age ?x 23"
+  apply (prolog prog_Test)
+  back
+  back
+  done
+
+lemma "? x y. age x y"
+  apply (prolog prog_Test)
+  done
+
+lemma "!x y. append [] x x"
+  apply (prolog prog_Test)
+  done
+
+lemma "age sue 24 .. age bob 23 => age ?x ?y"
+  apply (prolog prog_Test)
+  back
+  back
+  back
+  back
+  done
+
+(*set trace_DEPTH_FIRST;*)
+lemma "age bob 25 :- age bob 24 => age bob 25"
+  apply (prolog prog_Test)
+  done
+(*reset trace_DEPTH_FIRST;*)
+
+lemma "(!x. age x 25 :- age x 23) => age ?x 25 & age ?y 25"
+  apply (prolog prog_Test)
+  back
+  back
+  back
+  done
+
+lemma "!x. ? y. eq x y"
+  apply (prolog prog_Test)
+  done
+
+lemma "? P. P & eq P ?x"
+  apply (prolog prog_Test)
+(*
+  back
+  back
+  back
+  back
+  back
+  back
+  back
+  back
+*)
+  done
+
+lemma "? P. eq P (True & True) & P"
+  apply (prolog prog_Test)
+  done
+
+lemma "? P. eq P op | & P k True"
+  apply (prolog prog_Test)
+  done
+
+lemma "? P. eq P (Q => True) & P"
+  apply (prolog prog_Test)
+  done
+
+(* P flexible: *)
+lemma "(!P k l. P k l :- eq P Q) => Q a b"
+  apply (prolog prog_Test)
+  done
+(*
+loops:
+lemma "(!P k l. P k l :- eq P (%x y. x | y)) => a | b"
+*)
+
+(* implication and disjunction in atom: *)
+lemma "? Q. (!p q. R(q :- p) => R(Q p q)) & Q (t | s) (s | t)"
+  by fast
+
+(* disjunction in atom: *)
+lemma "(!P. g P :- (P => b | a)) => g(a | b)"
+  apply (tactic "step_tac HOL_cs 1")
+  apply (tactic "step_tac HOL_cs 1")
+  apply (tactic "step_tac HOL_cs 1")
+   prefer 2
+   apply fast
+  apply fast
+  done
+
+(*
+hangs:
+lemma "(!P. g P :- (P => b | a)) => g(a | b)"
+  by fast
+*)
+
+lemma "!Emp Stk.(
+                       empty    (Emp::'b) .. 
+         (!(X::nat) S. add    X (S::'b)         (Stk X S)) .. 
+         (!(X::nat) S. remove X ((Stk X S)::'b) S))
+ => bag_appl 23 24 ?X ?Y"
+  oops
+
+lemma "!Qu. ( 
+          (!L.            empty    (Qu L L)) .. 
+          (!(X::nat) L K. add    X (Qu L (X#K)) (Qu L K)) ..
+          (!(X::nat) L K. remove X (Qu (X#L) K) (Qu L K)))
+ => bag_appl 23 24 ?X ?Y"
+  oops
+
+lemma "D & (!y. E) :- (!x. True & True) :- True => D"
+  apply (prolog prog_Test)
+  done
+
+lemma "P x .. P y => P ?X"
+  apply (prolog prog_Test)
+  back
+  done
+(*
+back
+-> problem with DEPTH_SOLVE:
+Exception- THM ("dest_state", 1, ["P x & P y --> P y"]) raised
+Exception raised at run-time
+*)
 
 end