DEFINITION le_minus_plus()
TYPE =
       z:nat
         .x:nat
           .le z x
             y:nat.(eq nat (minus (plus x y) z) (plus (minus x z) y))
BODY =
       assume znat
          we proceed by induction on z to prove 
             x:nat
               .le z x
                 y:nat.(eq nat (minus (plus x y) z) (plus (minus x z) y))
             case O : 
                the thesis becomes 
                x:nat
                  .le O x
                    y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                    assume xnat
                    suppose Hle O x
                      (H0
                         by cases on H we prove 
                            eq nat x x
                              y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                            case le_n 
                               the thesis becomes 
                                     eq nat O x
                                       y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                               suppose H0eq nat O x
                                  we proceed by induction on H0 to prove y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                                     case refl_equal : 
                                        the thesis becomes y:nat.(eq nat (minus (plus O y) O) (plus (minus O O) y))
                                           assume ynat
                                              by (minus_n_O .)
                                              we proved eq nat (plus O y) (minus (plus O y) O)
                                              that is equivalent to eq nat (plus (minus O O) y) (minus (plus O y) O)
                                              by (sym_eq . . . previous)
                                              we proved eq nat (minus (plus O y) O) (plus (minus O O) y)
y:nat.(eq nat (minus (plus O y) O) (plus (minus O O) y))
                                  we proved y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))

                                  eq nat O x
                                    y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                            case le_S m:nat H0:le O m 
                               the thesis becomes 
                                     H1:eq nat (S m) x
                                       .y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                               suppose H1eq nat (S m) x
                                   suppose le O m
                                   assume ynat
                                     by (refl_equal . .)
                                     we proved eq nat (plus (minus (S m) O) y) (plus (minus (S m) O) y)
                                     that is equivalent to eq nat (minus (plus (S m) y) O) (plus (minus (S m) O) y)

                                     le O m
                                       y:nat
                                            .eq nat (minus (plus (S m) y) O) (plus (minus (S m) O) y)
                                  by (previous H1 H0)
                                  we proved y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))

                                  H1:eq nat (S m) x
                                    .y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))

                            eq nat x x
                              y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
                      end of H0
                      by (refl_equal . .)
                      we proved eq nat x x
                      by (H0 previous)
                      we proved y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))

                      x:nat
                        .le O x
                          y:nat.(eq nat (minus (plus x y) O) (plus (minus x O) y))
             case S : z0:nat 
                the thesis becomes 
                x:nat
                  .le (S z0) x
                    y:nat.(eq nat (minus (plus x y) (S z0)) (plus (minus x (S z0)) y))
                (H) by induction hypothesis we know 
                   x:nat
                     .le z0 x
                       y:nat.(eq nat (minus (plus x y) z0) (plus (minus x z0) y))
                   assume xnat
                      we proceed by induction on x to prove 
                         le (S z0) x
                           y:nat.(eq nat (minus (plus x y) (S z0)) (plus (minus x (S z0)) y))
                         case O : 
                            the thesis becomes 
                            le (S z0) O
                              y:nat.(eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y))
                                suppose H0le (S z0) O
                                assume ynat
                                  (H1
                                     by cases on H0 we prove 
                                        eq nat O O
                                          eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                        case le_n 
                                           the thesis becomes 
                                                 eq nat (S z0) O
                                                   eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                           suppose H1eq nat (S z0) O
                                              (H2
                                                 we proceed by induction on H1 to prove <λ:nat.Prop> CASE O OF OFalse | S True
                                                    case refl_equal : 
                                                       the thesis becomes <λ:nat.Prop> CASE S z0 OF OFalse | S True
                                                          consider I
                                                          we proved True
<λ:nat.Prop> CASE S z0 OF OFalse | S True
<λ:nat.Prop> CASE O OF OFalse | S True
                                              end of H2
                                              consider H2
                                              we proved <λ:nat.Prop> CASE O OF OFalse | S True
                                              that is equivalent to False
                                              we proceed by induction on the previous result to prove eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                              we proved eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)

                                              eq nat (S z0) O
                                                eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                        case le_S m:nat H1:le (S z0) m 
                                           the thesis becomes 
                                                 H2:eq nat (S m) O
                                                   .eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                           suppose H2eq nat (S m) O
                                              (H3
                                                 we proceed by induction on H2 to prove <λ:nat.Prop> CASE O OF OFalse | S True
                                                    case refl_equal : 
                                                       the thesis becomes <λ:nat.Prop> CASE S m OF OFalse | S True
                                                          consider I
                                                          we proved True
<λ:nat.Prop> CASE S m OF OFalse | S True
<λ:nat.Prop> CASE O OF OFalse | S True
                                              end of H3
                                              consider H3
                                              we proved <λ:nat.Prop> CASE O OF OFalse | S True
                                              that is equivalent to False
                                              we proceed by induction on the previous result to prove 
                                                 le (S z0) m
                                                   eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                              we proved 
                                                 le (S z0) m
                                                   eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                              by (previous H1)
                                              we proved eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)

                                              H2:eq nat (S m) O
                                                .eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)

                                        eq nat O O
                                          eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)
                                  end of H1
                                  by (refl_equal . .)
                                  we proved eq nat O O
                                  by (H1 previous)
                                  we proved eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y)

                                  le (S z0) O
                                    y:nat.(eq nat (minus (plus O y) (S z0)) (plus (minus O (S z0)) y))
                         case S : n:nat 
                            the thesis becomes 
                            H1:le (S z0) (S n)
                              .y:nat.(eq nat (minus (plus n y) z0) (plus (minus n z0) y))
                            () by induction hypothesis we know 
                               le (S z0) n
                                 y:nat.(eq nat (minus (plus n y) (S z0)) (plus (minus n (S z0)) y))
                                suppose H1le (S z0) (S n)
                                assume ynat
                                  by (le_S_n . . H1)
                                  we proved le z0 n
                                  by (H . previous .)
                                  we proved eq nat (minus (plus n y) z0) (plus (minus n z0) y)
                                  that is equivalent to 
                                     eq
                                       nat
                                       minus (plus (S n) y) (S z0)
                                       plus (minus (S n) (S z0)) y

                                  H1:le (S z0) (S n)
                                    .y:nat.(eq nat (minus (plus n y) z0) (plus (minus n z0) y))
                      we proved 
                         le (S z0) x
                           y:nat.(eq nat (minus (plus x y) (S z0)) (plus (minus x (S z0)) y))

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