DEFINITION sn3_appl_appls()
TYPE =
       v1:T
         .t1:T
           .vs:TList
             .let u1 := THeads (Flat Appl) (TCons v1 vs) t1
             in c:C
                    .sn3 c u1
                      v2:T
                           .sn3 c v2
                             (u2:T.(pr3 c u1 u2)((iso u1 u2)P:Prop.P)(sn3 c (THead (Flat Appl) v2 u2))
                                  sn3 c (THead (Flat Appl) v2 u1))
BODY =
        assume v1T
        assume t1T
        assume vsTList
          we must prove 
                let u1 := THeads (Flat Appl) (TCons v1 vs) t1
                in c:C
                       .sn3 c u1
                         v2:T
                              .sn3 c v2
                                (u2:T.(pr3 c u1 u2)((iso u1 u2)P:Prop.P)(sn3 c (THead (Flat Appl) v2 u2))
                                     sn3 c (THead (Flat Appl) v2 u1))
          or equivalently 
                c:C
                  .sn3 c (THeads (Flat Appl) (TCons v1 vs) t1)
                    v2:T
                         .sn3 c v2
                           (u2:T
                                  .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                    ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                         sn3 c (THead (Flat Appl) v2 u2))
                                sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
          assume cC
             we must prove 
                   sn3 c (THeads (Flat Appl) (TCons v1 vs) t1)
                     v2:T
                          .sn3 c v2
                            (u2:T
                                   .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                     ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                          sn3 c (THead (Flat Appl) v2 u2))
                                 sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
             or equivalently 
                   sn3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1))
                     v2:T
                          .sn3 c v2
                            (u2:T
                                   .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                     ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                          sn3 c (THead (Flat Appl) v2 u2))
                                 sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
              suppose Hsn3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1))
              assume v2T
              suppose H0sn3 c v2
                we must prove 
                      u2:T
                          .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                            ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                 sn3 c (THead (Flat Appl) v2 u2))
                        sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1))
                or equivalently 
                      u2:T
                          .pr3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                            (iso (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                                   P:Prop.P
                                 sn3 c (THead (Flat Appl) v2 u2))
                        sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1))
                suppose H1
                   u2:T
                     .pr3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                       (iso (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                              P:Prop.P
                            sn3 c (THead (Flat Appl) v2 u2))
                   by (sn3_appl_appl . . . H . H0 H1)
                   we proved 
                      sn3
                        c
                        THead
                          Flat Appl
                          v2
                          THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)
                   that is equivalent to sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1))
                we proved 
                   u2:T
                       .pr3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                         (iso (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1)) u2
                                P:Prop.P
                              sn3 c (THead (Flat Appl) v2 u2))
                     sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1))
                that is equivalent to 
                   u2:T
                       .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                         ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                              sn3 c (THead (Flat Appl) v2 u2))
                     sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1))
             we proved 
                sn3 c (THead (Flat Appl) v1 (THeads (Flat Appl) vs t1))
                  v2:T
                       .sn3 c v2
                         (u2:T
                                .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                  ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                       sn3 c (THead (Flat Appl) v2 u2))
                              sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
             that is equivalent to 
                sn3 c (THeads (Flat Appl) (TCons v1 vs) t1)
                  v2:T
                       .sn3 c v2
                         (u2:T
                                .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                  ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                       sn3 c (THead (Flat Appl) v2 u2))
                              sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
          we proved 
             c:C
               .sn3 c (THeads (Flat Appl) (TCons v1 vs) t1)
                 v2:T
                      .sn3 c v2
                        (u2:T
                               .pr3 c (THeads (Flat Appl) (TCons v1 vs) t1) u2
                                 ((iso (THeads (Flat Appl) (TCons v1 vs) t1) u2)P:Prop.P
                                      sn3 c (THead (Flat Appl) v2 u2))
                             sn3 c (THead (Flat Appl) v2 (THeads (Flat Appl) (TCons v1 vs) t1)))
          that is equivalent to 
             let u1 := THeads (Flat Appl) (TCons v1 vs) t1
             in c:C
                    .sn3 c u1
                      v2:T
                           .sn3 c v2
                             (u2:T.(pr3 c u1 u2)((iso u1 u2)P:Prop.P)(sn3 c (THead (Flat Appl) v2 u2))
                                  sn3 c (THead (Flat Appl) v2 u1))
       we proved 
          v1:T
            .t1:T
              .vs:TList
                .let u1 := THeads (Flat Appl) (TCons v1 vs) t1
                in c:C
                       .sn3 c u1
                         v2:T
                              .sn3 c v2
                                (u2:T.(pr3 c u1 u2)((iso u1 u2)P:Prop.P)(sn3 c (THead (Flat Appl) v2 u2))
                                     sn3 c (THead (Flat Appl) v2 u1))