DEFINITION csubt_drop_flat()
TYPE =
       g:G
         .f:F
           .n:nat
             .c1:C
               .c2:C
                 .csubt g c1 c2
                   d1:C
                        .u:T
                          .drop n O c1 (CHead d1 (Flat f) u)
                            ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n O c2 (CHead d2 (Flat f) u)
BODY =
        assume gG
        assume fF
        assume nnat
          we proceed by induction on n to prove 
             c1:C
               .c2:C
                 .csubt g c1 c2
                   d1:C
                        .u:T
                          .drop n O c1 (CHead d1 (Flat f) u)
                            ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n O c2 (CHead d2 (Flat f) u)
             case O : 
                the thesis becomes 
                c1:C
                  .c2:C
                    .csubt g c1 c2
                      d1:C
                           .u:T
                             .drop O O c1 (CHead d1 (Flat f) u)
                               ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)
                    assume c1C
                    assume c2C
                    suppose Hcsubt g c1 c2
                    assume d1C
                    assume uT
                    suppose H0drop O O c1 (CHead d1 (Flat f) u)
                      (H1
                         by (drop_gen_refl . . H0)
                         we proved eq C c1 (CHead d1 (Flat f) u)
                         we proceed by induction on the previous result to prove csubt g (CHead d1 (Flat f) u) c2
                            case refl_equal : 
                               the thesis becomes the hypothesis H
csubt g (CHead d1 (Flat f) u) c2
                      end of H1
                      (H_x
                         by (csubt_gen_flat . . . . . H1)
ex2 C λe2:C.eq C c2 (CHead e2 (Flat f) u) λe2:C.csubt g d1 e2
                      end of H_x
                      (H2consider H_x
                      we proceed by induction on H2 to prove ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)
                         case ex_intro2 : x:C H3:eq C c2 (CHead x (Flat f) u) H4:csubt g d1 x 
                            the thesis becomes ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)
                               by (drop_refl .)
                               we proved drop O O (CHead x (Flat f) u) (CHead x (Flat f) u)
                               by (ex_intro2 . . . . H4 previous)
                               we proved 
                                  ex2
                                    C
                                    λd2:C.csubt g d1 d2
                                    λd2:C.drop O O (CHead x (Flat f) u) (CHead d2 (Flat f) u)
                               by (eq_ind_r . . . previous . H3)
ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)
                      we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)

                      c1:C
                        .c2:C
                          .csubt g c1 c2
                            d1:C
                                 .u:T
                                   .drop O O c1 (CHead d1 (Flat f) u)
                                     ex2 C λd2:C.csubt g d1 d2 λd2:C.drop O O c2 (CHead d2 (Flat f) u)
             case S : n0:nat 
                the thesis becomes 
                c1:C
                  .c2:C
                    .H0:csubt g c1 c2
                      .d1:C
                        .u:T
                          .drop (S n0) O c1 (CHead d1 (Flat f) u)
                            ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c2 (CHead d2 (Flat f) u)
                (H) by induction hypothesis we know 
                   c1:C
                     .c2:C
                       .csubt g c1 c2
                         d1:C
                              .u:T
                                .drop n0 O c1 (CHead d1 (Flat f) u)
                                  ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n0 O c2 (CHead d2 (Flat f) u)
                    assume c1C
                    assume c2C
                    suppose H0csubt g c1 c2
                      we proceed by induction on H0 to prove 
                         d1:C
                           .u:T
                             .drop (S n0) O c1 (CHead d1 (Flat f) u)
                               ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c2 (CHead d2 (Flat f) u)
                         case csubt_sort : n1:nat 
                            the thesis becomes 
                            d1:C
                              .u:T
                                .H1:drop (S n0) O (CSort n1) (CHead d1 (Flat f) u)
                                  .ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
                                assume d1C
                                assume uT
                                suppose H1drop (S n0) O (CSort n1) (CHead d1 (Flat f) u)
                                  by (drop_gen_sort . . . . H1)
                                  we proved 
                                     and3
                                       eq C (CHead d1 (Flat f) u) (CSort n1)
                                       eq nat (S n0) O
                                       eq nat O O
                                  we proceed by induction on the previous result to prove ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
                                     case and3_intro : :eq C (CHead d1 (Flat f) u) (CSort n1) H3:eq nat (S n0) O :eq nat O O 
                                        the thesis becomes ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
                                           (H5
                                              we proceed by induction on H3 to prove <λ:nat.Prop> CASE O OF OFalse | S True
                                                 case refl_equal : 
                                                    the thesis becomes <λ:nat.Prop> CASE S n0 OF OFalse | S True
                                                       consider I
                                                       we proved True
<λ:nat.Prop> CASE S n0 OF OFalse | S True
<λ:nat.Prop> CASE O OF OFalse | S True
                                           end of H5
                                           consider H5
                                           we proved <λ:nat.Prop> CASE O OF OFalse | S True
                                           that is equivalent to False
                                           we proceed by induction on the previous result to prove ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
                                  we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)

                                  d1:C
                                    .u:T
                                      .H1:drop (S n0) O (CSort n1) (CHead d1 (Flat f) u)
                                        .ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CSort n1) (CHead d2 (Flat f) u)
                         case csubt_head 
                            we need to prove 
                            c0:C
                              .c3:C
                                .csubt g c0 c3
                                  (d1:C
                                         .u:T
                                           .drop (S n0) O c0 (CHead d1 (Flat f) u)
                                             ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u)
                                       k:K
                                            .u:T
                                              .d1:C
                                                .u0:T
                                                  .drop (S n0) O (CHead c0 k u) (CHead d1 (Flat f) u0)
                                                    ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CHead c3 k u) (CHead d2 (Flat f) u0))
                                assume c0C
                                assume c3C
                                suppose H1csubt g c0 c3
                                suppose H2
                                   d1:C
                                     .u:T
                                       .drop (S n0) O c0 (CHead d1 (Flat f) u)
                                         ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u)
                                assume kK
                                  we proceed by induction on k to prove 
                                     u:T
                                       .d1:C
                                         .u0:T
                                           .drop (S n0) O (CHead c0 k u) (CHead d1 (Flat f) u0)
                                             ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CHead c3 k u) (CHead d2 (Flat f) u0)
                                     case Bind : b:B 
                                        the thesis becomes 
                                        u:T
                                          .d1:C
                                            .u0:T
                                              .H3:drop (S n0) O (CHead c0 (Bind b) u) (CHead d1 (Flat f) u0)
                                                .ex2
                                                  C
                                                  λd2:C.csubt g d1 d2
                                                  λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)
                                            assume uT
                                            assume d1C
                                            assume u0T
                                            suppose H3drop (S n0) O (CHead c0 (Bind b) u) (CHead d1 (Flat f) u0)
                                              by (drop_gen_drop . . . . . H3)
                                              we proved drop (r (Bind b) n0) O c0 (CHead d1 (Flat f) u0)
                                              that is equivalent to drop n0 O c0 (CHead d1 (Flat f) u0)
                                              by (H . . H1 . . previous)
                                              we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n0 O c3 (CHead d2 (Flat f) u0)
                                              we proceed by induction on the previous result to prove 
                                                 ex2
                                                   C
                                                   λd2:C.csubt g d1 d2
                                                   λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)
                                                 case ex_intro2 : x:C H4:csubt g d1 x H5:drop n0 O c3 (CHead x (Flat f) u0) 
                                                    the thesis becomes 
                                                    ex2
                                                      C
                                                      λd2:C.csubt g d1 d2
                                                      λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)
                                                       consider H5
                                                       we proved drop n0 O c3 (CHead x (Flat f) u0)
                                                       that is equivalent to drop (r (Bind b) n0) O c3 (CHead x (Flat f) u0)
                                                       by (drop_drop . . . . previous .)
                                                       we proved drop (S n0) O (CHead c3 (Bind b) u) (CHead x (Flat f) u0)
                                                       by (ex_intro2 . . . . H4 previous)

                                                          ex2
                                                            C
                                                            λd2:C.csubt g d1 d2
                                                            λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)
                                              we proved 
                                                 ex2
                                                   C
                                                   λd2:C.csubt g d1 d2
                                                   λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)

                                              u:T
                                                .d1:C
                                                  .u0:T
                                                    .H3:drop (S n0) O (CHead c0 (Bind b) u) (CHead d1 (Flat f) u0)
                                                      .ex2
                                                        C
                                                        λd2:C.csubt g d1 d2
                                                        λd2:C.drop (S n0) O (CHead c3 (Bind b) u) (CHead d2 (Flat f) u0)
                                     case Flat : f0:F 
                                        the thesis becomes 
                                        u:T
                                          .d1:C
                                            .u0:T
                                              .H3:drop (S n0) O (CHead c0 (Flat f0) u) (CHead d1 (Flat f) u0)
                                                .ex2
                                                  C
                                                  λd2:C.csubt g d1 d2
                                                  λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)
                                            assume uT
                                            assume d1C
                                            assume u0T
                                            suppose H3drop (S n0) O (CHead c0 (Flat f0) u) (CHead d1 (Flat f) u0)
                                              by (drop_gen_drop . . . . . H3)
                                              we proved drop (r (Flat f0) n0) O c0 (CHead d1 (Flat f) u0)
                                              that is equivalent to drop (S n0) O c0 (CHead d1 (Flat f) u0)
                                              by (H2 . . previous)
                                              we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u0)
                                              we proceed by induction on the previous result to prove 
                                                 ex2
                                                   C
                                                   λd2:C.csubt g d1 d2
                                                   λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)
                                                 case ex_intro2 : x:C H4:csubt g d1 x H5:drop (S n0) O c3 (CHead x (Flat f) u0) 
                                                    the thesis becomes 
                                                    ex2
                                                      C
                                                      λd2:C.csubt g d1 d2
                                                      λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)
                                                       consider H5
                                                       we proved drop (S n0) O c3 (CHead x (Flat f) u0)
                                                       that is equivalent to drop (r (Flat f0) n0) O c3 (CHead x (Flat f) u0)
                                                       by (drop_drop . . . . previous .)
                                                       we proved drop (S n0) O (CHead c3 (Flat f0) u) (CHead x (Flat f) u0)
                                                       by (ex_intro2 . . . . H4 previous)

                                                          ex2
                                                            C
                                                            λd2:C.csubt g d1 d2
                                                            λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)
                                              we proved 
                                                 ex2
                                                   C
                                                   λd2:C.csubt g d1 d2
                                                   λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)

                                              u:T
                                                .d1:C
                                                  .u0:T
                                                    .H3:drop (S n0) O (CHead c0 (Flat f0) u) (CHead d1 (Flat f) u0)
                                                      .ex2
                                                        C
                                                        λd2:C.csubt g d1 d2
                                                        λd2:C.drop (S n0) O (CHead c3 (Flat f0) u) (CHead d2 (Flat f) u0)
                                  we proved 
                                     u:T
                                       .d1:C
                                         .u0:T
                                           .drop (S n0) O (CHead c0 k u) (CHead d1 (Flat f) u0)
                                             ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CHead c3 k u) (CHead d2 (Flat f) u0)

                                  c0:C
                                    .c3:C
                                      .csubt g c0 c3
                                        (d1:C
                                               .u:T
                                                 .drop (S n0) O c0 (CHead d1 (Flat f) u)
                                                   ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u)
                                             k:K
                                                  .u:T
                                                    .d1:C
                                                      .u0:T
                                                        .drop (S n0) O (CHead c0 k u) (CHead d1 (Flat f) u0)
                                                          ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O (CHead c3 k u) (CHead d2 (Flat f) u0))
                         case csubt_void : c0:C c3:C H1:csubt g c0 c3 b:B :not (eq B b Void) u1:T u2:T 
                            the thesis becomes 
                            d1:C
                              .u:T
                                .H4:drop (S n0) O (CHead c0 (Bind Void) u1) (CHead d1 (Flat f) u)
                                  .ex2
                                    C
                                    λd2:C.csubt g d1 d2
                                    λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)
                            () by induction hypothesis we know 
                               d1:C
                                 .u:T
                                   .drop (S n0) O c0 (CHead d1 (Flat f) u)
                                     ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u)
                                assume d1C
                                assume uT
                                suppose H4drop (S n0) O (CHead c0 (Bind Void) u1) (CHead d1 (Flat f) u)
                                  by (drop_gen_drop . . . . . H4)
                                  we proved drop (r (Bind Void) n0) O c0 (CHead d1 (Flat f) u)
                                  that is equivalent to drop n0 O c0 (CHead d1 (Flat f) u)
                                  by (H . . H1 . . previous)
                                  we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n0 O c3 (CHead d2 (Flat f) u)
                                  we proceed by induction on the previous result to prove 
                                     ex2
                                       C
                                       λd2:C.csubt g d1 d2
                                       λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)
                                     case ex_intro2 : x:C H5:csubt g d1 x H6:drop n0 O c3 (CHead x (Flat f) u) 
                                        the thesis becomes 
                                        ex2
                                          C
                                          λd2:C.csubt g d1 d2
                                          λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)
                                           consider H6
                                           we proved drop n0 O c3 (CHead x (Flat f) u)
                                           that is equivalent to drop (r (Bind b) n0) O c3 (CHead x (Flat f) u)
                                           by (drop_drop . . . . previous .)
                                           we proved drop (S n0) O (CHead c3 (Bind b) u2) (CHead x (Flat f) u)
                                           by (ex_intro2 . . . . H5 previous)

                                              ex2
                                                C
                                                λd2:C.csubt g d1 d2
                                                λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)
                                  we proved 
                                     ex2
                                       C
                                       λd2:C.csubt g d1 d2
                                       λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)

                                  d1:C
                                    .u:T
                                      .H4:drop (S n0) O (CHead c0 (Bind Void) u1) (CHead d1 (Flat f) u)
                                        .ex2
                                          C
                                          λd2:C.csubt g d1 d2
                                          λd2:C.drop (S n0) O (CHead c3 (Bind b) u2) (CHead d2 (Flat f) u)
                         case csubt_abst : c0:C c3:C H1:csubt g c0 c3 u:T t:T :ty3 g c0 u t :ty3 g c3 u t 
                            the thesis becomes 
                            d1:C
                              .u0:T
                                .H5:drop (S n0) O (CHead c0 (Bind Abst) t) (CHead d1 (Flat f) u0)
                                  .ex2
                                    C
                                    λd2:C.csubt g d1 d2
                                    λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)
                            () by induction hypothesis we know 
                               d1:C
                                 .u:T
                                   .drop (S n0) O c0 (CHead d1 (Flat f) u)
                                     ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c3 (CHead d2 (Flat f) u)
                                assume d1C
                                assume u0T
                                suppose H5drop (S n0) O (CHead c0 (Bind Abst) t) (CHead d1 (Flat f) u0)
                                  by (drop_gen_drop . . . . . H5)
                                  we proved drop (r (Bind Abst) n0) O c0 (CHead d1 (Flat f) u0)
                                  that is equivalent to drop n0 O c0 (CHead d1 (Flat f) u0)
                                  by (H . . H1 . . previous)
                                  we proved ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n0 O c3 (CHead d2 (Flat f) u0)
                                  we proceed by induction on the previous result to prove 
                                     ex2
                                       C
                                       λd2:C.csubt g d1 d2
                                       λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)
                                     case ex_intro2 : x:C H6:csubt g d1 x H7:drop n0 O c3 (CHead x (Flat f) u0) 
                                        the thesis becomes 
                                        ex2
                                          C
                                          λd2:C.csubt g d1 d2
                                          λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)
                                           consider H7
                                           we proved drop n0 O c3 (CHead x (Flat f) u0)
                                           that is equivalent to drop (r (Bind Abbr) n0) O c3 (CHead x (Flat f) u0)
                                           by (drop_drop . . . . previous .)
                                           we proved drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead x (Flat f) u0)
                                           by (ex_intro2 . . . . H6 previous)

                                              ex2
                                                C
                                                λd2:C.csubt g d1 d2
                                                λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)
                                  we proved 
                                     ex2
                                       C
                                       λd2:C.csubt g d1 d2
                                       λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)

                                  d1:C
                                    .u0:T
                                      .H5:drop (S n0) O (CHead c0 (Bind Abst) t) (CHead d1 (Flat f) u0)
                                        .ex2
                                          C
                                          λd2:C.csubt g d1 d2
                                          λd2:C.drop (S n0) O (CHead c3 (Bind Abbr) u) (CHead d2 (Flat f) u0)
                      we proved 
                         d1:C
                           .u:T
                             .drop (S n0) O c1 (CHead d1 (Flat f) u)
                               ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c2 (CHead d2 (Flat f) u)

                      c1:C
                        .c2:C
                          .H0:csubt g c1 c2
                            .d1:C
                              .u:T
                                .drop (S n0) O c1 (CHead d1 (Flat f) u)
                                  ex2 C λd2:C.csubt g d1 d2 λd2:C.drop (S n0) O c2 (CHead d2 (Flat f) u)
          we proved 
             c1:C
               .c2:C
                 .csubt g c1 c2
                   d1:C
                        .u:T
                          .drop n O c1 (CHead d1 (Flat f) u)
                            ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n O c2 (CHead d2 (Flat f) u)
       we proved 
          g:G
            .f:F
              .n:nat
                .c1:C
                  .c2:C
                    .csubt g c1 c2
                      d1:C
                           .u:T
                             .drop n O c1 (CHead d1 (Flat f) u)
                               ex2 C λd2:C.csubt g d1 d2 λd2:C.drop n O c2 (CHead d2 (Flat f) u)