proposition: Lemma succ_strict_mono : forall a b, lt a b -> nf a -> nf b -> lt (succ a) (succ b).
proof: Proof. induction a; destruct b. - intros; destruct (not_lt_zero H). - cbn. destruct b1. intros. apply coeff_lt; auto with arith. intros _ _ H. apply head_lt; auto with T1. - intro H; destruct (not_lt_zero H). - cbn; destruct a1. + destruct b1. * intros H H0 H1; destruct (lt_inv H). destruct (not_lt_zero H2). destruct H2. -- destruct H2; auto with arith T1. -- decompose [and] H2. assert (b2 = zero). { eapply nf_of_finite; eauto. } subst b2. destruct (not_lt_zero H6). * intros; apply head_lt; auto with T1. + intros H H0 H1; nf_decomp H0; nf_decomp H1. destruct b1. * destruct (lt_inv H). destruct (not_lt_zero H2). destruct H2 as [H2 | H2]; destruct H2; discriminate. * destruct (lt_inv H). -- auto with T1. -- destruct H2 as [[H2 H3] | H2]. ++ rewrite H2; auto with T1. ++ decompose [and] H2; rewrite H5, H3. apply tail_lt. apply IHa2 ; auto. Qed.
imports: Coq(Arith Max Bool Lia Compare_dec Relations Ensembles Wellfounded Bool RelationClasses Operators_Properties ArithRing Logic.Eqdep_dec) hydras(More_Arith Restriction DecPreOrder) hydras(OrdNotations)