DEFINITION getl_drop_trans()
TYPE =
       c1:C
         .c2:C
           .h:nat
             .getl h c1 c2
               e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O c1 e2)
BODY =
       assume c1C
          we proceed by induction on c1 to prove 
             c2:C
               .h:nat
                 .getl h c1 c2
                   e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O c1 e2)
             case CSort : n:nat 
                the thesis becomes 
                c2:C
                  .h:nat
                    .H:getl h (CSort n) c2
                      .e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O (CSort n) e2)
                    assume c2C
                    assume hnat
                    suppose Hgetl h (CSort n) c2
                    assume e2C
                    assume inat
                    suppose drop (S i) O c2 e2
                      by (getl_gen_sort . . . H .)
                      we proved drop (S (plus i h)) O (CSort n) e2

                      c2:C
                        .h:nat
                          .H:getl h (CSort n) c2
                            .e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O (CSort n) e2)
             case CHead 
                we need to prove 
                c2:C
                  .c3:C
                      .h:nat
                        .getl h c2 c3
                          e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O c2 e2)
                    k:K
                         .t:T
                           .c3:C
                             .h:nat
                               .getl h (CHead c2 k t) c3
                                 e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O (CHead c2 k t) e2)
                    assume c2C
                    suppose IHc
                       c3:C
                         .h:nat
                           .getl h c2 c3
                             e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O c2 e2)
                    assume kK
                      we proceed by induction on k to prove 
                         t:T
                           .c3:C
                             .h:nat
                               .getl h (CHead c2 k t) c3
                                 e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O (CHead c2 k t) e2)
                         case Bind : b:B 
                            the thesis becomes 
                            t:T
                              .c3:C
                                .h:nat
                                  .getl h (CHead c2 (Bind b) t) c3
                                    e2:C
                                         .i:nat
                                           .drop (S i) O c3 e2
                                             drop (S (plus i h)) O (CHead c2 (Bind b) t) e2
                                assume tT
                                assume c3C
                                assume hnat
                                  we proceed by induction on h to prove 
                                     getl h (CHead c2 (Bind b) t) c3
                                       e2:C
                                            .i:nat
                                              .drop (S i) O c3 e2
                                                drop (S (plus i h)) O (CHead c2 (Bind b) t) e2
                                     case O : 
                                        the thesis becomes 
                                        getl O (CHead c2 (Bind b) t) c3
                                          e2:C
                                               .i:nat
                                                 .drop (S i) O c3 e2
                                                   drop (S (plus i O)) O (CHead c2 (Bind b) t) e2
                                            suppose Hgetl O (CHead c2 (Bind b) t) c3
                                            assume e2C
                                            assume inat
                                            suppose H0drop (S i) O c3 e2
                                              (H1
                                                 by (getl_gen_O . . H)
                                                 we proved clear (CHead c2 (Bind b) t) c3
                                                 by (clear_gen_bind . . . . previous)
                                                 we proved eq C c3 (CHead c2 (Bind b) t)
                                                 we proceed by induction on the previous result to prove drop (S i) O (CHead c2 (Bind b) t) e2
                                                    case refl_equal : 
                                                       the thesis becomes the hypothesis H0
drop (S i) O (CHead c2 (Bind b) t) e2
                                              end of H1
                                              by (plus_n_O .)
                                              we proved eq nat i (plus i O)
                                              we proceed by induction on the previous result to prove drop (S (plus i O)) O (CHead c2 (Bind b) t) e2
                                                 case refl_equal : 
                                                    the thesis becomes drop (S i) O (CHead c2 (Bind b) t) e2
                                                       by (drop_gen_drop . . . . . H1)
                                                       we proved drop (r (Bind b) i) O c2 e2
                                                       by (drop_drop . . . . previous .)
drop (S i) O (CHead c2 (Bind b) t) e2
                                              we proved drop (S (plus i O)) O (CHead c2 (Bind b) t) e2

                                              getl O (CHead c2 (Bind b) t) c3
                                                e2:C
                                                     .i:nat
                                                       .drop (S i) O c3 e2
                                                         drop (S (plus i O)) O (CHead c2 (Bind b) t) e2
                                     case S : n:nat 
                                        the thesis becomes 
                                        H0:getl (S n) (CHead c2 (Bind b) t) c3
                                          .e2:C
                                            .i:nat
                                              .H1:(drop (S i) O c3 e2).(drop (S (plus i (S n))) O (CHead c2 (Bind b) t) e2)
                                        () by induction hypothesis we know 
                                           getl n (CHead c2 (Bind b) t) c3
                                             e2:C
                                                  .i:nat
                                                    .drop (S i) O c3 e2
                                                      drop (S (plus i n)) O (CHead c2 (Bind b) t) e2
                                            suppose H0getl (S n) (CHead c2 (Bind b) t) c3
                                            assume e2C
                                            assume inat
                                            suppose H1drop (S i) O c3 e2
                                              by (plus_Snm_nSm . .)
                                              we proved eq nat (plus (S i) n) (plus i (S n))
                                              we proceed by induction on the previous result to prove drop (S (plus i (S n))) O (CHead c2 (Bind b) t) e2
                                                 case refl_equal : 
                                                    the thesis becomes drop (S (plus (S i) n)) O (CHead c2 (Bind b) t) e2
                                                       by (getl_gen_S . . . . . H0)
                                                       we proved getl (r (Bind b) n) c2 c3
                                                       that is equivalent to getl n c2 c3
                                                       by (IHc . . previous . . H1)
                                                       we proved drop (S (plus i n)) O c2 e2
                                                       that is equivalent to drop (r (Bind b) (plus (S i) n)) O c2 e2
                                                       by (drop_drop . . . . previous .)
drop (S (plus (S i) n)) O (CHead c2 (Bind b) t) e2
                                              we proved drop (S (plus i (S n))) O (CHead c2 (Bind b) t) e2

                                              H0:getl (S n) (CHead c2 (Bind b) t) c3
                                                .e2:C
                                                  .i:nat
                                                    .H1:(drop (S i) O c3 e2).(drop (S (plus i (S n))) O (CHead c2 (Bind b) t) e2)
                                  we proved 
                                     getl h (CHead c2 (Bind b) t) c3
                                       e2:C
                                            .i:nat
                                              .drop (S i) O c3 e2
                                                drop (S (plus i h)) O (CHead c2 (Bind b) t) e2

                                  t:T
                                    .c3:C
                                      .h:nat
                                        .getl h (CHead c2 (Bind b) t) c3
                                          e2:C
                                               .i:nat
                                                 .drop (S i) O c3 e2
                                                   drop (S (plus i h)) O (CHead c2 (Bind b) t) e2
                         case Flat : f:F 
                            the thesis becomes 
                            t:T
                              .c3:C
                                .h:nat
                                  .getl h (CHead c2 (Flat f) t) c3
                                    e2:C
                                         .i:nat
                                           .drop (S i) O c3 e2
                                             drop (S (plus i h)) O (CHead c2 (Flat f) t) e2
                                assume tT
                                assume c3C
                                assume hnat
                                  we proceed by induction on h to prove 
                                     getl h (CHead c2 (Flat f) t) c3
                                       e2:C
                                            .i:nat
                                              .drop (S i) O c3 e2
                                                drop (S (plus i h)) O (CHead c2 (Flat f) t) e2
                                     case O : 
                                        the thesis becomes 
                                        getl O (CHead c2 (Flat f) t) c3
                                          e2:C
                                               .i:nat
                                                 .drop (S i) O c3 e2
                                                   drop (S (plus i O)) O (CHead c2 (Flat f) t) e2
                                            suppose Hgetl O (CHead c2 (Flat f) t) c3
                                            assume e2C
                                            assume inat
                                            suppose H0drop (S i) O c3 e2
                                              (h1
                                                 by (drop_refl .)
drop O O c2 c2
                                              end of h1
                                              (h2
                                                 by (getl_gen_O . . H)
                                                 we proved clear (CHead c2 (Flat f) t) c3
                                                 by (clear_gen_flat . . . . previous)
clear c2 c3
                                              end of h2
                                              by (getl_intro . . . . h1 h2)
                                              we proved getl O c2 c3
                                              by (IHc . . previous . . H0)
                                              we proved drop (S (plus i O)) O c2 e2
                                              that is equivalent to drop (r (Flat f) (plus i O)) O c2 e2
                                              by (drop_drop . . . . previous .)
                                              we proved drop (S (plus i O)) O (CHead c2 (Flat f) t) e2

                                              getl O (CHead c2 (Flat f) t) c3
                                                e2:C
                                                     .i:nat
                                                       .drop (S i) O c3 e2
                                                         drop (S (plus i O)) O (CHead c2 (Flat f) t) e2
                                     case S : n:nat 
                                        the thesis becomes 
                                        H0:getl (S n) (CHead c2 (Flat f) t) c3
                                          .e2:C
                                            .i:nat
                                              .H1:(drop (S i) O c3 e2).(drop (S (plus i (S n))) O (CHead c2 (Flat f) t) e2)
                                        () by induction hypothesis we know 
                                           getl n (CHead c2 (Flat f) t) c3
                                             e2:C
                                                  .i:nat
                                                    .drop (S i) O c3 e2
                                                      drop (S (plus i n)) O (CHead c2 (Flat f) t) e2
                                            suppose H0getl (S n) (CHead c2 (Flat f) t) c3
                                            assume e2C
                                            assume inat
                                            suppose H1drop (S i) O c3 e2
                                              by (getl_gen_S . . . . . H0)
                                              we proved getl (r (Flat f) n) c2 c3
                                              that is equivalent to getl (S n) c2 c3
                                              by (IHc . . previous . . H1)
                                              we proved drop (S (plus i (S n))) O c2 e2
                                              that is equivalent to drop (r (Flat f) (plus i (S n))) O c2 e2
                                              by (drop_drop . . . . previous .)
                                              we proved drop (S (plus i (S n))) O (CHead c2 (Flat f) t) e2

                                              H0:getl (S n) (CHead c2 (Flat f) t) c3
                                                .e2:C
                                                  .i:nat
                                                    .H1:(drop (S i) O c3 e2).(drop (S (plus i (S n))) O (CHead c2 (Flat f) t) e2)
                                  we proved 
                                     getl h (CHead c2 (Flat f) t) c3
                                       e2:C
                                            .i:nat
                                              .drop (S i) O c3 e2
                                                drop (S (plus i h)) O (CHead c2 (Flat f) t) e2

                                  t:T
                                    .c3:C
                                      .h:nat
                                        .getl h (CHead c2 (Flat f) t) c3
                                          e2:C
                                               .i:nat
                                                 .drop (S i) O c3 e2
                                                   drop (S (plus i h)) O (CHead c2 (Flat f) t) e2
                      we proved 
                         t:T
                           .c3:C
                             .h:nat
                               .getl h (CHead c2 k t) c3
                                 e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O (CHead c2 k t) e2)

                      c2:C
                        .c3:C
                            .h:nat
                              .getl h c2 c3
                                e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O c2 e2)
                          k:K
                               .t:T
                                 .c3:C
                                   .h:nat
                                     .getl h (CHead c2 k t) c3
                                       e2:C.i:nat.(drop (S i) O c3 e2)(drop (S (plus i h)) O (CHead c2 k t) e2)
          we proved 
             c2:C
               .h:nat
                 .getl h c1 c2
                   e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O c1 e2)
       we proved 
          c1:C
            .c2:C
              .h:nat
                .getl h c1 c2
                  e2:C.i:nat.(drop (S i) O c2 e2)(drop (S (plus i h)) O c1 e2)