aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2018-07-30 21:38:32 -0400
committerGravatar Jason Gross <jagro@google.com>2018-07-30 21:38:32 -0400
commit1642bda6e4b145037de99c0aa352e5ce5e3b1f8a (patch)
tree3479ffb071dd2a6253275c4d56d02f230e969b81 /src
parentba1c9ac7fcee0de276433b55b9eddfae32f28fe6 (diff)
Add type.related_hetero
Diffstat (limited to 'src')
-rw-r--r--src/Experiments/NewPipeline/Language.v8
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