aboutsummaryrefslogtreecommitdiff
path: root/src/Compilers/ZExtended
diff options
context:
space:
mode:
authorGravatar Jason Gross <jgross@mit.edu>2017-10-23 13:14:47 -0400
committerGravatar Jason Gross <jgross@mit.edu>2017-10-23 13:14:47 -0400
commit39aea54d375bb13f388c5cb8302748f85abe11a8 (patch)
tree36ccd4f2da1095fb3a5a0cc1cef0d8da2e1d7abf /src/Compilers/ZExtended
parent7676ac43b762eab1606e6dfd0693f16239489263 (diff)
Add InlineConstAndOpByRewrite
Diffstat (limited to 'src/Compilers/ZExtended')
-rw-r--r--src/Compilers/ZExtended/InlineConstAndOpByRewrite.v12
-rw-r--r--src/Compilers/ZExtended/InlineConstAndOpByRewriteInterp.v15
-rw-r--r--src/Compilers/ZExtended/InlineConstAndOpByRewriteWf.v13
3 files changed, 40 insertions, 0 deletions
diff --git a/src/Compilers/ZExtended/InlineConstAndOpByRewrite.v b/src/Compilers/ZExtended/InlineConstAndOpByRewrite.v
new file mode 100644
index 000000000..418a0e0f3
--- /dev/null
+++ b/src/Compilers/ZExtended/InlineConstAndOpByRewrite.v
@@ -0,0 +1,12 @@
+Require Import Crypto.Compilers.Syntax.
+Require Import Crypto.Compilers.InlineConstAndOpByRewrite.
+Require Import Crypto.Compilers.ZExtended.Syntax.
+
+Module Export Rewrite.
+ Definition inline_const_and_opf {var} {t} (e : exprf _ _ t) : @exprf base_type op var t
+ := @inline_const_and_opf base_type op interp_base_type (@interp_op) var (@Const) t e.
+ Definition inline_const_and_op {var} {t} (e : expr _ _ t) : @expr base_type op var t
+ := @inline_const_and_op base_type op interp_base_type (@interp_op) var (@Const) t e.
+ Definition InlineConstAndOp {t} (e : Expr t) : Expr t
+ := @InlineConstAndOp base_type op interp_base_type (@interp_op) (@Const) t e.
+End Rewrite.
diff --git a/src/Compilers/ZExtended/InlineConstAndOpByRewriteInterp.v b/src/Compilers/ZExtended/InlineConstAndOpByRewriteInterp.v
new file mode 100644
index 000000000..64d5263a7
--- /dev/null
+++ b/src/Compilers/ZExtended/InlineConstAndOpByRewriteInterp.v
@@ -0,0 +1,15 @@
+Require Import Crypto.Compilers.Syntax.
+Require Import Crypto.Compilers.InlineConstAndOpByRewriteInterp.
+Require Import Crypto.Compilers.ZExtended.Syntax.
+Require Import Crypto.Compilers.ZExtended.InlineConstAndOpByRewrite.
+
+Module Export Rewrite.
+ Lemma InterpInlineConstAndOp {t} (e : Expr t)
+ : forall x, Interp (InlineConstAndOp e) x = Interp e x.
+ Proof.
+ refine (@InterpInlineConstAndOp _ _ _ _ _ t e _).
+ clear; abstract (intros []; intros; reflexivity).
+ Defined.
+
+ Hint Rewrite @InterpInlineConstAndOp : reflective_interp.
+End Rewrite.
diff --git a/src/Compilers/ZExtended/InlineConstAndOpByRewriteWf.v b/src/Compilers/ZExtended/InlineConstAndOpByRewriteWf.v
new file mode 100644
index 000000000..281bee6ab
--- /dev/null
+++ b/src/Compilers/ZExtended/InlineConstAndOpByRewriteWf.v
@@ -0,0 +1,13 @@
+Require Import Crypto.Compilers.Syntax.
+Require Import Crypto.Compilers.Wf.
+Require Import Crypto.Compilers.InlineConstAndOpByRewriteWf.
+Require Import Crypto.Compilers.ZExtended.Syntax.
+Require Import Crypto.Compilers.ZExtended.InlineConstAndOpByRewrite.
+
+Module Export Rewrite.
+ Definition Wf_InlineConstAndOp {t} (e : Expr t) (Hwf : Wf e)
+ : Wf (InlineConstAndOp e)
+ := @Wf_InlineConstAndOp _ _ _ _ _ t e Hwf.
+
+ Hint Resolve Wf_InlineConstAndOp : wf.
+End Rewrite.