Library MetaRocq.Template.TemplateProgram

Definition of programs in template-rocq, well-typed terms and provided transformations


From MetaRocq.Utils Require Import utils.

From MetaRocq.Common Require Export config Transform.

From MetaRocq.Template Require Import
        Ast (* The term AST *)
        Typing (* Typing judgment *)
        WcbvEval
        TemplateEnvMap.

Definition template_program := Ast.Env.program.

Definition template_program_env := (TemplateEnvMap.GlobalEnvMap.t × Ast.term).

Well-typedness of template programs
Evaluation relation on template programs
Well-typedness of template programs with efficient environments
Evaluation relation on template programs
We kludge the normalization assumptions by parameterizing over a continuation of "what will be done to the program later" as well as what properties we'll need of it

Program Definition build_template_program_env {cf : checker_flags} K :
  Transform.t global_env GlobalEnvMap.t Ast.term Ast.term Ast.term Ast.term eval_template_program eval_template_program_env :=
  {| name := "rebuilding environment lookup table";
     pre p := wt_template_program p pf, K (GlobalEnvMap.make p.1 (wt_template_program_fresh p pf)) : Prop ;
     transform p pre := make_template_program_env p (proj1 pre);
     post p := wt_template_program_env p K p.1;
     obseq g preg g' v v' := v = v' |}.
Next Obligation.
  cbn. v. cbn; split; auto.
Qed.