Qcert.Basic.Typing.ForeignDataTyping


Section ForeignDataTyping.


  Class foreign_data_typing
        {fdata:foreign_data}
        {ftype:foreign_type}
    : Type
    := mk_foreign_data_typing {
           foreign_data_typing_has_type
             (d:foreign_data_type)
             (τ:foreign_type_type) : Prop
           ; foreign_data_typing_normalized
               {d:foreign_data_type}
               {τ:foreign_type_type} :
               foreign_data_typing_has_type d τ
               foreign_data_normalized d
           ; foreign_data_typing_subtype
               {d:foreign_data_type}
               {τ τ:foreign_type_type} :
               foreign_data_typing_has_type d τ
               τ τ
               foreign_data_typing_has_type d τ
           ; foreign_data_typing_meet
               {d:foreign_data_type}
               {τ τ:foreign_type_type} :
               foreign_data_typing_has_type d τ
               foreign_data_typing_has_type d τ
               foreign_data_typing_has_type d (τ τ)
           ; foreign_data_typing_infer (d:foreign_data_type)
             : option foreign_type_type
           ; foreign_data_typing_infer_normalized {d} :
               foreign_data_normalized d
               {τ | foreign_data_typing_infer d = Some τ}
           ; foreign_data_typing_infer_correct {d τ} :
               foreign_data_typing_infer d = Some τ
               foreign_data_typing_has_type d τ
           ; foreign_data_typing_infer_least {d τ τ} :
               foreign_data_typing_infer d = Some τ
               foreign_data_typing_has_type d τ
               τ τ
         }.

  Theorem foreign_data_typing_infer_complete
        {fdata:foreign_data}
        {ftype:foreign_type}
        {ftyping:foreign_data_typing}
          {d τ} :
      foreign_data_typing_has_type d τ {τ' | foreign_data_typing_infer d = Some τ'}.

End ForeignDataTyping.