subsection ‹Reduction relation›
theory Reduction
imports Substitution
begin
inductive red_term :: "[trm, trm] → bool" (infixl ‹<----› 50)
and red_cmd :: "[cmd, cmd] → bool" (infixl ‹C<----› 50)
where
beta [intro]: "(λ T : t)🚫r <---- t[r/0]T" |
struct [intro]: "(μ (T1→T2) : c)🚫s <---- μ T2 : (c[0 = 0 (♢ \<bullet> (liftM_trm s 0))]C)" |
rename [intro]: "[ 0 ∉ (fmv_trm t 0) ] ==> (μ T : (<0> t)) <---- dropM_trm t 0" |
mueta [intro]: "<i> (μ T : c) C<---- (dropM_cmd (c[0 = i ♢]C) i)" |
lambda [intro]: "[ s <---- t ] ==> (λ T : s) <---- (λ T : t)" |
appL [intro]: "[ s <---- u ] ==> (s🚫t) <---- (u🚫t)" |
appR [intro]: "[ t <---- u ] ==> (s🚫t) <---- (s🚫u)" |
mu [intro]: "[ c C<---- d ] ==> (μ T : c) <---- (μ T : d)" |
cmd [intro]: "[ t <---- s ] ==> (<i> t) C<---- (<i> s)"
inductive_cases redE [elim]:
"`i <---- s"
"(λ T : t) <---- s"
"s🚫t <---- u"
"(μ T : c) <---- t"
"<i> t C<---- c"
text‹Reflexive transitive closure›
inductive beta_rtc_term :: "[trm, trm] → bool" (infixl ‹<----*› 50) where
refl_term [iff]: "s <----* s" |
step_term: "[s <---- t; t <----* u] ==> s <----* u"
lemma step_term2: "[s <----* t; t <---- u] ==> s <----* u"
by (induct rule: beta_rtc_term.induct) (auto intro: step_term)
inductive beta_rtc_command :: "[cmd, cmd] → bool" (infixl ‹C<----*› 50) where
refl_command [iff]: "c C<----* c" |
step_command: "c C<---- d ==> d C<----* e ==> c C<----* e"
text‹The beta reduction relation is included in the reflexive transitive closure.›
lemma rtc_term_incl [intro]: "s <---- t ==> s <----* t"
by (meson beta_rtc_term.simps)
lemma [intro]: "c C<---- d ==> c C<----* d"
by(auto intro: step_command)
text‹Proof that the reflexive transitive closure as defined above is transitive.›
lemma rtc_term_trans [intro]: "s <----* t ==> t <----* u ==> s <----* u"
by(induction rule: beta_rtc_term.induct) (auto simp add: step_term)
lemma rtc_command_trans[intro]: "c C<----* d ==> d C<----* e ==> c C<----* e"
by(induction rule: beta_rtc_command.induct) (auto simp add: step_command)
text‹Congruence rules for the reflexive transitive closure.›
lemma rtc_lambda: "s <----* t ==> (λ T : s) <----* (λ T : t)"
apply(induction rule: beta_rtc_term.induct)
by force (meson red_term_red_cmd.lambda step_term)
lemma rtc_appL: "s <----* u ==> (s🚫t) <----* (u🚫t)"
apply(induction rule: beta_rtc_term.induct)
by force (meson appL step_term)
end
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-11-04)
¤
*© Formatika GbR, Deutschland