theory Demo2 = Main: text "lambda terms" term "\x. x" text "alpha" thm refl lemma "(\x. x) = (\y. y)" apply (rule refl) done text "eta" term "\x. f x" text "beta" term "(\x. x y) t" text "beta with renaming" term "(\z. (\x. f x z)) x" text "definitions and unfold" constdefs c_0 :: "('a \ 'a) \ 'a \ 'a" "c_0 \ \f x. x" c_1 :: "('a \ 'a) \ 'a \ 'a" "c_1 \ \f x. f x" c_2 :: "('a \ 'a) \ 'a \ 'a" "c_2 \ \f x. f (f x)" c_3 :: "('a \ 'a) \ 'a \ 'a" "c_3 \ \f x. f (f (f x))" succ :: "(('a \ 'a) \ 'a \ 'a) \ ('a \ 'a) \ 'a \ 'a" "succ \ \n f x. f (n f x)" add :: "(('a \ 'a) \ 'a \ 'a) \ (('a \ 'a) \ 'a \ 'a) \ ('a \ 'a) \ 'a \ 'a" "add \ \m n f x. m f (n f x)" text "unfolding a definiton" lemma "c_0 = (\f x. x)" apply (unfold c_0_def) apply (rule refl) done lemma "succ (succ c_0) = c_2" apply (unfold succ_def c_0_def c_2_def) apply (rule refl) done lemma "add c_2 c_2 = succ c_3" apply (unfold add_def succ_def c_3_def c_2_def c_1_def) apply (rule refl) done end