proposition: Lemma DecodeMEquivAlignedDecodeM_trans {C} : forall bit_decoder1 byte_decoder1 bit_decoder2 byte_decoder2, DecodeMEquivAlignedDecodeM (C := C) bit_decoder1 byte_decoder1 -> (forall b cd, bit_decoder1 b cd = bit_decoder2 b cd) -> (forall n, AlignedDecodeMEquiv (byte_decoder1 n) (byte_decoder2 n)) -> DecodeMEquivAlignedDecodeM bit_decoder2 byte_decoder2.
proof: Proof. unfold DecodeMEquivAlignedDecodeM; intros; intuition; rewrite <- ?H0, <- ?H1; eauto. - eapply H; rewrite H0; eauto. - eapply H4; rewrite H0; eauto. - eapply H4; rewrite H1; eauto. - eapply H4; rewrite H0; eauto. - rewrite <- H0 in H3; apply H4 in H3; destruct H3 as [? [? ?] ]; 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.BinLib.AlignedByteString