Qcert.NNRC.Typing.TcNNRC


Section TcNNRC.


Typing rules for NNRC
  Section typ.

    Context {m:basic_model}.

    Inductive nnrc_type : tbindings nnrc rtype Prop :=
    | TNNRCVar {τ} tenv v : lookup equiv_dec tenv v = Some τ nnrc_type tenv (NNRCVar v) τ
    | TNNRCConst {τ} tenv c : data_type (normalize_data brand_relation_brands c) τ nnrc_type tenv (NNRCConst c) τ
    | TNNRCBinop τ τ} tenv b e1 e2 :
        binOp_type b τ τ τ
        nnrc_type tenv e1 τ
        nnrc_type tenv e2 τ
        nnrc_type tenv (NNRCBinop b e1 e2) τ
    | TNNRCUnop τ} tenv u e1 :
        unaryOp_type u τ τ
        nnrc_type tenv e1 τ
        nnrc_type tenv (NNRCUnop u e1) τ
    | TNNRCLet τ} v tenv e1 e2 :
        nnrc_type tenv e1 τ
        nnrc_type ((v,τ)::tenv) e2 τ
        nnrc_type tenv (NNRCLet v e1 e2) τ
    | TNNRCFor τ} v tenv e1 e2 :
        nnrc_type tenv e1 (Coll τ)
        nnrc_type ((v,τ)::tenv) e2 τ
        nnrc_type tenv (NNRCFor v e1 e2) (Coll τ)
    | TNNRCIf {τ} tenv e1 e2 e3 :
        nnrc_type tenv e1 Bool
        nnrc_type tenv e2 τ
        nnrc_type tenv e3 τ
        nnrc_type tenv (NNRCIf e1 e2 e3) τ
    | TNNRCEither {τ τl τr} tenv ed xl el xr er :
        nnrc_type tenv ed (Either τl τr)
        nnrc_type ((xl,τl)::tenv) el τ
        nnrc_type ((xr,τr)::tenv) er τ
        nnrc_type tenv (NNRCEither ed xl el xr er) τ.

  End typ.

Main lemma for the type correctness of NNNRC