aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2018-08-06 18:41:55 -0400
committerGravatar Jason Gross <jagro@google.com>2018-08-06 18:41:55 -0400
commit3b04098583a76443caa18e42b128c3e41ae5893d (patch)
treee65daafef850f8d4f43c68325c9fc31803b4550a /src
parenta8015c7f9e176fba282052c13fe69cb53da939dd (diff)
Add type.related_hetero3
Diffstat (limited to 'src')
-rw-r--r--src/Experiments/NewPipeline/Language.v10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Experiments/NewPipeline/Language.v b/src/Experiments/NewPipeline/Language.v
index 6c18a75fc..26fe9eac6 100644
--- a/src/Experiments/NewPipeline/Language.v
+++ b/src/Experiments/NewPipeline/Language.v
@@ -121,6 +121,16 @@ Module Compilers.
| arrow s d => respectful_hetero _ _ _ _ (@related_hetero _ _ _ R s) (fun _ _ => @related_hetero _ _ _ R d)
end%signature.
+ Fixpoint related_hetero3 {base_type} {base_interp1 base_interp2 base_interp3 : base_type -> Type}
+ (R : forall t, base_interp1 t -> base_interp2 t -> base_interp3 t -> Prop) {t : type base_type}
+ : interp base_interp1 t -> interp base_interp2 t -> interp base_interp3 t -> Prop
+ := match t with
+ | base t => R t
+ | arrow s d
+ => fun f g h
+ => forall x y z, @related_hetero3 _ _ _ _ R s x y z -> @related_hetero3 _ _ _ _ R d (f x) (g y) (h z)
+ end.
+
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