DEFINITION drop1_gen_pcons()
TYPE =
       c1:C
         .c3:C
           .hds:PList
             .h:nat.d:nat.(drop1 (PCons h d hds) c1 c3)(ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3)
BODY =
        assume c1C
        assume c3C
        assume hdsPList
        assume hnat
        assume dnat
        suppose Hdrop1 (PCons h d hds) c1 c3
           assume yPList
           suppose H0drop1 y c1 c3
             we proceed by induction on H0 to prove (eq PList y (PCons h d hds))(ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3)
                case drop1_nil : c:C 
                   the thesis becomes H1:(eq PList PNil (PCons h d hds)).(ex2 C λc2:C.drop h d c c2 λc2:C.drop1 hds c2 c)
                      suppose H1eq PList PNil (PCons h d hds)
                         (H2
                            we proceed by induction on H1 to prove <λ:PList.Prop> CASE PCons h d hds OF PNilTrue | PCons   False
                               case refl_equal : 
                                  the thesis becomes <λ:PList.Prop> CASE PNil OF PNilTrue | PCons   False
                                     consider I
                                     we proved True
<λ:PList.Prop> CASE PNil OF PNilTrue | PCons   False
<λ:PList.Prop> CASE PCons h d hds OF PNilTrue | PCons   False
                         end of H2
                         consider H2
                         we proved <λ:PList.Prop> CASE PCons h d hds OF PNilTrue | PCons   False
                         that is equivalent to False
                         we proceed by induction on the previous result to prove ex2 C λc2:C.drop h d c c2 λc2:C.drop1 hds c2 c
                         we proved ex2 C λc2:C.drop h d c c2 λc2:C.drop1 hds c2 c
H1:(eq PList PNil (PCons h d hds)).(ex2 C λc2:C.drop h d c c2 λc2:C.drop1 hds c2 c)
                case drop1_cons : c2:C c4:C h0:nat d0:nat H1:drop h0 d0 c2 c4 c5:C hds0:PList H2:drop1 hds0 c4 c5 
                   the thesis becomes H4:(eq PList (PCons h0 d0 hds0) (PCons h d hds)).(ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5)
                   (H3) by induction hypothesis we know (eq PList hds0 (PCons h d hds))(ex2 C λc6:C.drop h d c4 c6 λc6:C.drop1 hds c6 c5)
                      suppose H4eq PList (PCons h0 d0 hds0) (PCons h d hds)
                         (H5
                            by (f_equal . . . . . H4)
                            we proved 
                               eq
                                 nat
                                 <λ:PList.nat> CASE PCons h0 d0 hds0 OF PNilh0 | PCons n  n
                                 <λ:PList.nat> CASE PCons h d hds OF PNilh0 | PCons n  n

                               eq
                                 nat
                                 λe:PList.<λ:PList.nat> CASE e OF PNilh0 | PCons n  n (PCons h0 d0 hds0)
                                 λe:PList.<λ:PList.nat> CASE e OF PNilh0 | PCons n  n (PCons h d hds)
                         end of H5
                         (h1
                            (H6
                               by (f_equal . . . . . H4)
                               we proved 
                                  eq
                                    nat
                                    <λ:PList.nat> CASE PCons h0 d0 hds0 OF PNild0 | PCons  n n
                                    <λ:PList.nat> CASE PCons h d hds OF PNild0 | PCons  n n

                                  eq
                                    nat
                                    λe:PList.<λ:PList.nat> CASE e OF PNild0 | PCons  n n (PCons h0 d0 hds0)
                                    λe:PList.<λ:PList.nat> CASE e OF PNild0 | PCons  n n (PCons h d hds)
                            end of H6
                            (h1
                               (H7
                                  by (f_equal . . . . . H4)
                                  we proved 
                                     eq
                                       PList
                                       <λ:PList.PList> CASE PCons h0 d0 hds0 OF PNilhds0 | PCons   pp
                                       <λ:PList.PList> CASE PCons h d hds OF PNilhds0 | PCons   pp

                                     eq
                                       PList
                                       λe:PList.<λ:PList.PList> CASE e OF PNilhds0 | PCons   pp (PCons h0 d0 hds0)
                                       λe:PList.<λ:PList.PList> CASE e OF PNilhds0 | PCons   pp (PCons h d hds)
                               end of H7
                                suppose H8eq nat d0 d
                                suppose H9eq nat h0 h
                                  (H11
                                     consider H7
                                     we proved 
                                        eq
                                          PList
                                          <λ:PList.PList> CASE PCons h0 d0 hds0 OF PNilhds0 | PCons   pp
                                          <λ:PList.PList> CASE PCons h d hds OF PNilhds0 | PCons   pp
                                     that is equivalent to eq PList hds0 hds
                                     we proceed by induction on the previous result to prove drop1 hds c4 c5
                                        case refl_equal : 
                                           the thesis becomes the hypothesis H2
drop1 hds c4 c5
                                  end of H11
                                  (H12
                                     we proceed by induction on H8 to prove drop h0 d c2 c4
                                        case refl_equal : 
                                           the thesis becomes the hypothesis H1
drop h0 d c2 c4
                                  end of H12
                                  (H13
                                     we proceed by induction on H9 to prove drop h d c2 c4
                                        case refl_equal : 
                                           the thesis becomes the hypothesis H12
drop h d c2 c4
                                  end of H13
                                  by (ex_intro2 . . . . H13 H11)
                                  we proved ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5
(eq nat d0 d)(eq nat h0 h)(ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5)
                            end of h1
                            (h2
                               consider H6
                               we proved 
                                  eq
                                    nat
                                    <λ:PList.nat> CASE PCons h0 d0 hds0 OF PNild0 | PCons  n n
                                    <λ:PList.nat> CASE PCons h d hds OF PNild0 | PCons  n n
eq nat d0 d
                            end of h2
                            by (h1 h2)
(eq nat h0 h)(ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5)
                         end of h1
                         (h2
                            consider H5
                            we proved 
                               eq
                                 nat
                                 <λ:PList.nat> CASE PCons h0 d0 hds0 OF PNilh0 | PCons n  n
                                 <λ:PList.nat> CASE PCons h d hds OF PNilh0 | PCons n  n
eq nat h0 h
                         end of h2
                         by (h1 h2)
                         we proved ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5
H4:(eq PList (PCons h0 d0 hds0) (PCons h d hds)).(ex2 C λc6:C.drop h d c2 c6 λc6:C.drop1 hds c6 c5)
             we proved (eq PList y (PCons h d hds))(ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3)
          we proved 
             y:PList
               .drop1 y c1 c3
                 (eq PList y (PCons h d hds))(ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3)
          by (insert_eq . . . . previous H)
          we proved ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3
       we proved 
          c1:C
            .c3:C
              .hds:PList
                .h:nat.d:nat.(drop1 (PCons h d hds) c1 c3)(ex2 C λc2:C.drop h d c1 c2 λc2:C.drop1 hds c2 c3)