# HG changeset patch # User wenzelm # Date 1125776669 -7200 # Node ID 88cfb2749fb6a6b7480eddce63b97e06ae5b1d00 # Parent e352f65d58935b377706fb84b98f74190e01db04 obsolete; diff -r e352f65d5893 -r 88cfb2749fb6 src/Cube/ex/ex.ML --- a/src/Cube/ex/ex.ML Sat Sep 03 21:43:50 2005 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -(* Examples taken from - H. Barendregt. Introduction to Generalised Type Systems. - J. Functional Programming. -*) - -fun strip_asms_tac thms i = - REPEAT(resolve_tac[strip_b,strip_s]i THEN DEPTH_SOLVE_1(ares_tac thms i)); - -val imp_elim = prove_goal Base.thy "[| f:A->B; a:A; f^a:B ==> PROP P |] ==> PROP P" - (fn asms => [REPEAT(resolve_tac (app::asms) 1)]); - -val pi_elim = prove_goal Base.thy - "[| F:Prod(A,B); a:A; F^a:B(a) ==> PROP P |] ==> PROP P" - (fn asms => [REPEAT(resolve_tac (app::asms) 1)]); - -(* SIMPLE TYPES *) - -goal Base.thy "A:* |- A->A : ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -goal Base.thy "A:* |- Lam a:A. a : ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -goal Base.thy "A:* B:* b:B |- Lam x:A. b : ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -goal Base.thy "A:* b:A |- (Lam a:A. a)^b: ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -goal Base.thy "A:* B:* c:A b:B |- (Lam x:A. b)^ c: ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -goal Base.thy "A:* B:* |- Lam a:A. Lam b:B. a : ?T"; -by (DEPTH_SOLVE (ares_tac simple 1)); -uresult(); - -(* SECOND-ORDER TYPES *) - -goal L2.thy "|- Lam A:*. Lam a:A. a : ?T"; -by (DEPTH_SOLVE (ares_tac L2 1)); -uresult(); - -goal L2.thy "A:* |- (Lam B:*.Lam b:B. b)^A : ?T"; -by (DEPTH_SOLVE (ares_tac L2 1)); -uresult(); - -goal L2.thy "A:* b:A |- (Lam B:*.Lam b:B. b) ^ A ^ b: ?T"; -by (DEPTH_SOLVE (ares_tac L2 1)); -uresult(); - -goal L2.thy "|- Lam B:*.Lam a:(Pi A:*.A).a ^ ((Pi A:*.A)->B) ^ a: ?T"; -by (DEPTH_SOLVE (ares_tac L2 1)); -uresult(); - -(* Weakly higher-order proposiional logic *) - -goal Lomega.thy "|- Lam A:*.A->A : ?T"; -by (DEPTH_SOLVE (ares_tac Lomega 1)); -uresult(); - -goal Lomega.thy "B:* |- (Lam A:*.A->A) ^ B : ?T"; -by (DEPTH_SOLVE (ares_tac Lomega 1)); -uresult(); - -goal Lomega.thy "B:* b:B |- (Lam y:B. b): ?T"; -by (DEPTH_SOLVE (ares_tac Lomega 1)); -uresult(); - -goal Lomega.thy "A:* F:*->* |- F^(F^A): ?T"; -by (DEPTH_SOLVE (ares_tac Lomega 1)); -uresult(); - -goal Lomega.thy "A:* |- Lam F:*->*.F^(F^A): ?T"; -by (DEPTH_SOLVE (ares_tac Lomega 1)); -uresult(); - -(* LF *) - -goal LP.thy "A:* |- A -> * : ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* a:A |- P^a: ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->A->* a:A |- Pi a:A. P^a^a: ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* Q:A->* |- Pi a:A. P^a -> Q^a: ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* |- Pi a:A. P^a -> P^a: ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* |- Lam a:A. Lam x:P^a. x: ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* Q:* |- (Pi a:A. P^a->Q) -> (Pi a:A. P^a) -> Q : ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -goal LP.thy "A:* P:A->* Q:* a0:A |- \ -\ Lam x:Pi a:A. P^a->Q. Lam y:Pi a:A. P^a. x^a0^(y^a0): ?T"; -by (DEPTH_SOLVE (ares_tac LP 1)); -uresult(); - -(* OMEGA-ORDER TYPES *) - -goal L2.thy "A:* B:* |- Pi C:*.(A->B->C)->C : ?T"; -by (DEPTH_SOLVE (ares_tac L2 1)); -uresult(); - -goal Lomega2.thy "|- Lam A:*.Lam B:*.Pi C:*.(A->B->C)->C : ?T"; -by (DEPTH_SOLVE (ares_tac Lomega2 1)); -uresult(); - -goal Lomega2.thy "|- Lam A:*.Lam B:*.Lam x:A. Lam y:B. x : ?T"; -by (DEPTH_SOLVE (ares_tac Lomega2 1)); -uresult(); - -goal Lomega2.thy "A:* B:* |- ?p : (A->B) -> ((B->Pi P:*.P)->(A->Pi P:*.P))"; -by (strip_asms_tac Lomega2 1); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac Lomega2 1)); -by (DEPTH_SOLVE_1(ares_tac Lomega2 2)); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac Lomega2 1)); -by (DEPTH_SOLVE_1(ares_tac Lomega2 2)); -by (rtac lam_ss 1); -by (assume_tac 1); -by (DEPTH_SOLVE_1(ares_tac Lomega2 2)); -by (etac pi_elim 1); -by (assume_tac 1); -by (etac pi_elim 1); -by (assume_tac 1); -by (assume_tac 1); -uresult(); - -(* Second-order Predicate Logic *) - -goal LP2.thy "A:* P:A->* |- Lam a:A. P^a->(Pi A:*.A) : ?T"; -by (DEPTH_SOLVE (ares_tac LP2 1)); -uresult(); - -goal LP2.thy "A:* P:A->A->* |- \ -\ (Pi a:A. Pi b:A. P^a^b->P^b^a->Pi P:*.P) -> Pi a:A. P^a^a->Pi P:*.P : ?T"; -by (DEPTH_SOLVE (ares_tac LP2 1)); -uresult(); - -(* Antisymmetry implies irreflexivity: *) -goal LP2.thy "A:* P:A->A->* |- \ -\ ?p: (Pi a:A. Pi b:A. P^a^b->P^b^a->Pi P:*.P) -> Pi a:A. P^a^a->Pi P:*.P"; -by (strip_asms_tac LP2 1); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (rtac lam_ss 1); -by (assume_tac 1); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (REPEAT(EVERY[etac pi_elim 1, assume_tac 1, TRY(assume_tac 1)])); -uresult(); - -(* LPomega *) - -goal LPomega.thy "A:* |- Lam P:A->A->*.Lam a:A. P^a^a : ?T"; -by (DEPTH_SOLVE (ares_tac LPomega 1)); -uresult(); - -goal LPomega.thy "|- Lam A:*.Lam P:A->A->*.Lam a:A. P^a^a : ?T"; -by (DEPTH_SOLVE (ares_tac LPomega 1)); -uresult(); - -(* CONSTRUCTIONS *) - -goal CC.thy "|- Lam A:*.Lam P:A->*.Lam a:A. P^a->Pi P:*.P: ?T"; -by (DEPTH_SOLVE (ares_tac CC 1)); -uresult(); - -goal CC.thy "|- Lam A:*.Lam P:A->*.Pi a:A. P^a: ?T"; -by (DEPTH_SOLVE (ares_tac CC 1)); -uresult(); - -goal CC.thy "A:* P:A->* a:A |- ?p : (Pi a:A. P^a)->P^a"; -by (strip_asms_tac CC 1); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac CC 1)); -by (DEPTH_SOLVE_1(ares_tac CC 2)); -by (EVERY[etac pi_elim 1, assume_tac 1, assume_tac 1]); -uresult(); - -(* Some random examples *) - -goal LP2.thy "A:* c:A f:A->A |- \ -\ Lam a:A. Pi P:A->*.P^c -> (Pi x:A. P^x->P^(f^x)) -> P^a : ?T"; -by (DEPTH_SOLVE(ares_tac LP2 1)); -uresult(); - -goal CC.thy "Lam A:*.Lam c:A. Lam f:A->A. \ -\ Lam a:A. Pi P:A->*.P^c -> (Pi x:A. P^x->P^(f^x)) -> P^a : ?T"; -by (DEPTH_SOLVE(ares_tac CC 1)); -uresult(); - -(* Symmetry of Leibnitz equality *) -goal LP2.thy "A:* a:A b:A |- ?p: (Pi P:A->*.P^a->P^b) -> (Pi P:A->*.P^b->P^a)"; -by (strip_asms_tac LP2 1); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (eres_inst_tac [("a","Lam x:A. Pi Q:A->*.Q^x->Q^a")] pi_elim 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (rewtac beta); -by (etac imp_elim 1); -by (rtac lam_bs 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (rtac lam_ss 1); -by (DEPTH_SOLVE_1(ares_tac LP2 1)); -by (DEPTH_SOLVE_1(ares_tac LP2 2)); -by (assume_tac 1); -by (assume_tac 1); -uresult();