DEFINITION drop_S()
TYPE =
       b:B
         .c:C
           .e:C
             .u:T.h:nat.(drop h O c (CHead e (Bind b) u))(drop (S h) O c e)
BODY =
        assume bB
        assume cC
          we proceed by induction on c to prove 
             e:C
               .u:T.h:nat.(drop h O c (CHead e (Bind b) u))(drop (S h) O c e)
             case CSort : n:nat 
                the thesis becomes 
                e:C
                  .u:T
                    .h:nat
                      .H:drop h O (CSort n) (CHead e (Bind b) u)
                        .drop (S h) O (CSort n) e
                    assume eC
                    assume uT
                    assume hnat
                    suppose Hdrop h O (CSort n) (CHead e (Bind b) u)
                      by (drop_gen_sort . . . . H)
                      we proved 
                         and3
                           eq C (CHead e (Bind b) u) (CSort n)
                           eq nat h O
                           eq nat O O
                      we proceed by induction on the previous result to prove drop (S h) O (CSort n) e
                         case and3_intro : H0:eq C (CHead e (Bind b) u) (CSort n) H1:eq nat h O :eq nat O O 
                            the thesis becomes drop (S h) O (CSort n) e
                               (H3
                                  we proceed by induction on H0 to prove <λ:C.Prop> CASE CSort n OF CSort False | CHead   True
                                     case refl_equal : 
                                        the thesis becomes 
                                        <λ:C.Prop> CASE CHead e (Bind b) u OF CSort False | CHead   True
                                           consider I
                                           we proved True

                                              <λ:C.Prop> CASE CHead e (Bind b) u OF CSort False | CHead   True
<λ:C.Prop> CASE CSort n OF CSort False | CHead   True
                               end of H3
                               consider H3
                               we proved <λ:C.Prop> CASE CSort n OF CSort False | CHead   True
                               that is equivalent to False
                               we proceed by induction on the previous result to prove drop (S OO (CSort n) e
                               we proved drop (S OO (CSort n) e
                               by (eq_ind_r . . . previous . H1)
drop (S h) O (CSort n) e
                      we proved drop (S h) O (CSort n) e

                      e:C
                        .u:T
                          .h:nat
                            .H:drop h O (CSort n) (CHead e (Bind b) u)
                              .drop (S h) O (CSort n) e
             case CHead : c0:C k:K t:T 
                the thesis becomes 
                e:C
                  .u:T
                    .h:nat
                      .drop h O (CHead c0 k t) (CHead e (Bind b) u)
                        drop (S h) O (CHead c0 k t) e
                (H) by induction hypothesis we know e:C.u:T.h:nat.(drop h O c0 (CHead e (Bind b) u))(drop (S h) O c0 e)
                    assume eC
                    assume uT
                    assume hnat
                      we proceed by induction on h to prove 
                         drop h O (CHead c0 k t) (CHead e (Bind b) u)
                           drop (S h) O (CHead c0 k t) e
                         case O : 
                            the thesis becomes 
                            drop O O (CHead c0 k t) (CHead e (Bind b) u)
                              drop (S OO (CHead c0 k t) e
                               suppose H0drop O O (CHead c0 k t) (CHead e (Bind b) u)
                                  (H1
                                     by (drop_gen_refl . . H0)
                                     we proved eq C (CHead c0 k t) (CHead e (Bind b) u)
                                     by (f_equal . . . . . previous)
                                     we proved 
                                        eq
                                          C
                                          <λ:C.C> CASE CHead c0 k t OF CSort c0 | CHead c1  c1
                                          <λ:C.C> CASE CHead e (Bind b) u OF CSort c0 | CHead c1  c1

                                        eq
                                          C
                                          λe0:C.<λ:C.C> CASE e0 OF CSort c0 | CHead c1  c1 (CHead c0 k t)
                                          λe0:C.<λ:C.C> CASE e0 OF CSort c0 | CHead c1  c1 (CHead e (Bind b) u)
                                  end of H1
                                  (h1
                                     (H2
                                        by (drop_gen_refl . . H0)
                                        we proved eq C (CHead c0 k t) (CHead e (Bind b) u)
                                        by (f_equal . . . . . previous)
                                        we proved 
                                           eq
                                             K
                                             <λ:C.K> CASE CHead c0 k t OF CSort k | CHead  k0 k0
                                             <λ:C.K> CASE CHead e (Bind b) u OF CSort k | CHead  k0 k0

                                           eq
                                             K
                                             λe0:C.<λ:C.K> CASE e0 OF CSort k | CHead  k0 k0 (CHead c0 k t)
                                             λe0:C.<λ:C.K> CASE e0 OF CSort k | CHead  k0 k0 (CHead e (Bind b) u)
                                     end of H2
                                     (H4
                                        consider H2
                                        we proved 
                                           eq
                                             K
                                             <λ:C.K> CASE CHead c0 k t OF CSort k | CHead  k0 k0
                                             <λ:C.K> CASE CHead e (Bind b) u OF CSort k | CHead  k0 k0
eq K k (Bind b)
                                     end of H4
                                     suppose H5eq C c0 e
                                        we proceed by induction on H5 to prove drop (S OO (CHead c0 k t) e
                                           case refl_equal : 
                                              the thesis becomes drop (S OO (CHead c0 k t) c0
                                                 by (drop_refl .)
                                                 we proved drop O O c0 c0
                                                 that is equivalent to drop (r (Bind b) OO c0 c0
                                                 by (drop_drop . . . . previous .)
                                                 we proved drop (S OO (CHead c0 (Bind b) t) c0
                                                 by (eq_ind_r . . . previous . H4)
drop (S OO (CHead c0 k t) c0
                                        we proved drop (S OO (CHead c0 k t) e
(eq C c0 e)(drop (S OO (CHead c0 k t) e)
                                  end of h1
                                  (h2
                                     consider H1
                                     we proved 
                                        eq
                                          C
                                          <λ:C.C> CASE CHead c0 k t OF CSort c0 | CHead c1  c1
                                          <λ:C.C> CASE CHead e (Bind b) u OF CSort c0 | CHead c1  c1
eq C c0 e
                                  end of h2
                                  by (h1 h2)
                                  we proved drop (S OO (CHead c0 k t) e

                                  drop O O (CHead c0 k t) (CHead e (Bind b) u)
                                    drop (S OO (CHead c0 k t) e
                         case S : n:nat 
                            the thesis becomes 
                            H1:drop (S n) O (CHead c0 k t) (CHead e (Bind b) u)
                              .drop (S (S n)) O (CHead c0 k t) e
                            () by induction hypothesis we know 
                               drop n O (CHead c0 k t) (CHead e (Bind b) u)
                                 drop (S n) O (CHead c0 k t) e
                               suppose H1drop (S n) O (CHead c0 k t) (CHead e (Bind b) u)
                                  (h1
                                     by (drop_gen_drop . . . . . H1)
                                     we proved drop (r k n) O c0 (CHead e (Bind b) u)
                                     by (H . . . previous)
drop (S (r k n)) O c0 e
                                  end of h1
                                  (h2
                                     by (r_S . .)
eq nat (r k (S n)) (S (r k n))
                                  end of h2
                                  by (eq_ind_r . . . h1 . h2)
                                  we proved drop (r k (S n)) O c0 e
                                  by (drop_drop . . . . previous .)
                                  we proved drop (S (S n)) O (CHead c0 k t) e

                                  H1:drop (S n) O (CHead c0 k t) (CHead e (Bind b) u)
                                    .drop (S (S n)) O (CHead c0 k t) e
                      we proved 
                         drop h O (CHead c0 k t) (CHead e (Bind b) u)
                           drop (S h) O (CHead c0 k t) e

                      e:C
                        .u:T
                          .h:nat
                            .drop h O (CHead c0 k t) (CHead e (Bind b) u)
                              drop (S h) O (CHead c0 k t) e
          we proved 
             e:C
               .u:T.h:nat.(drop h O c (CHead e (Bind b) u))(drop (S h) O c e)
       we proved 
          b:B
            .c:C
              .e:C
                .u:T.h:nat.(drop h O c (CHead e (Bind b) u))(drop (S h) O c e)