proposition: Lemma build_positive_atom_aux_correct : forall (build_positive : hatom -> option positive), (forall (h : hatom) p, build_positive h = Some p -> t_interp.[h] = Bval t_i Typ.Tpositive p) -> forall (a:atom) (p:positive), build_positive_atom_aux build_positive a = Some p -> interp_atom a = Bval t_i Typ.Tpositive p.
proof: Proof. intros build_positive Hbuild a; case a; simpl; try discriminate; auto. destruct c; simpl; try discriminate; intros p H1; inversion_clear H1; auto. destruct u; simpl; try discriminate; intros i p; case_eq (build_positive i); simpl; try discriminate; intros q H1 H2; inversion_clear H2; rewrite (Hbuild _ _ H1); auto. Qed.
imports: Bool List Int63 Ring63 PArray ZArith Misc State SMT_terms Euf RingMicromega ZMicromega Coq.micromega.Tauto Psatz