proposition: Lemma substring_correct4 {s : string} {n m m'} (H : length s <= n + m) (H' : length s <= n + m') : substring n m s = substring n m' s.
proof: Proof. revert n m m' H H'. induction s; simpl in *. { intros; destruct m, m', n; trivial. } { intros; destruct m, m', n; trivial; simpl in *; try (apply Nat.nlt_0_r in H; destruct H); try (apply Nat.nlt_0_r in H'; destruct H'); try apply le_S_n in H; try apply le_S_n in H'; try solve [ try rewrite Nat.add_comm in H; try rewrite Nat.add_comm in H'; simpl in *; rewrite !substring_correct0' by auto with arith; trivial ]. { apply f_equal. apply IHs; trivial. } { apply IHs; trivial. } } Qed.
imports: Fiat.Common.Coq__8_4__8_5__Compat Coq.ZArith.ZArith Coq.Arith.PeanoNat Coq.Strings.Ascii Coq.Strings.String Fiat.Common.List.Operations Fiat.Common.StringOperations