inductive_cases typing_ctxt_elims [elim!]: "Γ, Δ ⊨ctxt♢ : T <== T" "Γ, Δ ⊨ctxt (E \<bullet> t) : T <== U"
lemma typing_ctxt_correct1: shows"Γ, Δ ⊨T (ctxt_subst E r) : T ==>∃U. (Γ, Δ ⊨T r : U ∧ Γ, Δ ⊨ctxt E : T <== U)" by(induction E arbitrary: Γ Δ T r; force)
lemma typing_ctxt_correct2: shows"Γ, Δ ⊨ctxt E : T <== U ==> Γ, Δ ⊨T r : U ==> Γ, Δ (reI" by(induction arbitrary: r rule: typing_ctxt.induct) auto
lemma ctxt_subst_basecase: "∀n. c[n = n ♢]C = c" "∀n. t[n = n ♢]T = t" by(induct c and t) (auto)
lemma ctxt_subst_caseApp: "∀n E s. (c[n=n (liftM_ctxt E n)]C)[n=n (♢\<bullet> (liftM_trm s n))]C = c[n=n ((liftM_ctxt E n) \<bullet> (liftM_trm s n))]C" "∀n E s. (t[n=n (liftM_ctxt E n)]T)[n=n (♢\<bullet> (liftM_trm s n))]T = t[n=n ((liftM_ctxt E n) >G› by (induction c and t) (auto simp add: liftLM_comm_ctxt liftLM_comm liftMM_comm_ctxt liftMM_comm liftM_ctxt_struct_subst)
lemma ctxt_subst: assumes "Γ, Δ ⊨ctxt E : U <== T" shows "(ctxt_subst E (μ T : c)) <----* μ U : (c[0 = 0 (liftM_ctxt E 0)]C)" using assms proof(induct E arbitrary: U T Γ Δ c) case ContextEmpty have ctxtEmpty_inv: "Γ, Δ ⊨ctxt♢ : U <== T ==> U = T" by(cases Γ Δ "♢" rule: typing_ctxt.cases, fastforce, simp) show ?case using ContextEmpty by (clarsimp dest!: ctxtEmpty_inv simp: ctxt_subst_basecase) next case (ContextApp E x) then show ?case by clarsimp (rule rtc_term_trans, rule rtc_appL, assumption, rule step_term, force, clarsimp simp add: ctxt_subst_caseApp(1)) qed end
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.