diff -r a0460a450cf9 -r bbfc360db011 doc-src/TutorialI/Overview/Ind.thy --- a/doc-src/TutorialI/Overview/Ind.thy Mon Jul 01 12:50:35 2002 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -(*<*)theory Ind = Main:(*>*) - -section{*Inductive Definitions*} - - -subsection{*Even Numbers*} - -subsubsection{*The Definition*} - -consts even :: "nat set" -inductive even -intros -zero[intro!]: "0 \ even" -step[intro!]: "n \ even \ Suc(Suc n) \ even" - -lemma [simp,intro!]: "2 dvd n \ 2 dvd Suc(Suc n)" -apply (unfold dvd_def) -apply clarify -apply (rule_tac x = "Suc k" in exI, simp) -done - -subsubsection{*Rule Induction*} - -text{* Rule induction for set @{term even}, @{thm[source]even.induct}: -@{thm[display] even.induct[no_vars]}*} -(*<*)thm even.induct[no_vars](*>*) - -lemma even_imp_dvd: "n \ even \ 2 dvd n" -apply (erule even.induct) -apply simp_all -done - -subsubsection{*Rule Inversion*} - -inductive_cases Suc_Suc_case [elim!]: "Suc(Suc n) \ even" -text{* @{thm[display] Suc_Suc_case[no_vars]} *} -(*<*)thm Suc_Suc_case(*>*) - -lemma "Suc(Suc n) \ even \ n \ even" -by blast - - -subsection{*Mutually Inductive Definitions*} - -consts evn :: "nat set" - odd :: "nat set" - -inductive evn odd -intros -zero: "0 \ evn" -evnI: "n \ odd \ Suc n \ evn" -oddI: "n \ evn \ Suc n \ odd" - -lemma "(m \ evn \ 2 dvd m) \ (n \ odd \ 2 dvd (Suc n))" -apply(rule evn_odd.induct) -by simp_all - - -subsection{*The Reflexive Transitive Closure*} - -consts rtc :: "('a \ 'a)set \ ('a \ 'a)set" ("_*" [1000] 999) -inductive "r*" -intros -rtc_refl[iff]: "(x,x) \ r*" -rtc_step: "\ (x,y) \ r; (y,z) \ r* \ \ (x,z) \ r*" - -lemma [intro]: "(x,y) : r \ (x,y) \ r*" -by(blast intro: rtc_step); - -lemma rtc_trans: "\ (x,y) \ r*; (y,z) \ r* \ \ (x,z) \ r*" -apply(erule rtc.induct) -oops - -lemma rtc_trans[rule_format]: - "(x,y) \ r* \ (y,z) \ r* \ (x,z) \ r*" -apply(erule rtc.induct) - apply(blast); -apply(blast intro: rtc_step); -done - -text{* -\begin{exercise} -Show that the converse of @{thm[source]rtc_step} also holds: -@{prop[display]"[| (x,y) : r*; (y,z) : r |] ==> (x,z) : r*"} -\end{exercise}*} - -subsection{*The accessible part of a relation*} - -consts acc :: "('a \ 'a) set \ 'a set" -inductive "acc r" -intros - "(\y. (y,x) \ r \ y \ acc r) \ x \ acc r" - -lemma "wf{(x,y). (x,y) \ r \ y \ acc r}" -thm wfI -apply(rule_tac A = "acc r" in wfI) - apply (blast elim: acc.elims) -apply(simp(no_asm_use)) -thm acc.induct -apply(erule acc.induct) -by blast - -consts accs :: "('a \ 'a) set \ 'a set" -inductive "accs r" -intros - "r``{x} \ Pow(accs r) \ x \ accs r" -monos Pow_mono - -(*<*)end(*>*)