Article PRE_FF, MML version 4.99.1005

:: PRE_FF:funcnot 1 => PRE_FF:func 1
definition
  let a1, a2 be non empty set;
  let a3 be non empty Element of bool a1;
  let a4 be non empty Element of bool a2;
  let a5 be Element of [:a3,a4:];
  redefine func a5 `1 -> Element of a3;
end;

:: PRE_FF:funcnot 2 => PRE_FF:func 2
definition
  let a1, a2 be non empty set;
  let a3 be non empty Element of bool a1;
  let a4 be non empty Element of bool a2;
  let a5 be Element of [:a3,a4:];
  redefine func a5 `2 -> Element of a4;
end;

:: PRE_FF:funcnot 3 => PRE_FF:func 3
definition
  let a1 be natural set;
  func Fib A1 -> Element of NAT means
    ex b1 being Function-like quasi_total Relation of NAT,[:NAT,NAT:] st
       it = (b1 . a1) `1 &
        b1 . 0 = [0,1] &
        (for b2 being natural set holds
           b1 . (b2 + 1) = [(b1 . b2) `2,(b1 . b2) `1 + ((b1 . b2) `2)]);
end;

:: PRE_FF:def 1
theorem
for b1 being natural set
for b2 being Element of NAT holds
      b2 = Fib b1
   iff
      ex b3 being Function-like quasi_total Relation of NAT,[:NAT,NAT:] st
         b2 = (b3 . b1) `1 &
          b3 . 0 = [0,1] &
          (for b4 being natural set holds
             b3 . (b4 + 1) = [(b3 . b4) `2,(b3 . b4) `1 + ((b3 . b4) `2)]);

:: PRE_FF:th 1
theorem
Fib 0 = 0 &
 Fib 1 = 1 &
 (for b1 being natural set holds
    Fib ((b1 + 1) + 1) = (Fib b1) + Fib (b1 + 1));

:: PRE_FF:th 2
theorem
for b1 being integer set holds
   b1 div 1 = b1;

:: PRE_FF:th 3
theorem
for b1, b2 being integer set
      st 0 < b2 & b1 div b2 = 0
   holds b1 < b2;

:: PRE_FF:th 4
theorem
for b1, b2 being integer set
      st 0 <= b1 & b1 < b2
   holds b1 div b2 = 0;

:: PRE_FF:th 5
theorem
for b1, b2, b3 being integer set
      st 0 < b2 & 0 < b3
   holds (b1 div b2) div b3 = b1 div (b2 * b3);

:: PRE_FF:th 6
theorem
for b1 being integer set
      st b1 mod 2 <> 0
   holds b1 mod 2 = 1;

:: PRE_FF:th 7
theorem
for b1 being integer set
      st b1 is Element of NAT
   holds b1 div 2 is Element of NAT;

:: PRE_FF:th 10
theorem
for b1, b2, b3 being real set
      st b1 <= b2 & 1 < b3
   holds b3 to_power b1 <= b3 to_power b2;

:: PRE_FF:th 11
theorem
for b1, b2 being real set
      st b2 <= b1
   holds [\b2/] <= [\b1/];

:: PRE_FF:th 12
theorem
for b1, b2, b3 being real set
      st 1 < b1 & 0 < b2 & b2 <= b3
   holds log(b1,b2) <= log(b1,b3);

:: PRE_FF:th 13
theorem
for b1 being natural set
      st 0 < b1
   holds [\log(2,2 * b1)/] + 1 <> [\log(2,(2 * b1) + 1)/];

:: PRE_FF:th 14
theorem
for b1 being natural set
      st 0 < b1
   holds [\log(2,(2 * b1) + 1)/] <= [\log(2,2 * b1)/] + 1;

:: PRE_FF:th 15
theorem
for b1 being natural set
      st 0 < b1
   holds [\log(2,2 * b1)/] = [\log(2,(2 * b1) + 1)/];

:: PRE_FF:th 16
theorem
for b1 being natural set
      st 0 < b1
   holds [\log(2,b1)/] + 1 = [\log(2,(2 * b1) + 1)/];

:: PRE_FF:funcnot 4 => PRE_FF:func 4
definition
  let a1 be Function-like quasi_total Relation of NAT,NAT *;
  let a2 be Element of NAT;
  redefine func a1 . a2 -> FinSequence of NAT;
end;

:: PRE_FF:funcnot 5 => PRE_FF:func 5
definition
  let a1 be natural set;
  func Fusc A1 -> Element of NAT means
    it = 0
    if a1 = 0
    otherwise ex b1 being Element of NAT st
       ex b2 being Function-like quasi_total Relation of NAT,NAT * st
          b1 + 1 = a1 &
           it = (b2 . b1) /. a1 &
           b2 . 0 = <*1*> &
           (for b3 being natural set holds
              (for b4 being natural set
                     st b3 + 2 = 2 * b4
                  holds b2 . (b3 + 1) = (b2 . b3) ^ <*(b2 . b3) /. b4*>) &
               (for b4 being natural set
                     st b3 + 2 = (2 * b4) + 1
                  holds b2 . (b3 + 1) = (b2 . b3) ^ <*((b2 . b3) /. b4) + ((b2 . b3) /. (b4 + 1))*>));
end;

:: PRE_FF:def 2
theorem
for b1 being natural set
for b2 being Element of NAT holds
   (b1 = 0 implies    (b2 = Fusc b1
    iff
       b2 = 0)) &
    (b1 = 0 or    (b2 = Fusc b1
    iff
       ex b3 being Element of NAT st
          ex b4 being Function-like quasi_total Relation of NAT,NAT * st
             b3 + 1 = b1 &
              b2 = (b4 . b3) /. b1 &
              b4 . 0 = <*1*> &
              (for b5 being natural set holds
                 (for b6 being natural set
                        st b5 + 2 = 2 * b6
                     holds b4 . (b5 + 1) = (b4 . b5) ^ <*(b4 . b5) /. b6*>) &
                  (for b6 being natural set
                        st b5 + 2 = (2 * b6) + 1
                     holds b4 . (b5 + 1) = (b4 . b5) ^ <*((b4 . b5) /. b6) + ((b4 . b5) /. (b6 + 1))*>))));

:: PRE_FF:th 17
theorem
Fusc 0 = 0 &
 Fusc 1 = 1 &
 (for b1 being natural set holds
    Fusc (2 * b1) = Fusc b1 &
     Fusc ((2 * b1) + 1) = (Fusc b1) + Fusc (b1 + 1));

:: PRE_FF:th 18
theorem
for b1, b2 being natural set
      st b1 <> 0 & b1 = 2 * b2
   holds b2 < b1;

:: PRE_FF:th 19
theorem
for b1, b2 being natural set
      st b1 = (2 * b2) + 1
   holds b2 < b1;

:: PRE_FF:th 20
theorem
for b1, b2 being natural set holds
b2 = (b1 * Fusc 0) + (b2 * Fusc (0 + 1));

:: PRE_FF:th 21
theorem
for b1, b2, b3, b4, b5 being natural set
      st b1 = (2 * b2) + 1 &
         Fusc b5 = (b3 * Fusc b1) + (b4 * Fusc (b1 + 1))
   holds Fusc b5 = (b3 * Fusc b2) + ((b4 + b3) * Fusc (b2 + 1));

:: PRE_FF:th 22
theorem
for b1, b2, b3, b4, b5 being natural set
      st b1 = 2 * b2 &
         Fusc b5 = (b3 * Fusc b1) + (b4 * Fusc (b1 + 1))
   holds Fusc b5 = ((b3 + b4) * Fusc b2) + (b4 * Fusc (b2 + 1));