aboutsummaryrefslogtreecommitdiff
path: root/src/Experiments/NewPipeline/LanguageInversion.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/Experiments/NewPipeline/LanguageInversion.v')
-rw-r--r--src/Experiments/NewPipeline/LanguageInversion.v27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/Experiments/NewPipeline/LanguageInversion.v b/src/Experiments/NewPipeline/LanguageInversion.v
index f5cc89b4f..bc9ad60be 100644
--- a/src/Experiments/NewPipeline/LanguageInversion.v
+++ b/src/Experiments/NewPipeline/LanguageInversion.v
@@ -603,14 +603,14 @@ Module Compilers.
Context {cast_outside_of_range : ZRange.zrange -> BinInt.Z -> BinInt.Z}.
Local Notation ident_interp := (@ident.gen_interp cast_outside_of_range).
- Lemma reify_list_interp_related_iff {t ls v}
- : expr.interp_related (@ident_interp) (reify_list (t:=t) ls) v
- <-> List.Forall2 (expr.interp_related (@ident_interp)) ls v.
+ Lemma reify_list_interp_related_gen_iff {var R t ls v}
+ : expr.interp_related_gen (var:=var) (@ident_interp) R (reify_list (t:=t) ls) v
+ <-> List.Forall2 (expr.interp_related_gen (@ident_interp) R) ls v.
Proof using Type.
revert v; induction ls as [|l ls IHls], v as [|v vs].
all: repeat first [ rewrite expr.reify_list_nil
| rewrite expr.reify_list_cons
- | progress cbn [expr.interp_related ident.gen_interp type.related] in *
+ | progress cbn [expr.interp_related_gen ident.gen_interp type.related] in *
| progress cbv [Morphisms.respectful] in *
| progress destruct_head'_ex
| progress destruct_head'_and
@@ -634,14 +634,25 @@ Module Compilers.
end ].
Qed.
- Lemma reflect_list_interp_related_iff {t ls ls' v}
+ Lemma reify_list_interp_related_iff {t ls v}
+ : expr.interp_related (@ident_interp) (reify_list (t:=t) ls) v
+ <-> List.Forall2 (expr.interp_related (@ident_interp)) ls v.
+ Proof using Type. apply reify_list_interp_related_gen_iff. Qed.
+
+ Lemma reflect_list_interp_related_gen_iff {var R t ls ls' v}
(Hls : invert_expr.reflect_list (t:=t) ls = Some ls')
- : List.Forall2 (expr.interp_related (@ident_interp)) ls' v
- <-> expr.interp_related (@ident_interp) ls v.
+ : List.Forall2 (expr.interp_related_gen (var:=var) (@ident_interp) R) ls' v
+ <-> expr.interp_related_gen (@ident_interp) R ls v.
Proof using Type.
apply reflect_list_Some in Hls; subst.
- rewrite reify_list_interp_related_iff; reflexivity.
+ rewrite reify_list_interp_related_gen_iff; reflexivity.
Qed.
+
+ Lemma reflect_list_interp_related_iff {t ls ls' v}
+ (Hls : invert_expr.reflect_list (t:=t) ls = Some ls')
+ : List.Forall2 (expr.interp_related (@ident_interp)) ls' v
+ <-> expr.interp_related (@ident_interp) ls v.
+ Proof using Type. now apply reflect_list_interp_related_gen_iff. Qed.
End with_interp.
Ltac invert_subst_step_helper guard_tac :=