diff options
author | Jason Gross <jagro@google.com> | 2018-07-30 21:38:32 -0400 |
---|---|---|
committer | Jason Gross <jagro@google.com> | 2018-07-30 21:38:32 -0400 |
commit | 1642bda6e4b145037de99c0aa352e5ce5e3b1f8a (patch) | |
tree | 3479ffb071dd2a6253275c4d56d02f230e969b81 /src | |
parent | ba1c9ac7fcee0de276433b55b9eddfae32f28fe6 (diff) |
Add type.related_hetero
Diffstat (limited to 'src')
-rw-r--r-- | src/Experiments/NewPipeline/Language.v | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Experiments/NewPipeline/Language.v b/src/Experiments/NewPipeline/Language.v index 5fa3a25bd..6c18a75fc 100644 --- a/src/Experiments/NewPipeline/Language.v +++ b/src/Experiments/NewPipeline/Language.v @@ -113,6 +113,14 @@ Module Compilers. Notation eqv := (@related _ _ (fun _ => eq)). + Fixpoint related_hetero {base_type} {base_interp1 base_interp2 : base_type -> Type} + (R : forall t, base_interp1 t -> base_interp2 t -> Prop) {t : type base_type} + : interp base_interp1 t -> interp base_interp2 t -> Prop + := match t with + | base t => R t + | arrow s d => respectful_hetero _ _ _ _ (@related_hetero _ _ _ R s) (fun _ _ => @related_hetero _ _ _ R d) + end%signature. + Fixpoint app_curried {base_type} {f : base_type -> Type} {t : type base_type} : interp f t -> for_each_lhs_of_arrow (interp f) t -> f (final_codomain t) := match t with |