DEFINITION next_plus_assoc()
TYPE =
       g:G
         .n:nat
           .h1:nat
             .h2:nat
               .eq
                 nat
                 next_plus g (next_plus g n h1) h2
                 next_plus g n (plus h1 h2)
BODY =
        assume gG
        assume nnat
        assume h1nat
          we proceed by induction on h1 to prove 
             h2:nat
               .eq
                 nat
                 next_plus g (next_plus g n h1) h2
                 next_plus g n (plus h1 h2)
             case O : 
                the thesis becomes 
                h2:nat
                  .eq
                    nat
                    next_plus g (next_plus g n O) h2
                    next_plus g n (plus O h2)
                   assume h2nat
                      by (refl_equal . .)
                      we proved eq nat (next_plus g n h2) (next_plus g n h2)
                      that is equivalent to 
                         eq
                           nat
                           next_plus g (next_plus g n O) h2
                           next_plus g n (plus O h2)

                      h2:nat
                        .eq
                          nat
                          next_plus g (next_plus g n O) h2
                          next_plus g n (plus O h2)
             case S : n0:nat 
                the thesis becomes 
                h2:nat
                  .eq
                    nat
                    next_plus g (next g (next_plus g n n0)) h2
                    next g (next_plus g n (plus n0 h2))
                () by induction hypothesis we know 
                   h2:nat
                     .eq
                       nat
                       next_plus g (next_plus g n n0) h2
                       next_plus g n (plus n0 h2)
                   assume h2nat
                      we proceed by induction on h2 to prove 
                         eq
                           nat
                           next_plus g (next g (next_plus g n n0)) h2
                           next g (next_plus g n (plus n0 h2))
                         case O : 
                            the thesis becomes 
                            eq
                              nat
                              next_plus g (next g (next_plus g n n0)) O
                              next g (next_plus g n (plus n0 O))
                               by (plus_n_O .)
                               we proved eq nat n0 (plus n0 O)
                               we proceed by induction on the previous result to prove 
                                  eq
                                    nat
                                    next g (next_plus g n n0)
                                    next g (next_plus g n (plus n0 O))
                                  case refl_equal : 
                                     the thesis becomes eq nat (next g (next_plus g n n0)) (next g (next_plus g n n0))
                                        by (refl_equal . .)
eq nat (next g (next_plus g n n0)) (next g (next_plus g n n0))
                               we proved 
                                  eq
                                    nat
                                    next g (next_plus g n n0)
                                    next g (next_plus g n (plus n0 O))

                                  eq
                                    nat
                                    next_plus g (next g (next_plus g n n0)) O
                                    next g (next_plus g n (plus n0 O))
                         case S : n1:nat 
                            the thesis becomes 
                            eq
                              nat
                              next_plus g (next g (next_plus g n n0)) (S n1)
                              next g (next_plus g n (plus n0 (S n1)))
                            (H0) by induction hypothesis we know 
                               eq
                                 nat
                                 next_plus g (next g (next_plus g n n0)) n1
                                 next g (next_plus g n (plus n0 n1))
                               by (plus_n_Sm . .)
                               we proved eq nat (S (plus n0 n1)) (plus n0 (S n1))
                               we proceed by induction on the previous result to prove 
                                  eq
                                    nat
                                    next g (next_plus g (next g (next_plus g n n0)) n1)
                                    next g (next_plus g n (plus n0 (S n1)))
                                  case refl_equal : 
                                     the thesis becomes 
                                     eq
                                       nat
                                       next g (next_plus g (next g (next_plus g n n0)) n1)
                                       next g (next_plus g n (S (plus n0 n1)))
                                        by (f_equal . . . . . H0)
                                        we proved 
                                           eq
                                             nat
                                             next g (next_plus g (next g (next_plus g n n0)) n1)
                                             next g (next g (next_plus g n (plus n0 n1)))

                                           eq
                                             nat
                                             next g (next_plus g (next g (next_plus g n n0)) n1)
                                             next g (next_plus g n (S (plus n0 n1)))
                               we proved 
                                  eq
                                    nat
                                    next g (next_plus g (next g (next_plus g n n0)) n1)
                                    next g (next_plus g n (plus n0 (S n1)))

                                  eq
                                    nat
                                    next_plus g (next g (next_plus g n n0)) (S n1)
                                    next g (next_plus g n (plus n0 (S n1)))
                      we proved 
                         eq
                           nat
                           next_plus g (next g (next_plus g n n0)) h2
                           next g (next_plus g n (plus n0 h2))
                      that is equivalent to 
                         eq
                           nat
                           next_plus g (next_plus g n (S n0)) h2
                           next_plus g n (plus (S n0) h2)

                      h2:nat
                        .eq
                          nat
                          next_plus g (next g (next_plus g n n0)) h2
                          next g (next_plus g n (plus n0 h2))
          we proved 
             h2:nat
               .eq
                 nat
                 next_plus g (next_plus g n h1) h2
                 next_plus g n (plus h1 h2)
       we proved 
          g:G
            .n:nat
              .h1:nat
                .h2:nat
                  .eq
                    nat
                    next_plus g (next_plus g n h1) h2
                    next_plus g n (plus h1 h2)