fact: Fixpoint align_decode_list {A} (A_decode_align : forall n, ByteBuffer.t n -> CacheDecode -> option (A * {n : _ & Vector.t _ n} * CacheDecode)) (n : nat) {sz} (v : ByteBuffer.t sz) (cd : CacheDecode) : option (list A * {n : _ & Vector.t _ n} * CacheDecode) := match n with | 0 => Some (@nil _, existT _ _ v, cd) | S s' => `(x, b1, e1) <- A_decode_align sz v cd; `(xs, b2, e2) <- align_decode_list A_decode_align s' (projT2 b1) e1; Some ((x :: xs)%list, b2, e2) end.
imports: Fiat.Common.Coq__8_4__8_5__Compat Coq.Strings.String Coq.Arith.Mult Coq.Vectors.Vector Fiat.Common.SumType Fiat.Common.BoundedLookup Fiat.Common.ilist Fiat.Common.DecideableEnsembles Fiat.Common.IterateBoundedIndex Fiat.Common.Tactics.CacheStringConstant Fiat.Computation Fiat.Narcissus.Common.Specs Fiat.Narcissus.Common.ComposeOpt Fiat.Narcissus.Formats.WordOpt Fiat.Narcissus.Formats.NatOpt Fiat.Narcissus.Formats.StringOpt Fiat.Narcissus.Formats.EnumOpt Fiat.Narcissus.Formats.FixListOpt Fiat.Narcissus.Formats.SumTypeOpt Fiat.Narcissus.Formats.DomainNameOpt Fiat.Narcissus.Formats.Vector Fiat.Narcissus.BinLib.AlignedByteString Fiat.Narcissus.BinLib.AlignWord Fiat.Narcissus.BinLib.AlignedDecoders Fiat.Narcissus.BinLib.AlignedEncodeMonad Fiat.Narcissus.BinLib.AlignedDecodeMonad Fiat.Narcissus.BaseFormats Bedrock.Word