# HG changeset patch # User wenzelm # Date 1452699692 -3600 # Node ID e97452d79102607f82a5ed8624c11498adfc8ec1 # Parent cb806a024bba4954d90ccd4d8ec92b63a1d0716d Eisbach works for other object-logics, e.g. Eisbach_FOL.thy; diff -r cb806a024bba -r e97452d79102 NEWS --- a/NEWS Wed Jan 13 16:01:03 2016 +0100 +++ b/NEWS Wed Jan 13 16:41:32 2016 +0100 @@ -9,6 +9,12 @@ *** General *** +* Eisbach is now based on Pure instead of HOL. Objects-logics may import +either the theory ~~/src/HOL/Eisbach/Eisbach (for HOL etc.) or +~~/src/HOL/Eisbach/Eisbach_Old_Appl_Syntax (for FOL, ZF etc.). Note that +the HOL-Eisbach session located in ~~/src/HOL/Eisbach/ contains further +examples that do require HOL. + * Better resource usage on all platforms (Linux, Windows, Mac OS X) for both Isabelle/ML and Isabelle/Scala. Slightly reduced heap space usage. diff -r cb806a024bba -r e97452d79102 src/HOL/Eisbach/Eisbach_Old_Appl_Syntax.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/Eisbach/Eisbach_Old_Appl_Syntax.thy Wed Jan 13 16:41:32 2016 +0100 @@ -0,0 +1,13 @@ +(* Title: HOL/Eisbach/Eisbach_Old_Appl_Syntax.thy + Author: Makarius +*) + +section \Alternative Eisbach entry point for FOL, ZF etc.\ + +theory Eisbach_Old_Appl_Syntax +imports Eisbach +begin + +setup Pure_Thy.old_appl_syntax_setup + +end diff -r cb806a024bba -r e97452d79102 src/HOL/Eisbach/Examples_FOL.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/HOL/Eisbach/Examples_FOL.thy Wed Jan 13 16:41:32 2016 +0100 @@ -0,0 +1,100 @@ +(* Title: HOL/Eisbach/Examples.thy + Author: Daniel Matichuk, NICTA/UNSW +*) + +section \Basic Eisbach examples (in FOL)\ + +theory Examples_FOL +imports "~~/src/FOL/FOL" Eisbach_Old_Appl_Syntax +begin + + +subsection \Basic methods\ + +method my_intros = (rule conjI | rule impI) + +lemma "P \ Q \ Z \ X" + apply my_intros+ + oops + +method my_intros' uses intros = (rule conjI | rule impI | rule intros) + +lemma "P \ Q \ Z \ X" + apply (my_intros' intros: disjI1)+ + oops + +method my_spec for x :: 'a = (drule spec[where x="x"]) + +lemma "\x. P(x) \ P(x)" + apply (my_spec x) + apply assumption + done + + +subsection \Demo\ + +named_theorems intros and elims and subst + +method prop_solver declares intros elims subst = + (assumption | + rule intros | erule elims | + subst subst | subst (asm) subst | + (erule notE; solves prop_solver))+ + +lemmas [intros] = + conjI + impI + disjCI + iffI + notI +lemmas [elims] = + impCE + conjE + disjE + +lemma "((A \ B) \ (A \ C) \ (B \ C)) \ C" + apply prop_solver + done + +method guess_all = + (match premises in U[thin]:"\x. P (x :: 'a)" for P \ + \match premises in "?H (y :: 'a)" for y \ + \rule allE[where P = P and x = y, OF U]\ + | match conclusion in "?H (y :: 'a)" for y \ + \rule allE[where P = P and x = y, OF U]\\) + +lemma "(\x. P(x) \ Q(x)) \ P(y) \ Q(y)" + apply guess_all + apply prop_solver + done + +lemma "(\x. P(x) \ Q(x)) \ P(z) \ P(y) \ Q(y)" + apply (solves \guess_all, prop_solver\) \ \Try it without solve\ + done + +method guess_ex = + (match conclusion in + "\x. P (x :: 'a)" for P \ + \match premises in "?H (x :: 'a)" for x \ + \rule exI[where x=x]\\) + +lemma "P(x) \ \x. P(x)" + apply guess_ex + apply prop_solver + done + +method fol_solver = + ((guess_ex | guess_all | prop_solver); solves fol_solver) + +declare + allI [intros] + exE [elims] + ex_simps [subst] + all_simps [subst] + +lemma "(\x. P(x)) \ (\x. Q(x)) \ (\x. P(x) \ Q(x))" + and "\x. P(x) \ (\x. P(x))" + and "(\x. \y. R(x, y)) \ (\y. \x. R(x, y))" + by fol_solver+ + +end diff -r cb806a024bba -r e97452d79102 src/HOL/ROOT --- a/src/HOL/ROOT Wed Jan 13 16:01:03 2016 +0100 +++ b/src/HOL/ROOT Wed Jan 13 16:41:32 2016 +0100 @@ -658,6 +658,7 @@ Eisbach Tests Examples + Examples_FOL session "HOL-SET_Protocol" in SET_Protocol = HOL + description {*