proposition: Lemma ByteString_enqueue_ByteString_inj' : forall bs1 bs2 bs1' bs2', ByteString_enqueue_ByteString bs1 bs2 = ByteString_enqueue_ByteString bs1' bs2' -> length_ByteString bs1 = length_ByteString bs1' -> bs2 = bs2'.
proof: Proof. intros. rewrite (ByteString_into_queue_eq bs1), (ByteString_into_queue_eq bs2), (ByteString_into_queue_eq bs1'), (ByteString_into_queue_eq bs2') in H. rewrite !ByteString_enqueue_ByteString_into_BitString in H. apply queue_into_ByteString_inj in H. rewrite (ByteString_into_queue_eq bs2), (ByteString_into_queue_eq bs2'). apply app_inj' in H; eauto using length_ByteString_into_queue. rewrite H; eauto. 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 Coq.Strings.String Coq.Vectors.Vector Fiat.Narcissus.Formats.WordOpt Fiat.Common.Equality