aboutsummaryrefslogtreecommitdiff
path: root/src/Reflection/EtaInterp.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-02-21 21:35:15 -0500
committerGravatar Jason Gross <jgross@mit.edu>2017-02-21 21:35:15 -0500
commit57a0a97fdbeee2954128d0917d534a7ed8c433cb (patch)
tree14a267c94f5381965d02db5c45461e2283158e27 /src/Reflection/EtaInterp.v
parent371ba4b6eb769d3a9a4518df5d4063cf57a6396b (diff)
Add various reflection improvements, boundbycast
Diffstat (limited to 'src/Reflection/EtaInterp.v')
-rw-r--r--src/Reflection/EtaInterp.v33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/Reflection/EtaInterp.v b/src/Reflection/EtaInterp.v
index 95732ad3d..54240947a 100644
--- a/src/Reflection/EtaInterp.v
+++ b/src/Reflection/EtaInterp.v
@@ -1,5 +1,6 @@
Require Import Crypto.Reflection.Syntax.
Require Import Crypto.Reflection.Eta.
+Require Import Crypto.Reflection.Relations.
Require Import Crypto.Reflection.ExprInversion.
Require Import Crypto.Util.Tactics.BreakMatch.
Require Import Crypto.Util.Tactics.DestructHead.
@@ -37,11 +38,31 @@ Section language.
(* Local *) Hint Rewrite @eq_interp_flat_type_eta_gen.
+ Section gen_type.
+ Context (exprf_eta : forall {t} (e : exprf t), exprf t)
+ (eq_interp_exprf_eta : forall t e, interpf (@interp_op) (@exprf_eta t e) = interpf (@interp_op) e).
+ Lemma interp_expr_eta_gen {t e}
+ : interp_type_gen_rel_pointwise
+ (fun _ => eq)
+ (interp (@interp_op) (expr_eta_gen eta exprf_eta (t:=t) e))
+ (interp (@interp_op) e).
+ Proof. t. Admitted.
+ End gen_type.
+ (* Local *) Hint Rewrite @interp_expr_eta_gen.
+
Lemma interpf_exprf_eta_gen {t e}
: interpf (@interp_op) (exprf_eta_gen eta (t:=t) e) = interpf (@interp_op) e.
Proof. induction e; t. Qed.
+
+ Lemma InterpExprEtaGen {t e}
+ : interp_type_gen_rel_pointwise
+ (fun _ => eq)
+ (Interp (@interp_op) (ExprEtaGen eta (t:=t) e))
+ (Interp (@interp_op) e).
+ Proof. apply interp_expr_eta_gen; intros; apply interpf_exprf_eta_gen. Qed.
End gen_flat_type.
(* Local *) Hint Rewrite @eq_interp_flat_type_eta_gen.
+ (* Local *) Hint Rewrite @interp_expr_eta_gen.
(* Local *) Hint Rewrite @interpf_exprf_eta_gen.
Lemma eq_interp_flat_type_eta {var t T f} x
@@ -60,4 +81,16 @@ Section language.
: interpf (@interp_op) (exprf_eta' (t:=t) e) = interpf (@interp_op) e.
Proof. t. Qed.
(* Local *) Hint Rewrite @interpf_exprf_eta'.
+ Lemma interp_expr_eta {t e}
+ : interp_type_gen_rel_pointwise (fun _ => eq) (interp (@interp_op) (expr_eta (t:=t) e)) (interp (@interp_op) e).
+ Proof. t. Qed.
+ Lemma interp_expr_eta' {t e}
+ : interp_type_gen_rel_pointwise (fun _ => eq) (interp (@interp_op) (expr_eta' (t:=t) e)) (interp (@interp_op) e).
+ Proof. t. Qed.
+ Lemma InterpExprEta {t e}
+ : interp_type_gen_rel_pointwise (fun _ => eq) (Interp (@interp_op) (ExprEta (t:=t) e)) (Interp (@interp_op) e).
+ Proof. apply interp_expr_eta. Qed.
+ Lemma InterpExprEta' {t e}
+ : interp_type_gen_rel_pointwise (fun _ => eq) (Interp (@interp_op) (ExprEta' (t:=t) e)) (Interp (@interp_op) e).
+ Proof. apply interp_expr_eta'. Qed.
End language.