DEFINITION minus_minus()
TYPE =
       z:nat
         .x:nat
           .y:nat
             .le z x
               (le z y)(eq nat (minus x z) (minus y z))(eq nat x y)
BODY =
       assume znat
          we proceed by induction on z to prove 
             x:nat
               .y:nat
                 .le z x
                   (le z y)(eq nat (minus x z) (minus y z))(eq nat x y)
             case O : 
                the thesis becomes 
                x:nat
                  .y:nat
                    .le O x
                      (le O y)(eq nat (minus x O) (minus y O))(eq nat x y)
                    assume xnat
                    assume ynat
                    suppose le O x
                    suppose le O y
                    suppose H1eq nat (minus x O) (minus y O)
                      (H2
                         by (minus_n_O .)
                         we proved eq nat x (minus x O)
                         by (eq_ind_r . . . H1 . previous)
eq nat x (minus y O)
                      end of H2
                      (H3
                         by (minus_n_O .)
                         we proved eq nat y (minus y O)
                         by (eq_ind_r . . . H2 . previous)
eq nat x y
                      end of H3
                      consider H3
                      we proved eq nat x y

                      x:nat
                        .y:nat
                          .le O x
                            (le O y)(eq nat (minus x O) (minus y O))(eq nat x y)
             case S : z0:nat 
                the thesis becomes 
                x:nat
                  .y:nat
                    .le (S z0) x
                      (le (S z0) y
                           (eq nat (minus x (S z0)) (minus y (S z0)))(eq nat x y))
                (IH) by induction hypothesis we know 
                   x:nat
                     .y:nat
                       .le z0 x
                         (le z0 y)(eq nat (minus x z0) (minus y z0))(eq nat x y)
                   assume xnat
                      we proceed by induction on x to prove 
                         y:nat
                           .le (S z0) x
                             (le (S z0) y
                                  (eq nat (minus x (S z0)) (minus y (S z0)))(eq nat x y))
                         case O : 
                            the thesis becomes 
                            y:nat
                              .le (S z0) O
                                (le (S z0) y
                                     (eq nat (minus O (S z0)) (minus y (S z0)))(eq nat O y))
                                assume ynat
                                suppose Hle (S z0) O
                                suppose le (S z0) y
                                suppose eq nat (minus O (S z0)) (minus y (S z0))
                                  by (le_gen_S . . H)
                                  we proved ex2 nat λn:nat.eq nat O (S n) λn:nat.le z0 n
                                  we proceed by induction on the previous result to prove eq nat O y
                                     case ex_intro2 : x0:nat H2:eq nat O (S x0) :le z0 x0 
                                        the thesis becomes eq nat O y
                                           (H4
                                              we proceed by induction on H2 to prove <λ:nat.Prop> CASE S x0 OF OTrue | S False
                                                 case refl_equal : 
                                                    the thesis becomes <λ:nat.Prop> CASE O OF OTrue | S False
                                                       consider I
                                                       we proved True
<λ:nat.Prop> CASE O OF OTrue | S False
<λ:nat.Prop> CASE S x0 OF OTrue | S False
                                           end of H4
                                           consider H4
                                           we proved <λ:nat.Prop> CASE S x0 OF OTrue | S False
                                           that is equivalent to False
                                           we proceed by induction on the previous result to prove eq nat O y
eq nat O y
                                  we proved eq nat O y

                                  y:nat
                                    .le (S z0) O
                                      (le (S z0) y
                                           (eq nat (minus O (S z0)) (minus y (S z0)))(eq nat O y))
                         case S : x0:nat 
                            the thesis becomes 
                            y:nat
                              .le (S z0) (S x0)
                                (le (S z0) y
                                     (eq nat (minus (S x0) (S z0)) (minus y (S z0)))(eq nat (S x0) y))
                            () by induction hypothesis we know 
                               y:nat
                                 .le (S z0) x0
                                   (le (S z0) y
                                        (eq nat (minus x0 (S z0)) (minus y (S z0)))(eq nat x0 y))
                               assume ynat
                                  we proceed by induction on y to prove 
                                     le (S z0) (S x0)
                                       (le (S z0) y
                                            (eq nat (minus (S x0) (S z0)) (minus y (S z0)))(eq nat (S x0) y))
                                     case O : 
                                        the thesis becomes 
                                        le (S z0) (S x0)
                                          (le (S z0) O
                                               (eq nat (minus (S x0) (S z0)) (minus O (S z0)))(eq nat (S x0) O))
                                            suppose Hle (S z0) (S x0)
                                            suppose H0le (S z0) O
                                            suppose eq nat (minus (S x0) (S z0)) (minus O (S z0))
                                              by (le_gen_S . . H0)
                                              we proved ex2 nat λn:nat.eq nat O (S n) λn:nat.le z0 n
                                              we proceed by induction on the previous result to prove eq nat (S x0) O
                                                 case ex_intro2 : x1:nat H2:eq nat O (S x1) :le z0 x1 
                                                    the thesis becomes eq nat (S x0) O
                                                       (H4
                                                          we proceed by induction on H2 to prove <λ:nat.Prop> CASE S x1 OF OTrue | S False
                                                             case refl_equal : 
                                                                the thesis becomes <λ:nat.Prop> CASE O OF OTrue | S False
                                                                   consider I
                                                                   we proved True
<λ:nat.Prop> CASE O OF OTrue | S False
<λ:nat.Prop> CASE S x1 OF OTrue | S False
                                                       end of H4
                                                       consider H4
                                                       we proved <λ:nat.Prop> CASE S x1 OF OTrue | S False
                                                       that is equivalent to False
                                                       we proceed by induction on the previous result to prove eq nat (S x0) O
eq nat (S x0) O
                                              we proved eq nat (S x0) O

                                              le (S z0) (S x0)
                                                (le (S z0) O
                                                     (eq nat (minus (S x0) (S z0)) (minus O (S z0)))(eq nat (S x0) O))
                                     case S : y0:nat 
                                        the thesis becomes 
                                        H:le (S z0) (S x0)
                                          .H0:le (S z0) (S y0)
                                            .H1:eq nat (minus (S x0) (S z0)) (minus (S y0) (S z0))
                                              .eq nat (S x0) (S y0)
                                        () by induction hypothesis we know 
                                           le (S z0) (S x0)
                                             (le (S z0) y0
                                                  (eq nat (minus (S x0) (S z0)) (minus y0 (S z0)))(eq nat (S x0) y0))
                                            suppose Hle (S z0) (S x0)
                                            suppose H0le (S z0) (S y0)
                                            suppose H1eq nat (minus (S x0) (S z0)) (minus (S y0) (S z0))
                                              (h1by (le_S_n . . H) we proved le z0 x0
                                              (h2by (le_S_n . . H0) we proved le z0 y0
                                              (h3
                                                 consider H1
                                                 we proved eq nat (minus (S x0) (S z0)) (minus (S y0) (S z0))
eq nat (minus x0 z0) (minus y0 z0)
                                              end of h3
                                              by (IH . . h1 h2 h3)
                                              we proved eq nat x0 y0
                                              by (f_equal . . . . . previous)
                                              we proved eq nat (S x0) (S y0)

                                              H:le (S z0) (S x0)
                                                .H0:le (S z0) (S y0)
                                                  .H1:eq nat (minus (S x0) (S z0)) (minus (S y0) (S z0))
                                                    .eq nat (S x0) (S y0)
                                  we proved 
                                     le (S z0) (S x0)
                                       (le (S z0) y
                                            (eq nat (minus (S x0) (S z0)) (minus y (S z0)))(eq nat (S x0) y))

                                  y:nat
                                    .le (S z0) (S x0)
                                      (le (S z0) y
                                           (eq nat (minus (S x0) (S z0)) (minus y (S z0)))(eq nat (S x0) y))
                      we proved 
                         y:nat
                           .le (S z0) x
                             (le (S z0) y
                                  (eq nat (minus x (S z0)) (minus y (S z0)))(eq nat x y))

                      x:nat
                        .y:nat
                          .le (S z0) x
                            (le (S z0) y
                                 (eq nat (minus x (S z0)) (minus y (S z0)))(eq nat x y))
          we proved 
             x:nat
               .y:nat
                 .le z x
                   (le z y)(eq nat (minus x z) (minus y z))(eq nat x y)
       we proved 
          z:nat
            .x:nat
              .y:nat
                .le z x
                  (le z y)(eq nat (minus x z) (minus y z))(eq nat x y)