Library TypeSafety


Type safety


Require Import List.
Require Import Relations.

Require Import Util.

Require Syntax.
Module SetProgram(My_Program: Syntax.Program).
Import My_Program.

Require SubjectReduction_proofs.
Module My_SubjectReduction_proofs := SubjectReduction_proofs.SetProgram(My_Program).
Import My_SubjectReduction_proofs.

Import My_SubjectReduction_preliminaries.
Import My_TermSubstitutionInTyping.
Import My_TypeSubstitutionInTyping.
Import My_BoundCompliantSubstitutions_proofs.
Import My_Progress_proofs.
Import My_TransitivityElimination_proofs.
Import My_Normalization_proofs.
Import My_Subtyping_proofs.
Import My_Typing_proofs.
Import My_Confluence.
Import My_Auxiliary_proofs.
Import My_Substitutions_proofs.
Import My_Binders_proofs.
Import My_Semantics.
Import My_WellFormedness.
Import My_Typing.
Import My_Auxiliary.
Import My_Substitutions.
Import My_Binders.


Reflexive transitive closure of the reduction relation
Definition RedTermStar :=
  (clos_refl_trans _ RedTerm)
.


Multi-step subject reduction
Lemma Subject_reduction_star:
  forall (t u: Term) (info: TermInfo),
    (Term_WT nil nil t info) ->
    (RedTermStar t u) ->
    exists info': TermInfo,
      (Term_WT nil nil u info') /\
      (SubInfo nil info' info)
.







Lemma Subject_reduction_star_cor1:
  forall (t t': Term) (T: TypeS),
    (Term_WT nil nil t (TermI T)) ->
    (RedTermStar t t') ->
    exists T': TypeS,
      (Term_WT nil nil t' (TermI T'))
.




Type safety
Lemma Type_safety:
  forall (t: Term),
    (RedTermStar mainTerm t) ->
    (evaluated_term t) \/ (exists u: Term, (RedTerm t u))
.



End SetProgram.