proposition: Lemma interp_pexpr_le : forall vm vm', (forall (p : positive), (nat_of_P p < nat_of_P (fst vm))%nat -> nth_error (snd vm) (nat_of_P (fst vm - p) - 1) = nth_error (snd vm') (nat_of_P (fst vm' - p) - 1)) -> forall pe, bounded_pexpr (fst vm) pe -> Zeval_expr (interp_vmap vm) pe = Zeval_expr (interp_vmap vm') pe.
proof: Proof. intros vm vm' Hnth. unfold is_true;induction pe;simpl;trivial. unfold interp_vmap, is_true;rewrite <- Zlt_is_lt_bool. intros Hlt;rewrite Hnth;trivial. rewrite <- Plt_lt;trivial. rewrite andb_true_iff;intros (H1,H2);rewrite IHpe1, IHpe2;trivial. rewrite andb_true_iff;intros (H1,H2);rewrite IHpe1, IHpe2;trivial. rewrite andb_true_iff;intros (H1,H2);rewrite IHpe1, IHpe2;trivial. intros H1;rewrite IHpe;trivial. intros H1;rewrite IHpe;trivial. Qed.
imports: Bool List Int63 Ring63 PArray ZArith Misc State SMT_terms Euf RingMicromega ZMicromega Coq.micromega.Tauto Psatz