# HG changeset patch # User wenzelm # Date 1343662654 -7200 # Node ID 795d38a6dab3409bf4702f1fbe6df62b3e9ae752 # Parent b34ff75c23a73d8a57af628229f454752c87264d regenerate ToyList2/ToyList.thy during raw make *after* session build, to ensure that it is updated sporadically (NB: isabelle build does not support generated sources); diff -r b34ff75c23a7 -r 795d38a6dab3 doc-src/ROOT --- a/doc-src/ROOT Mon Jul 30 17:25:45 2012 +0200 +++ b/doc-src/ROOT Mon Jul 30 17:37:34 2012 +0200 @@ -177,6 +177,10 @@ "Sets/Relations" "Sets/Recur" +session ToyList2 (doc) in "TutorialI/ToyList2" = HOL + + options [browser_info = false, document = false, print_mode = "brackets"] + theories ToyList + session examples (doc) in "ZF" = ZF + options [browser_info = false, document = false, document_dump = document, document_dump_mode = "tex", diff -r b34ff75c23a7 -r 795d38a6dab3 doc-src/TutorialI/Makefile --- a/doc-src/TutorialI/Makefile Mon Jul 30 17:25:45 2012 +0200 +++ b/doc-src/TutorialI/Makefile Mon Jul 30 17:37:34 2012 +0200 @@ -23,9 +23,13 @@ ../../lib/texinputs/isabelle.sty \ ../../lib/texinputs/isabellesym.sty ../pdfsetup.sty +ToyList2/ToyList.thy: ToyList2/ToyList1 ToyList2/ToyList2 + cat ToyList2/ToyList1 ToyList2/ToyList2 > ToyList2/ToyList.thy + + dvi: $(NAME).dvi -$(NAME).dvi: $(FILES) isabelle_hol.eps typedef.ps +$(NAME).dvi: $(FILES) isabelle_hol.eps typedef.ps ToyList2/ToyList.thy $(LATEX) $(NAME) $(BIBTEX) $(NAME) $(LATEX) $(NAME) @@ -35,7 +39,7 @@ pdf: $(NAME).pdf -$(NAME).pdf: $(FILES) isabelle_hol.pdf typedef.pdf +$(NAME).pdf: $(FILES) isabelle_hol.pdf typedef.pdf ToyList2/ToyList.thy $(PDFLATEX) $(NAME) $(BIBTEX) $(NAME) $(PDFLATEX) $(NAME) diff -r b34ff75c23a7 -r 795d38a6dab3 doc-src/TutorialI/ToyList2/ToyList.thy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc-src/TutorialI/ToyList2/ToyList.thy Mon Jul 30 17:37:34 2012 +0200 @@ -0,0 +1,37 @@ +theory ToyList +imports Datatype +begin + +datatype 'a list = Nil ("[]") + | Cons 'a "'a list" (infixr "#" 65) + +(* This is the append function: *) +primrec app :: "'a list => 'a list => 'a list" (infixr "@" 65) +where +"[] @ ys = ys" | +"(x # xs) @ ys = x # (xs @ ys)" + +primrec rev :: "'a list => 'a list" where +"rev [] = []" | +"rev (x # xs) = (rev xs) @ (x # [])" +lemma app_Nil2 [simp]: "xs @ [] = xs" +apply(induct_tac xs) +apply(auto) +done + +lemma app_assoc [simp]: "(xs @ ys) @ zs = xs @ (ys @ zs)" +apply(induct_tac xs) +apply(auto) +done + +lemma rev_app [simp]: "rev(xs @ ys) = (rev ys) @ (rev xs)" +apply(induct_tac xs) +apply(auto) +done + +theorem rev_rev [simp]: "rev(rev xs) = xs" +apply(induct_tac xs) +apply(auto) +done + +end