diff --git a/theories/lang/lang.v b/theories/lang/lang.v index 87ff9a73a028a4003f505efa860a963cb24848c9..c1c77cdcb08602f8fd539fe96e34d193f6d2fc60 100644 --- a/theories/lang/lang.v +++ b/theories/lang/lang.v @@ -163,6 +163,17 @@ Fixpoint subst_l (xl : list binder) (esl : list expr) (e : expr) : option expr : | _, _ => None end. +Definition subst_l_vec {n} (xl : vec binder n) (el : vec expr n) : expr → expr := + Vector.rect2 (λ _ _ _, expr → expr) id + (λ n _ _ rec x e, rec ∘ subst' x e) xl el. + +Lemma subst_l_vec_eq {n} (xl : vec binder n) (el : vec expr n) e : + Some $ subst_l_vec xl el e = subst_l xl el e. +Proof. + revert n xl el e. eapply (vec_rect2 (λ n xl el, ∀ e, Some $ subst_l_vec xl el e = subst_l xl el e)); first done. + move=>n xl el IH x es e. simpl. apply IH. +Qed. + (** The stepping relation *) Definition lit_of_bool (b : bool) : base_lit := LitInt (if b then 1 else 0).