Reasoning Details

 < 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.
Back to example home