diff -r 6f2951938b66 -r 7648ac4a6b95 doc-src/TutorialI/Overview/FP1.thy --- a/doc-src/TutorialI/Overview/FP1.thy Fri Jan 04 19:23:28 2002 +0100 +++ b/doc-src/TutorialI/Overview/FP1.thy Fri Jan 04 19:24:43 2002 +0100 @@ -23,15 +23,15 @@ primrec "sum 0 = 0" "sum (Suc n) = Suc n + sum n" -lemma "sum n + sum n = n*(Suc n)"; -apply(induct_tac n); -apply(auto); +lemma "sum n + sum n = n*(Suc n)" +apply(induct_tac n) +apply(auto) done lemma "\ \ m < n; m < n+1 \ \ m = n" by(auto) -lemma "min i (max j k) = max (min k i) (min i (j::nat))"; +lemma "min i (max j k) = max (min k i) (min i (j::nat))" by(arith) lemma "n*n = n \ n=0 \ n=1" @@ -91,19 +91,19 @@ subsubsection{*Assumptions*} -lemma "\ xs @ zs = ys @ xs; [] @ xs = [] @ [] \ \ ys = zs"; -apply simp; +lemma "\ xs @ zs = ys @ xs; [] @ xs = [] @ [] \ \ ys = zs" +apply simp done -lemma "\x. f x = g (f (g x)) \ f [] = f [] @ []"; -apply(simp (no_asm)); +lemma "\x. f x = g (f (g x)) \ f [] = f [] @ []" +apply(simp (no_asm)) done subsubsection{*Rewriting with Definitions*} -lemma "xor A (\A)"; -apply(simp only:xor_def); +lemma "xor A (\A)" +apply(simp only: xor_def) by simp @@ -119,11 +119,11 @@ subsubsection{*Automatic Case Splits*} -lemma "\xs. if xs = [] then A else B"; +lemma "\xs. if xs = [] then A else B" apply simp oops -lemma "case xs @ [] of [] \ P | y#ys \ Q ys y"; +lemma "case xs @ [] of [] \ P | y#ys \ Q ys y" apply simp apply(simp split: list.split) oops @@ -134,7 +134,7 @@ lemma "\ \ m < n; m < n+1 \ \ m = n" by simp -lemma "\ m < n \ m < n+1 \ m = n"; +lemma "\ m < n \ m < n+1 \ m = n" apply simp by(arith) @@ -152,43 +152,43 @@ subsubsection{*Expressions*} -types 'v binop = "'v \ 'v \ 'v"; +types 'v binop = "'v \ 'v \ 'v" datatype ('a,'v)expr = Cex 'v | Vex 'a - | Bex "'v binop" "('a,'v)expr" "('a,'v)expr"; + | Bex "'v binop" "('a,'v)expr" "('a,'v)expr" -consts value :: "('a,'v)expr \ ('a \ 'v) \ 'v"; +consts value :: "('a,'v)expr \ ('a \ 'v) \ 'v" primrec "value (Cex v) env = v" "value (Vex a) env = env a" -"value (Bex f e1 e2) env = f (value e1 env) (value e2 env)"; +"value (Bex f e1 e2) env = f (value e1 env) (value e2 env)" subsubsection{*The Stack Machine*} datatype ('a,'v) instr = Const 'v | Load 'a - | Apply "'v binop"; + | Apply "'v binop" -consts exec :: "('a,'v)instr list \ ('a\'v) \ 'v list \ 'v list"; +consts exec :: "('a,'v)instr list \ ('a\'v) \ 'v list \ 'v list" primrec "exec [] s vs = vs" "exec (i#is) s vs = (case i of Const v \ exec is s (v#vs) | Load a \ exec is s ((s a)#vs) - | Apply f \ exec is s ((f (hd vs) (hd(tl vs)))#(tl(tl vs))))"; + | Apply f \ exec is s ((f (hd vs) (hd(tl vs)))#(tl(tl vs))))" subsubsection{*The Compiler*} -consts comp :: "('a,'v)expr \ ('a,'v)instr list"; +consts comp :: "('a,'v)expr \ ('a,'v)instr list" primrec "comp (Cex v) = [Const v]" "comp (Vex a) = [Load a]" -"comp (Bex f e1 e2) = (comp e2) @ (comp e1) @ [Apply f]"; +"comp (Bex f e1 e2) = (comp e2) @ (comp e1) @ [Apply f]" -theorem "exec (comp e) s [] = [value e s]"; +theorem "exec (comp e) s [] = [value e s]" oops @@ -204,11 +204,11 @@ | Num nat and 'a bexp = Less "'a aexp" "'a aexp" | And "'a bexp" "'a bexp" - | Neg "'a bexp"; + | Neg "'a bexp" consts evala :: "'a aexp \ ('a \ nat) \ nat" - evalb :: "'a bexp \ ('a \ nat) \ bool"; + evalb :: "'a bexp \ ('a \ nat) \ bool" primrec "evala (IF b a1 a2) env = @@ -237,8 +237,8 @@ lemma substitution_lemma: "evala (substa s a) env = evala a (\x. evala (s x) env) \ - evalb (substb s b) env = evalb b (\x. evala (s x) env)"; -apply(induct_tac a and b); + evalb (substb s b) env = evalb b (\x. evala (s x) env)" +apply(induct_tac a and b) by simp_all @@ -251,7 +251,7 @@ consts mirror :: "tree \ tree" -mirrors:: "tree list \ tree list"; +mirrors:: "tree list \ tree list" primrec "mirror(C ts) = C(mirrors ts)"