Qcert.NRAEnv.Typing.TNRAEnv


Section TNRAEnv.




Typing for NRA
  Section typ.
    Context {m:basic_model}.
    Contextconstants:list (string×rtype)).
    Definition nraenv_type (q:nraenv) : rtype rtype rtype Prop :=
      @cnraenv_type m τconstants (cnraenv_of_nraenv q).

  End typ.

  Notation "Op ▷ₓ A >=> B ⊣ C ; E" := (nraenv_type C Op E A B) (at level 70).

Type lemmas for individual algebraic expressions

  Section prop.
    Context {m:basic_model}.

Main typing soundness theorem for the NRA

    Lemma typed_nraenv_yields_typed_cnraenvc τenv τin τout} (op:nraenv):
      (op ▷ₓ τin >=> τout τc;τenv) cnraenv_type τc (cnraenv_of_nraenv op) τenv τin τout.

    Lemma typed_cnraenv_yields_typed_nraenvc τenv τin τout} (op:nraenv):
      cnraenv_type τc (cnraenv_of_nraenv op) τenv τin τout (op ▷ₓ τin >=> τout τc;τenv).

    Theorem typed_cnraenv_iff_typed_nraenvc τenv τin τout} (op:nraenv):
      (op ▷ₓ τin >=> τout τc;τenv) cnraenv_type τc (cnraenv_of_nraenv op) τenv τin τout.

    Theorem typed_nraenv_yields_typed_datac τenv τin τout} c (env:data) (d:data) (op:nraenv):
      bindings_type c τc
      (env τenv) (d τin) (op ▷ₓ τin >=> τout τc;τenv)
      ( x, (nraenv_eval brand_relation_brands c op env d = Some x (x τout))).

Corrolaries of the main type soudness theorem

    Definition typed_nraenv_totalc τenv τin τout} (op:nraenv) (HOpT: op ▷ₓ τin >=> τout τc;τenv) c (env:data) (d:data):
      bindings_type c τc
      (env τenv)
      (d τin)
      { x:data | x τout }.

    Definition tnraenv_evalc τenv τin τout} (op:nraenv) (HOpT: op ▷ₓ τin >=> τout τc;τenv) c (env:data) (d:data):
      bindings_type c τc
      (env τenv) (d τin) data.
  End prop.

End TNRAEnv.


Notation "Op ▷ₓ A >=> B ⊣ C ; E" := (nraenv_type C Op E A B) (at level 70).
Notation "Op @▷ₓ d ⊣ C ; e" := (tnraenv_eval C Op e d) (at level 70).