proposition: Lemma EncodeMEquivAlignedEncodeM_trans : forall bit_decoder1 byte_decoder1 bit_decoder2 byte_decoder2, EncodeMEquivAlignedEncodeM bit_decoder1 byte_decoder1 -> (forall s env, bit_decoder1 s env = bit_decoder2 s env) -> (forall n, AlignedEncodeMEquiv (byte_decoder1 n) (byte_decoder2 n)) -> EncodeMEquivAlignedEncodeM bit_decoder2 byte_decoder2.
proof: Proof. unfold EncodeMEquivAlignedEncodeM; intros; intuition. - revert v1 v v2 H2; rewrite <- ?H0, <- ?H1; intros. destruct (proj1 (H _ _ _) _ _ H2 H3 v1 v m v2); intuition. eexists; intuition eauto. rewrite <- H1; eauto. - rewrite <- ?H0, <- ?H1; intros. eapply (proj1 (proj2 (H _ _ _))); eauto; rewrite H0; eauto. - rewrite <- ?H0, <- ?H1; intros. eapply (proj1 (proj2 (proj2 (H _ _ _)))); rewrite ?H0; eauto. - rewrite <- ?H0 in H2. rewrite <- H1; eapply 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.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