proposition: Lemma ByteString_enqueue_ByteStringToBoundedByteString_eq' : forall (b : bool) (b' : ByteString), Core.ByteString_enqueue b (BoundedByteStringToByteString b') = BoundedByteStringToByteString (ByteString_enqueue b b').
proof: Proof. destruct b'; simpl. unfold Core.ByteString_enqueue; simpl. match goal with |- context [match ?z with _ => _ end] => destruct z; try omega end. - unfold ByteStringToBoundedByteString; simpl. unfold ByteString_enqueue; simpl. match goal with |- context [match ?z with _ => _ end] => destruct z; try omega end. unfold BoundedByteStringToByteString; simpl. f_equal. + apply le_uniqueness_proof. + unfold ByteString_enqueue_full_word; simpl. subst; clear. unfold eq_rec_r, eq_rec; simpl. replace e0 with (eq_refl 7); simpl. induction byteString0; simpl; intros. * reflexivity. * autounfold with ByteBuffer in *; unfold Vector.to_list in *. simpl; f_equal. apply IHbyteString0. * eapply UIP_dec; eauto with arith. - unfold BoundedByteStringToByteString; simpl. unfold ByteString_enqueue; simpl. match goal with |- context [match ?z with _ => _ end] => destruct z; try omega end. f_equal. + apply le_uniqueness_proof. Qed.
imports: Fiat.Common.Coq__8_4__8_5__Compat Bedrock.Word Coq.ZArith.ZArith Coq.NArith.NArith Coq.Arith.Arith Coq.Numbers.Natural.Peano.NPeano Coq.Logic.Eqdep_dec Fiat.Narcissus.Common.Specs Fiat.Narcissus.BinLib.Core Fiat.Narcissus.Formats.ByteBuffer