proposition: Lemma sequence_Encoding_inv {cache : Cache} {S : Type} enc1 enc2 : forall s ce b ce', @sequence_Encode ByteString cache _ S enc1 enc2 s ce = Some (b, ce') -> exists b1 b2 ce1, enc1 s ce = Some (b1, ce1) /\ enc2 s ce1 = Some (b2, ce') /\ b = mappend b1 b2.
proof: Proof. unfold sequence_Encode. intros. destruct enc1 eqn:?; destruct_conjs; [| discriminate]; simpl in *. destruct enc2 eqn:?; destruct_conjs; [| discriminate]; simpl in *. injections. eauto 10. 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.Common.BoundedLookup Fiat.Narcissus.Common.Specs Fiat.Narcissus.Common.ComposeOpt Fiat.Narcissus.Common.ComposeIf Fiat.Narcissus.BaseFormats Fiat.Narcissus.BinLib.Core Fiat.Narcissus.BinLib.AlignedByteString