diff --git a/coq/_CoqProject b/coq/_CoqProject index f4fd193..48aa4ab 100644 --- a/coq/_CoqProject +++ b/coq/_CoqProject @@ -6,5 +6,5 @@ subtype.v typing.v morph.v smallstep.v +soundness.v bbencode.v - diff --git a/coq/soundness.v b/coq/soundness.v new file mode 100644 index 0000000..4547e6f --- /dev/null +++ b/coq/soundness.v @@ -0,0 +1,83 @@ +From Coq Require Import Strings.String. +Require Import terms. +Require Import subst. +Require Import equiv. +Require Import subtype. +Require Import smallstep. +Require Import typing. + +Include Terms. +Include Subst. +Include Equiv. +Include Subtype. +Include Smallstep. +Include Typing. + + +Module Soundness. + +(* e is stuck when it is neither a value, nor can it be reduced *) +Definition is_stuck (e:expr_term) : Prop := + ~(is_value e) -> + ~(exists e', e -->β e') +. + +(* every exactly typed term is not stuck *) +Lemma exact_progress : + forall (e:expr_term), + (is_exactly_typed e) -> ~(is_stuck e) +. +Proof. + +Admitted. + +(* every well typed term is not stuck *) +Lemma progress : + forall (e:expr_term), + (is_well_typed e) -> ~(is_stuck e) +. +Proof. + +Admitted. + +(* reduction step preserves the type *) +Lemma exact_preservation : + forall Γ e e' τ, + (Γ |- e \is τ) -> + (e -->β e') -> + (Γ |- e' \is τ) +. +Proof. +(* + intros. + generalize dependent e'. + induction H. + intros e' I. + inversion I. + *) +Admitted. + + +(* reduction step preserves well-typedness *) +Lemma preservation : + forall Γ e e' τ, + (Γ |- e \compatible τ) -> + (e -->β e') -> + (Γ |- e' \compatible τ) +. +Proof. +Admitted. + +(* every well-typed expression can be reduced to a value *) +Theorem soundness : + forall (e:expr_term), + (is_well_typed e) -> + (exists e', e -->β* e' /\ (is_value e')) +. +Proof. + intros. + +Admitted. + +End Soundness. +