DEFINITION le_elim_rel()
TYPE =
       P:natnatProp
         .p:nat.(P O p)
           (p:nat.q:nat.(le p q)(P p q)(P (S p) (S q))
                n:nat.m:nat.(le n m)(P n m))
BODY =
        assume PnatnatProp
        suppose Hp:nat.(P O p)
        suppose H0p:nat.q:nat.(le p q)(P p q)(P (S p) (S q))
        assume nnat
          we proceed by induction on n to prove m:nat.(le n m)(P n m)
             case O : 
                the thesis becomes m:nat.(le O m)(P O m)
                    assume mnat
                    suppose le O m
                      by (H .)
                      we proved O m
m:nat.(le O m)(P O m)
             case S : n0:nat 
                the thesis becomes m:nat.Le:(le (S n0) m).(P (S n0) m)
                (IHn) by induction hypothesis we know m:nat.(le n0 m)(P n0 m)
                    assume mnat
                    suppose Lele (S n0) m
                      we proceed by induction on Le to prove P (S n0) m
                         case le_n : 
                            the thesis becomes P (S n0) (S n0)
                               (h1by (le_n .) we proved le n0 n0
                               (h2
                                  by (le_n .)
                                  we proved le n0 n0
                                  by (IHn . previous)
P n0 n0
                               end of h2
                               by (H0 . . h1 h2)
P (S n0) (S n0)
                         case le_S : m0:nat H1:le (S n0) m0 
                            the thesis becomes P (S n0) (S m0)
                            () by induction hypothesis we know P (S n0) m0
                               (h1
                                  by (le_trans_S . . H1)
le n0 m0
                               end of h1
                               (h2
                                  by (le_trans_S . . H1)
                                  we proved le n0 m0
                                  by (IHn . previous)
P n0 m0
                               end of h2
                               by (H0 . . h1 h2)
P (S n0) (S m0)
                      we proved P (S n0) m
m:nat.Le:(le (S n0) m).(P (S n0) m)
          we proved m:nat.(le n m)(P n m)
       we proved 
          P:natnatProp
            .p:nat.(P O p)
              (p:nat.q:nat.(le p q)(P p q)(P (S p) (S q))
                   n:nat.m:nat.(le n m)(P n m))