Theory Progress
subsection‹Progress›
theory Progress
imports TypePreservation
begin
text‹We say that a term $t$ is in \emph{weak-head-normal} form when one of the following conditions are met:
\begin{enumerate}
\item $t$ is a value,
\item there exists $\alpha$ and $v$ such that $t = \mu:\tau.[\alpha]\ v$ with $\alpha \in fcv(v)$
whenever $\alpha = 0$.
\end{enumerate}›
fun (sequential) is_nf :: "trm ⇒ bool" where
"is_nf (μ U: (<β> v)) = (is_val v ∧ (β = 0 ⟶ 0 ∈ fmv_trm v 0))" |
"is_nf v = is_val v"
lemma progress':
"Γ, Δ ⊢⇩T t : T ⟹ lambda_closed t ⟹ (∀ s. ¬(t ⇢ s)) ⟹ is_nf t"
"Γ, Δ ⊢⇩C c ⟹ lambda_closedC c ⟹ (∀ β t. c = (<β> t) ⟶ (∀ d. ¬(t ⇢ d)) ⟶ is_nf t)"
proof (induct rule: typing_trm_typing_cmd.inducts)
case (app Γ Δ t T1 T2 s)
then show ?case
by -(erule type_arrow_elim; force)
next
case (activate Γ Δ T c)
then show ?case
proof(cases c)
case (MVar α t)
then show ?thesis
using activate by (case_tac t; force)
qed
qed force+
theorem progress:
assumes "Γ, Δ ⊢⇩T t : T" "lambda_closed t"
shows "is_nf t ∨ (∃ s. t ⇢ s)"
using assms by (fastforce intro: progress')
end