proposition: Lemma Prefix_Format_front {S T : Type} {store : Cache} (monoid : Monoid T) (format subformat format' : FormatM S T) : Prefix_Format monoid format subformat -> Prefix_Format monoid (format' ++ format) (format' ++ subformat).
proof: Proof. unfold Prefix_Format, sequence_Format, ComposeOpt.compose, Bind2; intros. computes_to_inv. destruct_conjs. simpl in *. injections. edestruct H; eauto. destruct_conjs. subst. eexists _, _, _. split; cycle 1. computes_to_econstructor; eauto. simpl. apply mappend_assoc. Qed.
imports: Fiat.Common.Coq__8_4__8_5__Compat Coq.Bool.Bool Coq.ZArith.ZArith Fiat.Common.DecideableEnsembles Fiat.Common.EnumType Fiat.Common.BoundedLookup Fiat.Common.ilist Fiat.Common.Tactics.CacheStringConstant Fiat.Common.IterateBoundedIndex Fiat.Computation Fiat.QueryStructure.Specification.Representation.Notations Fiat.QueryStructure.Specification.Representation.Heading Fiat.QueryStructure.Specification.Representation.Tuple Fiat.Narcissus.BinLib.Core Fiat.Narcissus.Common.Specs Fiat.Narcissus.Common.WordFacts Fiat.Narcissus.Common.ComposeIf Fiat.Narcissus.Common.ComposeOpt Fiat.Narcissus.Formats.Sequence Fiat.Narcissus.BaseFormats Fiat.Narcissus.Formats.Empty Fiat.Narcissus.Formats.Option Fiat.Narcissus.Formats.FixListOpt Fiat.Narcissus.Formats.Bool Fiat.Narcissus.Stores.EmptyStore Fiat.Narcissus.Formats.WordOpt Fiat.Narcissus.Formats.NatOpt Fiat.Narcissus.Formats.Vector Fiat.Narcissus.Formats.EnumOpt Fiat.Narcissus.Formats.SumTypeOpt Fiat.Narcissus.Formats.StringOpt Fiat.Narcissus.Common.Sig Fiat.Narcissus.Automation.Common Fiat.Narcissus.Automation.NormalizeFormats Fiat.Narcissus.Automation.Decision Fiat.Narcissus.Automation.ExtractData Fiat.Narcissus.Automation.SynthesizeDecoder