coq: add translate_typing
This commit is contained in:
parent
10ca08c5a0
commit
638ddf4fd1
1 changed files with 67 additions and 0 deletions
67
coq/typing.v
67
coq/typing.v
|
@ -81,6 +81,73 @@ Definition is_well_typed (e:expr_term) : Prop :=
|
|||
Γ |- e \is τ
|
||||
.
|
||||
|
||||
Inductive translate_typing : context -> expr_term -> type_term -> expr_term -> Prop :=
|
||||
| Expand_Var : forall Γ x τ,
|
||||
(Γ |- (expr_var x) \is τ) ->
|
||||
(translate_typing Γ (expr_var x) τ (expr_var x))
|
||||
|
||||
| Expand_Let : forall Γ x e e' t t' σ τ,
|
||||
(Γ |- e \is σ) ->
|
||||
((ctx_assign x σ Γ) |- t \is τ) ->
|
||||
(translate_typing Γ e σ e') ->
|
||||
(translate_typing (ctx_assign x σ Γ) t τ t') ->
|
||||
(translate_typing Γ (expr_let x e t) τ (expr_let x e' t'))
|
||||
|
||||
| Expand_TypeAbs : forall Γ α e e' τ,
|
||||
(Γ |- e \is τ) ->
|
||||
(translate_typing Γ e τ e') ->
|
||||
(translate_typing Γ
|
||||
(expr_ty_abs α e)
|
||||
(type_univ α τ)
|
||||
(expr_ty_abs α e'))
|
||||
|
||||
| Expand_TypeApp : forall Γ e e' σ α τ,
|
||||
(Γ |- e \is (type_univ α τ)) ->
|
||||
(translate_typing Γ e τ e') ->
|
||||
(translate_typing Γ (expr_ty_app e τ) (type_subst α σ τ) (expr_ty_app e' τ))
|
||||
|
||||
| Expand_Abs : forall Γ x σ e e' τ,
|
||||
((ctx_assign x σ Γ) |- e \is τ) ->
|
||||
(Γ |- (expr_abs x σ e) \is (type_fun σ τ)) ->
|
||||
(translate_typing (ctx_assign x σ Γ) e τ e') ->
|
||||
(translate_typing Γ (expr_abs x σ e) (type_fun σ τ) (expr_abs x σ e'))
|
||||
|
||||
| Expand_MorphAbs : forall Γ x σ e e' τ,
|
||||
((ctx_assign x σ Γ) |- e \is τ) ->
|
||||
(Γ |- (expr_abs x σ e) \is (type_fun σ τ)) ->
|
||||
(translate_typing (ctx_assign x σ Γ) e τ e') ->
|
||||
(translate_typing Γ (expr_morph x σ e) (type_morph σ τ) (expr_morph x σ e'))
|
||||
|
||||
| Expand_App : forall Γ f f' a a' m σ τ σ',
|
||||
(Γ |- f \is (type_fun σ τ)) ->
|
||||
(Γ |- a \is σ') ->
|
||||
(Γ |- σ' ~> σ) ->
|
||||
(translate_typing Γ f (type_fun σ τ) f') ->
|
||||
(translate_typing Γ a σ' a') ->
|
||||
(translate_morphism_path Γ σ' σ m) ->
|
||||
(translate_typing Γ (expr_app f a) τ (expr_app f' (expr_app m a')))
|
||||
|
||||
| Expand_MorphFun : forall Γ f f' σ τ,
|
||||
(Γ |- f \is (type_morph σ τ)) ->
|
||||
(Γ |- f \is (type_fun σ τ)) ->
|
||||
(translate_typing Γ f (type_morph σ τ) f') ->
|
||||
(translate_typing Γ f (type_fun σ τ) f')
|
||||
|
||||
| Expand_Ascend : forall Γ e e' τ τ',
|
||||
(Γ |- e \is τ) ->
|
||||
(τ' :<= τ) ->
|
||||
(Γ |- (expr_ascend τ' e) \is τ') ->
|
||||
(translate_typing Γ e τ e') ->
|
||||
(translate_typing Γ (expr_ascend τ' e) τ' (expr_ascend τ' e'))
|
||||
|
||||
| Expand_Descend : forall Γ e e' τ τ',
|
||||
(Γ |- e \is τ) ->
|
||||
(τ :<= τ') ->
|
||||
(Γ |- e \is τ') ->
|
||||
(translate_typing Γ e τ e') ->
|
||||
(translate_typing Γ e τ' e')
|
||||
.
|
||||
|
||||
(* Examples *)
|
||||
|
||||
Example typing1 :
|
||||
|
|
Loading…
Reference in a new issue