proposition: Lemma i3th_replace_Index_neq : forall {m : nat} {As : Vector.t A m} {Bs : ilist3 As} (i3l : i3list C Bs) (n n' : Fin.t m) (new_c : C (ith3 Bs n)), n <> n' -> i3th (replace3_Index3 i3l n new_c) n' = i3th i3l n'.
proof: Proof. induction As. - intros; inversion n. - intros; revert n' As Bs i3l new_c H IHAs; pattern n, n0. match goal with |- ?P n n0 => simpl; apply (@Fin.caseS P); clear n n0; simpl in * end. + intros n n'; pattern n, n'; match goal with |- ?P n n' => simpl; apply (@Fin.caseS P); clear n n'; intros; simpl in *; eauto; congruence end. + intros n p n'; revert p; pattern n, n'; match goal with |- ?P n n' => simpl; apply (@Fin.caseS P); clear n n'; intros; simpl in *; eauto end. eapply IHAs; congruence. Qed.
imports: Coq.Lists.List Coq.Strings.String Coq.Arith.Arith Fiat.Common.ilist Fiat.Common.ilist3