DEFINITION bge_le()
TYPE =
       x:nat.y:nat.(eq bool (blt y x) false)(le x y)
BODY =
       assume xnat
          we proceed by induction on x to prove y:nat.(eq bool (blt y x) false)(le x y)
             case O : 
                the thesis becomes y:nat.(eq bool (blt y Ofalse)(le O y)
                    assume ynat
                    suppose eq bool (blt y Ofalse
                      by (le_O_n .)
                      we proved le O y
y:nat.(eq bool (blt y Ofalse)(le O y)
             case S : n:nat 
                the thesis becomes y:nat.(eq bool (blt y (S n)) false)(le (S n) y)
                (H) by induction hypothesis we know y:nat.(eq bool (blt y n) false)(le n y)
                   assume ynat
                      we proceed by induction on y to prove (eq bool (blt y (S n)) false)(le (S n) y)
                         case O : 
                            the thesis becomes (eq bool (blt O (S n)) false)(le (S n) O)
                               suppose H0eq bool (blt O (S n)) false
                                  (H1
                                     by cases on H0 we prove (eq bool false false)(le (S n) O)
                                        case refl_equal 
                                           the thesis becomes (eq bool (blt O (S n)) false)(le (S n) O)
                                           suppose H1eq bool (blt O (S n)) false
                                              (H2
                                                 we proceed by induction on H1 to prove <λ:bool.Prop> CASE false OF trueTrue | falseFalse
                                                    case refl_equal : 
                                                       the thesis becomes <λ:bool.Prop> CASE blt O (S n) OF trueTrue | falseFalse
                                                          consider I
                                                          we proved True
<λ:bool.Prop> CASE blt O (S n) OF trueTrue | falseFalse
<λ:bool.Prop> CASE false OF trueTrue | falseFalse
                                              end of H2
                                              consider H2
                                              we proved <λ:bool.Prop> CASE false OF trueTrue | falseFalse
                                              that is equivalent to False
                                              we proceed by induction on the previous result to prove le (S n) O
                                              we proved le (S n) O
(eq bool (blt O (S n)) false)(le (S n) O)
(eq bool false false)(le (S n) O)
                                  end of H1
                                  by (refl_equal . .)
                                  we proved eq bool false false
                                  by (H1 previous)
                                  we proved le (S n) O
(eq bool (blt O (S n)) false)(le (S n) O)
                         case S : n0:nat 
                            the thesis becomes H1:(eq bool (blt (S n0) (S n)) false).(le (S n) (S n0))
                            () by induction hypothesis we know (eq bool (blt n0 (S n)) false)(le (S n) n0)
                               suppose H1eq bool (blt (S n0) (S n)) false
                                  consider H1
                                  we proved eq bool (blt (S n0) (S n)) false
                                  that is equivalent to eq bool (blt n0 n) false
                                  by (H . previous)
                                  we proved le n n0
                                  by (le_n_S . . previous)
                                  we proved le (S n) (S n0)
                                  by (le_n_S . . previous)
                                  we proved le (S (S n)) (S (S n0))
                                  by (le_S_n . . previous)
                                  we proved le (S n) (S n0)
H1:(eq bool (blt (S n0) (S n)) false).(le (S n) (S n0))
                      we proved (eq bool (blt y (S n)) false)(le (S n) y)
y:nat.(eq bool (blt y (S n)) false)(le (S n) y)
          we proved y:nat.(eq bool (blt y x) false)(le x y)
       we proved x:nat.y:nat.(eq bool (blt y x) false)(le x y)