DEFINITION aplus_gz_le()
TYPE =
       k:nat
         .h:nat
           .n:nat
             .le h k
               eq A (aplus gz (ASort h n) k) (ASort O (plus (minus k h) n))
BODY =
       assume knat
          we proceed by induction on k to prove 
             h:nat
               .n0:nat
                 .le h k
                   eq A (aplus gz (ASort h n0) k) (ASort O (plus (minus k h) n0))
             case O : 
                the thesis becomes 
                h:nat
                  .n:nat
                    .le h O
                      eq A (aplus gz (ASort h n) O) (ASort O (plus (minus O h) n))
                    assume hnat
                    assume nnat
                    suppose Hle h O
                      (H_y
                         by (le_n_O_eq . H)
eq nat O h
                      end of H_y
                      we proceed by induction on H_y to prove eq A (ASort h n) (ASort O n)
                         case refl_equal : 
                            the thesis becomes eq A (ASort O n) (ASort O n)
                               by (refl_equal . .)
eq A (ASort O n) (ASort O n)
                      we proved eq A (ASort h n) (ASort O n)
                      that is equivalent to eq A (aplus gz (ASort h n) O) (ASort O (plus (minus O h) n))

                      h:nat
                        .n:nat
                          .le h O
                            eq A (aplus gz (ASort h n) O) (ASort O (plus (minus O h) n))
             case S : k0:nat 
                the thesis becomes 
                h:nat
                  .n0:nat
                    .le h (S k0)
                      (eq
                           A
                           asucc gz (aplus gz (ASort h n0) k0)
                           ASort O (plus <λn1:nat.nat> CASE h OF OS k0 | S lminus k0 l n0))
                (IH) by induction hypothesis we know 
                   h:nat
                     .n:nat
                       .le h k0
                         eq A (aplus gz (ASort h n) k0) (ASort O (plus (minus k0 h) n))
                   assume hnat
                      we proceed by induction on h to prove 
                         n0:nat
                           .le h (S k0)
                             (eq
                                  A
                                  asucc gz (aplus gz (ASort h n0) k0)
                                  ASort O (plus <λn1:nat.nat> CASE h OF OS k0 | S lminus k0 l n0))
                         case O : 
                            the thesis becomes 
                            n:nat
                              .le O (S k0)
                                (eq
                                     A
                                     asucc gz (aplus gz (ASort O n) k0)
                                     ASort O (plus <λn1:nat.nat> CASE O OF OS k0 | S lminus k0 l n))
                                assume nnat
                                suppose le O (S k0)
                                  by (aplus_asucc . . .)
                                  we proved 
                                     eq
                                       A
                                       aplus gz (asucc gz (ASort O n)) k0
                                       asucc gz (aplus gz (ASort O n) k0)
                                  we proceed by induction on the previous result to prove 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort O n) k0)
                                       ASort O (S (plus k0 n))
                                     case refl_equal : 
                                        the thesis becomes 
                                        eq
                                          A
                                          aplus gz (asucc gz (ASort O n)) k0
                                          ASort O (S (plus k0 n))
                                           (h1
                                              by (minus_n_O .)
                                              we proved eq nat k0 (minus k0 O)
                                              we proceed by induction on the previous result to prove 
                                                 eq
                                                   A
                                                   ASort O (plus (minus k0 O) (S n))
                                                   ASort O (S (plus k0 n))
                                                 case refl_equal : 
                                                    the thesis becomes eq A (ASort O (plus k0 (S n))) (ASort O (S (plus k0 n)))
                                                       by (plus_n_Sm . .)
                                                       we proved eq nat (S (plus k0 n)) (plus k0 (S n))
                                                       we proceed by induction on the previous result to prove eq A (ASort O (plus k0 (S n))) (ASort O (S (plus k0 n)))
                                                          case refl_equal : 
                                                             the thesis becomes eq A (ASort O (S (plus k0 n))) (ASort O (S (plus k0 n)))
                                                                by (refl_equal . .)
eq A (ASort O (S (plus k0 n))) (ASort O (S (plus k0 n)))
eq A (ASort O (plus k0 (S n))) (ASort O (S (plus k0 n)))

                                                 eq
                                                   A
                                                   ASort O (plus (minus k0 O) (S n))
                                                   ASort O (S (plus k0 n))
                                           end of h1
                                           (h2
                                              by (le_O_n .)
                                              we proved le O k0
                                              by (IH . . previous)

                                                 eq
                                                   A
                                                   aplus gz (ASort O (S n)) k0
                                                   ASort O (plus (minus k0 O) (S n))
                                           end of h2
                                           by (eq_ind_r . . . h1 . h2)
                                           we proved eq A (aplus gz (ASort O (S n)) k0) (ASort O (S (plus k0 n)))

                                              eq
                                                A
                                                aplus gz (asucc gz (ASort O n)) k0
                                                ASort O (S (plus k0 n))
                                  we proved 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort O n) k0)
                                       ASort O (S (plus k0 n))
                                  that is equivalent to 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort O n) k0)
                                       ASort O (plus <λn1:nat.nat> CASE O OF OS k0 | S lminus k0 l n)

                                  n:nat
                                    .le O (S k0)
                                      (eq
                                           A
                                           asucc gz (aplus gz (ASort O n) k0)
                                           ASort O (plus <λn1:nat.nat> CASE O OF OS k0 | S lminus k0 l n))
                         case S : n:nat 
                            the thesis becomes 
                            n0:nat
                              .H0:le (S n) (S k0)
                                .eq
                                  A
                                  asucc gz (aplus gz (ASort (S n) n0) k0)
                                  ASort O (plus (minus k0 n) n0)
                            () by induction hypothesis we know 
                               n0:nat
                                 .le n (S k0)
                                   (eq
                                        A
                                        asucc gz (aplus gz (ASort n n0) k0)
                                        ASort O (plus <λn1:nat.nat> CASE n OF OS k0 | S lminus k0 l n0))
                                assume n0nat
                                suppose H0le (S n) (S k0)
                                  (H_yby (le_S_n . . H0) we proved le n k0
                                  by (IH . . H_y)
                                  we proved eq A (aplus gz (ASort n n0) k0) (ASort O (plus (minus k0 n) n0))
                                  we proceed by induction on the previous result to prove 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort (S n) n0) k0)
                                       ASort O (plus (minus k0 n) n0)
                                     case refl_equal : 
                                        the thesis becomes 
                                        eq
                                          A
                                          asucc gz (aplus gz (ASort (S n) n0) k0)
                                          aplus gz (ASort n n0) k0
                                           by (aplus_asucc . . .)
                                           we proved 
                                              eq
                                                A
                                                aplus gz (asucc gz (ASort (S n) n0)) k0
                                                asucc gz (aplus gz (ASort (S n) n0) k0)
                                           we proceed by induction on the previous result to prove 
                                              eq
                                                A
                                                asucc gz (aplus gz (ASort (S n) n0) k0)
                                                aplus gz (ASort n n0) k0
                                              case refl_equal : 
                                                 the thesis becomes 
                                                 eq
                                                   A
                                                   aplus gz (asucc gz (ASort (S n) n0)) k0
                                                   aplus gz (ASort n n0) k0
                                                    by (refl_equal . .)
                                                    we proved eq A (aplus gz (ASort n n0) k0) (aplus gz (ASort n n0) k0)

                                                       eq
                                                         A
                                                         aplus gz (asucc gz (ASort (S n) n0)) k0
                                                         aplus gz (ASort n n0) k0

                                              eq
                                                A
                                                asucc gz (aplus gz (ASort (S n) n0) k0)
                                                aplus gz (ASort n n0) k0
                                  we proved 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort (S n) n0) k0)
                                       ASort O (plus (minus k0 n) n0)
                                  that is equivalent to 
                                     eq
                                       A
                                       asucc gz (aplus gz (ASort (S n) n0) k0)
                                       ASort O (plus <λn1:nat.nat> CASE S n OF OS k0 | S lminus k0 l n0)

                                  n0:nat
                                    .H0:le (S n) (S k0)
                                      .eq
                                        A
                                        asucc gz (aplus gz (ASort (S n) n0) k0)
                                        ASort O (plus (minus k0 n) n0)
                      we proved 
                         n0:nat
                           .le h (S k0)
                             (eq
                                  A
                                  asucc gz (aplus gz (ASort h n0) k0)
                                  ASort O (plus <λn1:nat.nat> CASE h OF OS k0 | S lminus k0 l n0))
                      that is equivalent to 
                         n0:nat
                           .le h (S k0)
                             (eq
                                  A
                                  aplus gz (ASort h n0) (S k0)
                                  ASort O (plus (minus (S k0) h) n0))

                      h:nat
                        .n0:nat
                          .le h (S k0)
                            (eq
                                 A
                                 asucc gz (aplus gz (ASort h n0) k0)
                                 ASort O (plus <λn1:nat.nat> CASE h OF OS k0 | S lminus k0 l n0))
          we proved 
             h:nat
               .n0:nat
                 .le h k
                   eq A (aplus gz (ASort h n0) k) (ASort O (plus (minus k h) n0))
       we proved 
          k:nat
            .h:nat
              .n0:nat
                .le h k
                  eq A (aplus gz (ASort h n0) k) (ASort O (plus (minus k h) n0))