DEFINITION dnf_dec2()
TYPE =
       t:T
         .d:nat
           .or
             w:T.(ex T λv:T.subst0 d w t (lift (S O) d v))
             ex T λv:T.eq T t (lift (S O) d v)
BODY =
       assume tT
          we proceed by induction on t to prove 
             d:nat
               .or
                 w:T.(ex T λv:T.subst0 d w t (lift (S O) d v))
                 ex T λv:T.eq T t (lift (S O) d v)
             case TSort : n:nat 
                the thesis becomes 
                d:nat
                  .or
                    w:T.(ex T λv:T.subst0 d w (TSort n) (lift (S O) d v))
                    ex T λv:T.eq T (TSort n) (lift (S O) d v)
                   assume dnat
                      (h1
                         by (refl_equal . .)
eq T (TSort n) (TSort n)
                      end of h1
                      (h2
                         by (lift_sort . . .)
eq T (lift (S O) d (TSort n)) (TSort n)
                      end of h2
                      by (eq_ind_r . . . h1 . h2)
                      we proved eq T (TSort n) (lift (S O) d (TSort n))
                      by (ex_intro . . . previous)
                      we proved ex T λv:T.eq T (TSort n) (lift (S O) d v)
                      by (or_intror . . previous)
                      we proved 
                         or
                           w:T.(ex T λv:T.subst0 d w (TSort n) (lift (S O) d v))
                           ex T λv:T.eq T (TSort n) (lift (S O) d v)

                      d:nat
                        .or
                          w:T.(ex T λv:T.subst0 d w (TSort n) (lift (S O) d v))
                          ex T λv:T.eq T (TSort n) (lift (S O) d v)
             case TLRef : n:nat 
                the thesis becomes 
                d:nat
                  .or
                    w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                    ex T λv:T.eq T (TLRef n) (lift (S O) d v)
                   assume dnat
                      (h1
                         suppose Hlt n d
                            (h1
                               by (refl_equal . .)
eq T (TLRef n) (TLRef n)
                            end of h1
                            (h2
                               by (lift_lref_lt . . . H)
eq T (lift (S O) d (TLRef n)) (TLRef n)
                            end of h2
                            by (eq_ind_r . . . h1 . h2)
                            we proved eq T (TLRef n) (lift (S O) d (TLRef n))
                            by (ex_intro . . . previous)
                            we proved ex T λv:T.eq T (TLRef n) (lift (S O) d v)
                            by (or_intror . . previous)
                            we proved 
                               or
                                 w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                 ex T λv:T.eq T (TLRef n) (lift (S O) d v)

                            lt n d
                              (or
                                   w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                   ex T λv:T.eq T (TLRef n) (lift (S O) d v))
                      end of h1
                      (h2
                         suppose Heq nat n d
                            we proceed by induction on H to prove 
                               or
                                 w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                 ex T λv:T.eq T (TLRef n) (lift (S O) d v)
                               case refl_equal : 
                                  the thesis becomes 
                                  or
                                    w:T.(ex T λv:T.subst0 n w (TLRef n) (lift (S O) n v))
                                    ex T λv:T.eq T (TLRef n) (lift (S O) n v)
                                     assume wT
                                        (h1
                                           by (subst0_lref . .)
                                           we proved subst0 n w (TLRef n) (lift (S n) O w)
subst0 n w (TLRef n) (lift (plus (S O) n) O w)
                                        end of h1
                                        (h2
                                           (h1
                                              by (le_n .)
                                              we proved le (plus O n) (plus O n)
le n (plus O n)
                                           end of h1
                                           (h2by (le_O_n .) we proved le O n
                                           by (lift_free . . . . . h1 h2)
eq T (lift (S O) n (lift n O w)) (lift (plus (S O) n) O w)
                                        end of h2
                                        by (eq_ind_r . . . h1 . h2)
                                        we proved subst0 n w (TLRef n) (lift (S O) n (lift n O w))
                                        by (ex_intro . . . previous)
                                        we proved ex T λv:T.subst0 n w (TLRef n) (lift (S O) n v)
                                     we proved w:T.(ex T λv:T.subst0 n w (TLRef n) (lift (S O) n v))
                                     by (or_introl . . previous)

                                        or
                                          w:T.(ex T λv:T.subst0 n w (TLRef n) (lift (S O) n v))
                                          ex T λv:T.eq T (TLRef n) (lift (S O) n v)
                            we proved 
                               or
                                 w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                 ex T λv:T.eq T (TLRef n) (lift (S O) d v)

                            eq nat n d
                              (or
                                   w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                   ex T λv:T.eq T (TLRef n) (lift (S O) d v))
                      end of h2
                      (h3
                         suppose Hlt d n
                            (h1
                               by (refl_equal . .)
eq T (TLRef n) (TLRef n)
                            end of h1
                            (h2
                               by (lift_lref_gt . . H)
eq T (lift (S O) d (TLRef (pred n))) (TLRef n)
                            end of h2
                            by (eq_ind_r . . . h1 . h2)
                            we proved eq T (TLRef n) (lift (S O) d (TLRef (pred n)))
                            by (ex_intro . . . previous)
                            we proved ex T λv:T.eq T (TLRef n) (lift (S O) d v)
                            by (or_intror . . previous)
                            we proved 
                               or
                                 w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                 ex T λv:T.eq T (TLRef n) (lift (S O) d v)

                            lt d n
                              (or
                                   w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                                   ex T λv:T.eq T (TLRef n) (lift (S O) d v))
                      end of h3
                      by (lt_eq_gt_e . . . h1 h2 h3)
                      we proved 
                         or
                           w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                           ex T λv:T.eq T (TLRef n) (lift (S O) d v)

                      d:nat
                        .or
                          w:T.(ex T λv:T.subst0 d w (TLRef n) (lift (S O) d v))
                          ex T λv:T.eq T (TLRef n) (lift (S O) d v)
             case THead : k:K t0:T t1:T 
                the thesis becomes 
                d:nat
                  .or
                    w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                    ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                (H) by induction hypothesis we know 
                   d:nat
                     .or
                       w:T.(ex T λv:T.subst0 d w t0 (lift (S O) d v))
                       ex T λv:T.eq T t0 (lift (S O) d v)
                (H0) by induction hypothesis we know 
                   d:nat
                     .or
                       w:T.(ex T λv:T.subst0 d w t1 (lift (S O) d v))
                       ex T λv:T.eq T t1 (lift (S O) d v)
                   assume dnat
                      (H_x
                         by (H .)

                            or
                              w:T.(ex T λv:T.subst0 d w t0 (lift (S O) d v))
                              ex T λv:T.eq T t0 (lift (S O) d v)
                      end of H_x
                      (H1consider H_x
                      we proceed by induction on H1 to prove 
                         or
                           w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                           ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                         case or_introl : H2:w:T.(ex T λv:T.subst0 d w t0 (lift (S O) d v)) 
                            the thesis becomes 
                            or
                              w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                              ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                               (H_x0
                                  by (H0 .)

                                     or
                                       w:T.(ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v))
                                       ex T λv:T.eq T t1 (lift (S O) (s k d) v)
                               end of H_x0
                               (H3consider H_x0
                               we proceed by induction on H3 to prove 
                                  or
                                    w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                    ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                  case or_introl : H4:w:T.(ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v)) 
                                     the thesis becomes 
                                     or
                                       w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                       ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                        assume wT
                                           (H_x1
                                              by (H4 .)
ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v)
                                           end of H_x1
                                           (H5consider H_x1
                                           we proceed by induction on H5 to prove ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                              case ex_intro : x:T H6:subst0 (s k d) w t1 (lift (S O) (s k d) x) 
                                                 the thesis becomes ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                                    (H_x2
                                                       by (H2 .)
ex T λv:T.subst0 d w t0 (lift (S O) d v)
                                                    end of H_x2
                                                    (H7consider H_x2
                                                    we proceed by induction on H7 to prove ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                                       case ex_intro : x0:T H8:subst0 d w t0 (lift (S O) d x0) 
                                                          the thesis becomes ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                                             (h1
                                                                by (subst0_both . . . . H8 . . . H6)

                                                                   subst0 d w (THead k t0 t1) (THead k (lift (S O) d x0) (lift (S O) (s k d) x))
                                                             end of h1
                                                             (h2
                                                                by (lift_head . . . . .)

                                                                   eq
                                                                     T
                                                                     lift (S O) d (THead k x0 x)
                                                                     THead k (lift (S O) d x0) (lift (S O) (s k d) x)
                                                             end of h2
                                                             by (eq_ind_r . . . h1 . h2)
                                                             we proved subst0 d w (THead k t0 t1) (lift (S O) d (THead k x0 x))
                                                             by (ex_intro . . . previous)
ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                           we proved ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v)
                                        we proved w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                        by (or_introl . . previous)

                                           or
                                             w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                             ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                  case or_intror : H4:ex T λv:T.eq T t1 (lift (S O) (s k d) v) 
                                     the thesis becomes 
                                     or
                                       w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                       ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                        we proceed by induction on H4 to prove 
                                           or
                                             w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                             ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                           case ex_intro : x:T H5:eq T t1 (lift (S O) (s k d) x) 
                                              the thesis becomes 
                                              or
                                                w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                                 assume wT
                                                    (H_x1
                                                       by (H2 .)
ex T λv:T.subst0 d w t0 (lift (S O) d v)
                                                    end of H_x1
                                                    (H6consider H_x1
                                                    we proceed by induction on H6 to prove 
                                                       ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                       case ex_intro : x0:T H7:subst0 d w t0 (lift (S O) d x0) 
                                                          the thesis becomes 
                                                          ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                             (h1
                                                                by (subst0_fst . . . . H7 . .)

                                                                   subst0
                                                                     d
                                                                     w
                                                                     THead k t0 (lift (S O) (s k d) x)
                                                                     THead k (lift (S O) d x0) (lift (S O) (s k d) x)
                                                             end of h1
                                                             (h2
                                                                by (lift_head . . . . .)

                                                                   eq
                                                                     T
                                                                     lift (S O) d (THead k x0 x)
                                                                     THead k (lift (S O) d x0) (lift (S O) (s k d) x)
                                                             end of h2
                                                             by (eq_ind_r . . . h1 . h2)
                                                             we proved 
                                                                subst0
                                                                  d
                                                                  w
                                                                  THead k t0 (lift (S O) (s k d) x)
                                                                  lift (S O) d (THead k x0 x)
                                                             by (ex_intro . . . previous)

                                                                ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                    we proved 
                                                       ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                 we proved 
                                                    w:T
                                                      .ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                 by (or_introl . . previous)
                                                 we proved 
                                                    or
                                                      w:T
                                                        .ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                      ex
                                                        T
                                                        λv:T.eq T (THead k t0 (lift (S O) (s k d) x)) (lift (S O) d v)
                                                 by (eq_ind_r . . . previous . H5)

                                                    or
                                                      w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                      ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                                           or
                                             w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                             ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                                  or
                                    w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                    ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                         case or_intror : H2:ex T λv:T.eq T t0 (lift (S O) d v) 
                            the thesis becomes 
                            or
                              w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                              ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                               we proceed by induction on H2 to prove 
                                  or
                                    w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                    ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                  case ex_intro : x:T H3:eq T t0 (lift (S O) d x) 
                                     the thesis becomes 
                                     or
                                       w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                       ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                        (H_x0
                                           by (H0 .)

                                              or
                                                w:T.(ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v))
                                                ex T λv:T.eq T t1 (lift (S O) (s k d) v)
                                        end of H_x0
                                        (H4consider H_x0
                                        we proceed by induction on H4 to prove 
                                           or
                                             w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                             ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                           case or_introl : H5:w:T.(ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v)) 
                                              the thesis becomes 
                                              or
                                                w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                                 assume wT
                                                    (H_x1
                                                       by (H5 .)
ex T λv:T.subst0 (s k d) w t1 (lift (S O) (s k d) v)
                                                    end of H_x1
                                                    (H6consider H_x1
                                                    we proceed by induction on H6 to prove ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v)
                                                       case ex_intro : x0:T H7:subst0 (s k d) w t1 (lift (S O) (s k d) x0) 
                                                          the thesis becomes ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v)
                                                             (h1
                                                                by (subst0_snd . . . . . H7 .)

                                                                   subst0
                                                                     d
                                                                     w
                                                                     THead k (lift (S O) d x) t1
                                                                     THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                             end of h1
                                                             (h2
                                                                by (lift_head . . . . .)

                                                                   eq
                                                                     T
                                                                     lift (S O) d (THead k x x0)
                                                                     THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                             end of h2
                                                             by (eq_ind_r . . . h1 . h2)
                                                             we proved subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d (THead k x x0))
                                                             by (ex_intro . . . previous)
ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v)
                                                    we proved ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v)
                                                 we proved w:T.(ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v))
                                                 by (or_introl . . previous)
                                                 we proved 
                                                    or
                                                      w:T.(ex T λv:T.subst0 d w (THead k (lift (S O) d x) t1) (lift (S O) d v))
                                                      ex T λv:T.eq T (THead k (lift (S O) d x) t1) (lift (S O) d v)
                                                 by (eq_ind_r . . . previous . H3)

                                                    or
                                                      w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                      ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                           case or_intror : H5:ex T λv:T.eq T t1 (lift (S O) (s k d) v) 
                                              the thesis becomes 
                                              or
                                                w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                                 we proceed by induction on H5 to prove 
                                                    or
                                                      w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                      ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                                    case ex_intro : x0:T H6:eq T t1 (lift (S O) (s k d) x0) 
                                                       the thesis becomes 
                                                       or
                                                         w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                         ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                                                          (h1
                                                             by (refl_equal . .)

                                                                eq
                                                                  T
                                                                  THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                                  THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                          end of h1
                                                          (h2
                                                             by (lift_head . . . . .)

                                                                eq
                                                                  T
                                                                  lift (S O) d (THead k x x0)
                                                                  THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                          end of h2
                                                          by (eq_ind_r . . . h1 . h2)
                                                          we proved 
                                                             eq
                                                               T
                                                               THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                               lift (S O) d (THead k x x0)
                                                          by (ex_intro . . . previous)
                                                          we proved 
                                                             ex
                                                               T
                                                               λv:T
                                                                 .eq
                                                                   T
                                                                   THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                                   lift (S O) d v
                                                          by (or_intror . . previous)
                                                          we proved 
                                                             or
                                                               w:T
                                                                 .ex
                                                                   T
                                                                   λv:T
                                                                     .subst0
                                                                       d
                                                                       w
                                                                       THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                                       lift (S O) d v
                                                               ex
                                                                 T
                                                                 λv:T
                                                                   .eq
                                                                     T
                                                                     THead k (lift (S O) d x) (lift (S O) (s k d) x0)
                                                                     lift (S O) d v
                                                          by (eq_ind_r . . . previous . H3)
                                                          we proved 
                                                             or
                                                               w:T
                                                                 .ex T λv:T.subst0 d w (THead k t0 (lift (S O) (s k d) x0)) (lift (S O) d v)
                                                               ex T λv:T.eq T (THead k t0 (lift (S O) (s k d) x0)) (lift (S O) d v)
                                                          by (eq_ind_r . . . previous . H6)

                                                             or
                                                               w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                               ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                                                    or
                                                      w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                                      ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                                           or
                                             w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                             ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                                  or
                                    w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                                    ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
                      we proved 
                         or
                           w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                           ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)

                      d:nat
                        .or
                          w:T.(ex T λv:T.subst0 d w (THead k t0 t1) (lift (S O) d v))
                          ex T λv:T.eq T (THead k t0 t1) (lift (S O) d v)
          we proved 
             d:nat
               .or
                 w:T.(ex T λv:T.subst0 d w t (lift (S O) d v))
                 ex T λv:T.eq T t (lift (S O) d v)
       we proved 
          t:T
            .d:nat
              .or
                w:T.(ex T λv:T.subst0 d w t (lift (S O) d v))
                ex T λv:T.eq T t (lift (S O) d v)