DEFINITION nat_double_ind()
TYPE =
       R:natnatProp
         .n:nat.(R O n)
           (n:nat.(R (S n) O)
                (n:nat.m:nat.(R n m)(R (S n) (S m)))n:nat.m:nat.(R n m))
BODY =
        assume RnatnatProp
        suppose Hn:nat.(R O n)
        suppose H0n:nat.(R (S n) O)
        suppose H1n:nat.m:nat.(R n m)(R (S n) (S m))
        assume nnat
          we proceed by induction on n to prove m:nat.(R n m)
             case O : 
                the thesis becomes the hypothesis H
             case S : n0:nat 
                the thesis becomes m:nat.(R (S n0) m)
                (H2) by induction hypothesis we know m:nat.(R n0 m)
                   assume mnat
                      we proceed by induction on m to prove R (S n0) m
                         case O : 
                            the thesis becomes R (S n0) O
                               by (H0 .)
R (S n0) O
                         case S : n1:nat 
                            the thesis becomes R (S n0) (S n1)
                            () by induction hypothesis we know R (S n0) n1
                               by (H2 .)
                               we proved R n0 n1
                               by (H1 . . previous)
R (S n0) (S n1)
                      we proved R (S n0) m
m:nat.(R (S n0) m)
          we proved m:nat.(R n m)
       we proved 
          R:natnatProp
            .n:nat.(R O n)
              (n:nat.(R (S n) O)
                   (n:nat.m:nat.(R n m)(R (S n) (S m)))n:nat.m:nat.(R n m))