DEFINITION sn3_appls_cast()
TYPE =
       c:C
         .vs:TList
           .u:T
             .sn3 c (THeads (Flat Appl) vs u)
               t:T
                    .sn3 c (THeads (Flat Appl) vs t)
                      sn3 c (THeads (Flat Appl) vs (THead (Flat Cast) u t))
BODY =
        assume cC
        assume vsTList
          we proceed by induction on vs to prove 
             u:T
               .sn3 c (THeads (Flat Appl) vs u)
                 t0:T
                      .sn3 c (THeads (Flat Appl) vs t0)
                        sn3 c (THeads (Flat Appl) vs (THead (Flat Cast) u t0))
             case TNil : 
                the thesis becomes 
                u:T
                  .sn3 c (THeads (Flat ApplTNil u)
                    t0:T
                         .sn3 c (THeads (Flat ApplTNil t0)
                           sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t0))
                   assume uT
                      we must prove 
                            sn3 c (THeads (Flat ApplTNil u)
                              t0:T
                                   .sn3 c (THeads (Flat ApplTNil t0)
                                     sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t0))
                      or equivalently 
                            sn3 c u
                              t:T
                                   .sn3 c (THeads (Flat ApplTNil t)
                                     sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                       suppose Hsn3 c u
                       assume tT
                         we must prove 
                               sn3 c (THeads (Flat ApplTNil t)
                                 sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                         or equivalently 
                               sn3 c t
                                 sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                         suppose H0sn3 c t
                            by (sn3_cast . . H . H0)
                            we proved sn3 c (THead (Flat Cast) u t)
                            that is equivalent to sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                         we proved 
                            sn3 c t
                              sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                         that is equivalent to 
                            sn3 c (THeads (Flat ApplTNil t)
                              sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                      we proved 
                         sn3 c u
                           t:T
                                .sn3 c (THeads (Flat ApplTNil t)
                                  sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t))
                      that is equivalent to 
                         sn3 c (THeads (Flat ApplTNil u)
                           t0:T
                                .sn3 c (THeads (Flat ApplTNil t0)
                                  sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t0))

                      u:T
                        .sn3 c (THeads (Flat ApplTNil u)
                          t0:T
                               .sn3 c (THeads (Flat ApplTNil t0)
                                 sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t0))
             case TCons 
                we need to prove 
                t:T
                  .t0:TList
                    .u:T
                        .sn3 c (THeads (Flat Appl) t0 u)
                          t0:T
                               .sn3 c (THeads (Flat Appl) t0 t0)
                                 sn3 c (THeads (Flat Appl) t0 (THead (Flat Cast) u t0))
                      u:T
                           .sn3 c (THeads (Flat Appl) (TCons t t0) u)
                             t0:T
                                  .sn3 c (THeads (Flat Appl) (TCons t t0) t0)
                                    sn3 c (THeads (Flat Appl) (TCons t t0) (THead (Flat Cast) u t0))
                    assume tT
                    assume t0TList
                      we proceed by induction on t0 to prove 
                         u:T
                             .sn3 c (THeads (Flat Appl) t0 u)
                               t2:T
                                    .sn3 c (THeads (Flat Appl) t0 t2)
                                      sn3 c (THeads (Flat Appl) t0 (THead (Flat Cast) u t2))
                           u:T
                                .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t0 u))
                                  t2:T
                                       .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t0 t2))
                                         (sn3
                                              c
                                              THead
                                                Flat Appl
                                                t
                                                THeads (Flat Appl) t0 (THead (Flat Cast) u t2))
                         case TNil : 
                            the thesis becomes 
                            u:T
                                .sn3 c (THeads (Flat ApplTNil u)
                                  t1:T
                                       .sn3 c (THeads (Flat ApplTNil t1)
                                         sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t1))
                              u:T
                                   .sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil u))
                                     t1:T
                                          .sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil t1))
                                            (sn3
                                                 c
                                                 THead
                                                   Flat Appl
                                                   t
                                                   THeads (Flat ApplTNil (THead (Flat Cast) u t1))
                                suppose 
                                   u:T
                                     .sn3 c (THeads (Flat ApplTNil u)
                                       t1:T
                                            .sn3 c (THeads (Flat ApplTNil t1)
                                              sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t1))
                                assume uT
                                suppose H0sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil u))
                                assume t1T
                                suppose H1sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil t1))
                                  (h1
                                     consider H0
                                     we proved sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil u))
sn3 c (THead (Flat Appl) t u)
                                  end of h1
                                  (h2
                                     consider H1
                                     we proved sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil t1))
sn3 c (THead (Flat Appl) t t1)
                                  end of h2
                                  by (sn3_appl_cast . . . h1 . h2)
                                  we proved sn3 c (THead (Flat Appl) t (THead (Flat Cast) u t1))
                                  that is equivalent to 
                                     sn3
                                       c
                                       THead
                                         Flat Appl
                                         t
                                         THeads (Flat ApplTNil (THead (Flat Cast) u t1)

                                  u:T
                                      .sn3 c (THeads (Flat ApplTNil u)
                                        t1:T
                                             .sn3 c (THeads (Flat ApplTNil t1)
                                               sn3 c (THeads (Flat ApplTNil (THead (Flat Cast) u t1))
                                    u:T
                                         .sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil u))
                                           t1:T
                                                .sn3 c (THead (Flat Appl) t (THeads (Flat ApplTNil t1))
                                                  (sn3
                                                       c
                                                       THead
                                                         Flat Appl
                                                         t
                                                         THeads (Flat ApplTNil (THead (Flat Cast) u t1))
                         case TCons : t1:T t2:TList 
                            the thesis becomes 
                            H0:u:T
                                       .sn3 c (THeads (Flat Appl) (TCons t1 t2) u)
                                         t3:T
                                              .sn3 c (THeads (Flat Appl) (TCons t1 t2) t3)
                                                sn3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3))
                              .u:T
                                .H1:sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) u))
                                  .t3:T
                                    .H2:sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) t3))
                                      .sn3
                                        c
                                        THead
                                          Flat Appl
                                          t
                                          THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                            () by induction hypothesis we know 
                               u:T
                                   .sn3 c (THeads (Flat Appl) t2 u)
                                     t3:T
                                          .sn3 c (THeads (Flat Appl) t2 t3)
                                            sn3 c (THeads (Flat Appl) t2 (THead (Flat Cast) u t3))
                                 u:T
                                      .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t2 u))
                                        t3:T
                                             .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t2 t3))
                                               (sn3
                                                    c
                                                    THead
                                                      Flat Appl
                                                      t
                                                      THeads (Flat Appl) t2 (THead (Flat Cast) u t3))
                                suppose H0
                                   u:T
                                     .sn3 c (THeads (Flat Appl) (TCons t1 t2) u)
                                       t3:T
                                            .sn3 c (THeads (Flat Appl) (TCons t1 t2) t3)
                                              sn3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3))
                                assume uT
                                suppose H1sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) u))
                                assume t3T
                                suppose H2sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) t3))
                                  (H_x
                                     by (sn3_gen_flat . . . . H2)
land (sn3 c t) (sn3 c (THeads (Flat Appl) (TCons t1 t2) t3))
                                  end of H_x
                                  (H3consider H_x
                                  consider H3
                                  we proved land (sn3 c t) (sn3 c (THeads (Flat Appl) (TCons t1 t2) t3))
                                  that is equivalent to 
                                     land (sn3 c t) (sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 t3)))
                                  we proceed by induction on the previous result to prove 
                                     sn3
                                       c
                                       THead
                                         Flat Appl
                                         t
                                         THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                                     case conj : :sn3 c t H5:sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 t3)) 
                                        the thesis becomes 
                                        sn3
                                          c
                                          THead
                                            Flat Appl
                                            t
                                            THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                                           (H6consider H5
                                           (H_x0
                                              by (sn3_gen_flat . . . . H1)
land (sn3 c t) (sn3 c (THeads (Flat Appl) (TCons t1 t2) u))
                                           end of H_x0
                                           (H7consider H_x0
                                           consider H7
                                           we proved land (sn3 c t) (sn3 c (THeads (Flat Appl) (TCons t1 t2) u))
                                           that is equivalent to 
                                              land
                                                sn3 c t
                                                sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 u))
                                           we proceed by induction on the previous result to prove 
                                              sn3
                                                c
                                                THead
                                                  Flat Appl
                                                  t
                                                  THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                                              case conj : H8:sn3 c t H9:sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 u)) 
                                                 the thesis becomes 
                                                 sn3
                                                   c
                                                   THead
                                                     Flat Appl
                                                     t
                                                     THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                                                    (H10consider H9
                                                    (h1
                                                       (h1
                                                          consider H10
                                                          we proved sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 u))
sn3 c (THeads (Flat Appl) (TCons t1 t2) u)
                                                       end of h1
                                                       (h2
                                                          consider H6
                                                          we proved sn3 c (THead (Flat Appl) t1 (THeads (Flat Appl) t2 t3))
sn3 c (THeads (Flat Appl) (TCons t1 t2) t3)
                                                       end of h2
                                                       by (H0 . h1 . h2)
sn3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3))
                                                    end of h1
                                                    (h2
                                                        assume u2T
                                                        suppose H11pr3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)) u2
                                                        suppose H12
                                                           iso (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)) u2
                                                             P:Prop.P
                                                          by (pr3_iso_appls_cast . . . . . H11 H12)
                                                          we proved pr3 c (THeads (Flat Appl) (TCons t1 t2) t3) u2
                                                          by (pr3_thin_dx . . . previous . .)
                                                          we proved 
                                                             pr3
                                                               c
                                                               THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) t3)
                                                               THead (Flat Appl) t u2
                                                          by (sn3_pr3_trans . . H2 . previous)
                                                          we proved sn3 c (THead (Flat Appl) t u2)

                                                          u2:T
                                                            .pr3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)) u2
                                                              (iso (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)) u2
                                                                     P:Prop.P
                                                                   sn3 c (THead (Flat Appl) t u2))
                                                    end of h2
                                                    by (sn3_appl_appls . . . . h1 . H8 h2)

                                                       sn3
                                                         c
                                                         THead
                                                           Flat Appl
                                                           t
                                                           THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)

                                              sn3
                                                c
                                                THead
                                                  Flat Appl
                                                  t
                                                  THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                                  we proved 
                                     sn3
                                       c
                                       THead
                                         Flat Appl
                                         t
                                         THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)

                                  H0:u:T
                                             .sn3 c (THeads (Flat Appl) (TCons t1 t2) u)
                                               t3:T
                                                    .sn3 c (THeads (Flat Appl) (TCons t1 t2) t3)
                                                      sn3 c (THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3))
                                    .u:T
                                      .H1:sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) u))
                                        .t3:T
                                          .H2:sn3 c (THead (Flat Appl) t (THeads (Flat Appl) (TCons t1 t2) t3))
                                            .sn3
                                              c
                                              THead
                                                Flat Appl
                                                t
                                                THeads (Flat Appl) (TCons t1 t2) (THead (Flat Cast) u t3)
                      we proved 
                         u:T
                             .sn3 c (THeads (Flat Appl) t0 u)
                               t2:T
                                    .sn3 c (THeads (Flat Appl) t0 t2)
                                      sn3 c (THeads (Flat Appl) t0 (THead (Flat Cast) u t2))
                           u:T
                                .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t0 u))
                                  t2:T
                                       .sn3 c (THead (Flat Appl) t (THeads (Flat Appl) t0 t2))
                                         (sn3
                                              c
                                              THead
                                                Flat Appl
                                                t
                                                THeads (Flat Appl) t0 (THead (Flat Cast) u t2))
                      that is equivalent to 
                         u:T
                             .sn3 c (THeads (Flat Appl) t0 u)
                               t0:T
                                    .sn3 c (THeads (Flat Appl) t0 t0)
                                      sn3 c (THeads (Flat Appl) t0 (THead (Flat Cast) u t0))
                           u:T
                                .sn3 c (THeads (Flat Appl) (TCons t t0) u)
                                  t0:T
                                       .sn3 c (THeads (Flat Appl) (TCons t t0) t0)
                                         sn3 c (THeads (Flat Appl) (TCons t t0) (THead (Flat Cast) u t0))

                      t:T
                        .t0:TList
                          .u:T
                              .sn3 c (THeads (Flat Appl) t0 u)
                                t0:T
                                     .sn3 c (THeads (Flat Appl) t0 t0)
                                       sn3 c (THeads (Flat Appl) t0 (THead (Flat Cast) u t0))
                            u:T
                                 .sn3 c (THeads (Flat Appl) (TCons t t0) u)
                                   t0:T
                                        .sn3 c (THeads (Flat Appl) (TCons t t0) t0)
                                          sn3 c (THeads (Flat Appl) (TCons t t0) (THead (Flat Cast) u t0))
          we proved 
             u:T
               .sn3 c (THeads (Flat Appl) vs u)
                 t0:T
                      .sn3 c (THeads (Flat Appl) vs t0)
                        sn3 c (THeads (Flat Appl) vs (THead (Flat Cast) u t0))
       we proved 
          c:C
            .vs:TList
              .u:T
                .sn3 c (THeads (Flat Appl) vs u)
                  t0:T
                       .sn3 c (THeads (Flat Appl) vs t0)
                         sn3 c (THeads (Flat Appl) vs (THead (Flat Cast) u t0))