< Module walkthrough:big_step.
< Prove walkthrough:host:typeOf_unique.
Proof completed.
< Prove walkthrough:host:ty_lookup.
Proof completed.
< Prove walkthrough:host:subst_type_preservation.
Proof completed.
< Prove walkthrough:host:type_preservation.
Proof completed.
< Prove_Constraint walkthrough:host:proj_type_same.
Proof completed.
< Add_Ext_Size walkthrough:host:eval.
Proof completed.
< Add_Proj_Rel walkthrough:host:eval.
Proof completed.
< Prove_Ext_Ind walkthrough:host:eval.
Proof completed.
< Extensible_Theorem
big_step_type_preservation : forall T Ty T',
Ty : typeOf [] T Ty ->
Big : big_step T T' ->
typeOf [] T' Ty
on Big.
Subgoal 1:
Variables: Ty T'
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] T' Ty
Big : big_step T' T' @
Big1 : value T'
============================
typeOf [] T' Ty
< search.
Subgoal 2:
Variables: T Ty T' T3
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] T Ty
Big : big_step T T' @
Big1 : eval T T3
Big2 : big_step T3 T' *
============================
typeOf [] T' Ty
< apply type_preservation to Ty Big1.
Subgoal 2:
Variables: T Ty T' T3
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] T Ty
Big : big_step T T' @
Big1 : eval T T3
Big2 : big_step T3 T' *
H1 : typeOf [] T3 Ty
============================
typeOf [] T' Ty
< apply IH to _ Big2.
Subgoal 2:
Variables: T Ty T' T3
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] T Ty
Big : big_step T T' @
Big1 : eval T T3
Big2 : big_step T3 T' *
H1 : typeOf [] T3 Ty
H2 : typeOf [] T' Ty
============================
typeOf [] T' Ty
< search.
Subgoal 3:
Variables: Ty T' T_T
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] <unknown I tm> Ty
Big : big_step <unknown I tm> T' @
Big1 : [] |{tm}- <unknown I tm> ~~> T_T
Big2 : big_step T_T T' *
============================
typeOf [] T' Ty
< apply proj_type_same to Big1 Ty.
Subgoal 3:
Variables: Ty T' T_T
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] <unknown I tm> Ty
Big : big_step <unknown I tm> T' @
Big1 : [] |{tm}- <unknown I tm> ~~> T_T
Big2 : big_step T_T T' *
H1 : typeOf [] T_T Ty
============================
typeOf [] T' Ty
< apply IH to _ Big2.
Subgoal 3:
Variables: Ty T' T_T
IH : forall T Ty T', typeOf [] T Ty -> big_step T T' * -> typeOf [] T' Ty
Ty : typeOf [] <unknown I tm> Ty
Big : big_step <unknown I tm> T' @
Big1 : [] |{tm}- <unknown I tm> ~~> T_T
Big2 : big_step T_T T' *
H1 : typeOf [] T_T Ty
H2 : typeOf [] T' Ty
============================
typeOf [] T' Ty
< search.
Proof completed.