proposition: Lemma stronginduction { E : nat -> UU } ( p : E 0%nat ) ( q : forall n : nat, natneq n 0%nat -> ( forall m : nat, natlth m n -> E m ) -> E n ) : forall n : nat, E n.
proof: Proof. intros. destruct n. - assumption. - apply q. + split. + induction n. * intros m t. rewrite ( natlth1tois0 m t ). assumption. * intros m t. destruct ( natlehchoice _ _ ( natlthsntoleh _ _ t ) ) as [ left | right ]. -- apply IHn. assumption. -- apply q. ++ rewrite right. split. ++ intros k s. rewrite right in s. apply ( IHn k ). assumption. Defined.
imports: UniMath.Tactics.EnsureStructuredProofs UniMath.Foundations.PartA UniMath.Foundations.Propositions UniMath.Foundations.NaturalNumbers UniMath.Algebra.RigsAndRings UniMath.Algebra.Domains_and_Fields UniMath.NumberSystems.Integers UniMath.Algebra.Monoids