Proof of Type Safety |
Require Import Calculus.
Require Import Arith.
Require Import MatchCompNat.
Require Import List.
Require Import Relations.
Module SetProgram(My_Program: Program).
Import My_Program.
Require Proofs_SubjectReduction.
Module My_Proofs_SubjectReduction := Proofs_SubjectReduction.SetProgram(My_Program).
Import My_Proofs_SubjectReduction.
Import My_Proofs_SubstitutionLemmas3.
Import My_Proofs_SubstitutionLemmas2.
Import My_Proofs_SubstitutionLemmas.
Import My_Proofs_DeBruijnSIndices.
Import My_Proofs_Progress.
Import My_Proofs_AdmissibilityOfTransitivity.
Import My_Proofs_Subclassing.
Import My_Proofs_TypeOrdering.
Import My_Proofs_Miscellaneous.
Import My_WellFormedness.
Import My_Semantics.
Import My_Typing.
Import My_TypeOrdering.
Import My_DeBruijn.
Import My_Substitutions.
Import My_Subclassing.
| Reflexive transitive closure of the reduction relation |
Definition Red_term_star :=
(clos_refl_trans _ Red_term)
.
| Multi-step subject reduction |
Lemma lemmaA41:
forall (T: type) (t u: Term),
(Typing rootEnv t T) ->
(Red_term_star t u) ->
(Typing rootEnv u T)
.
| Soundness |
Lemma lemmaA42:
forall (t: Term),
(Red_term_star main t) ->
(term_evaluated t) \/ (exists u: Term, (Red_term t u))
.
End SetProgram.