reserve k,m,n,p for Nat;

theorem
  for m, n being Nat holds Fib(m) gcd Fib(n) = Fib(m gcd n)
proof
  defpred P[Nat,Nat] means Fib($1) gcd Fib($2) = Fib($1 gcd $2);
A1: for k st (for m, n st (m < k & n < k) holds P[m,n]) holds for m st m <=
  k holds P[k,m]
  proof
    let k;
    assume
A2: for m, n st m < k & n < k holds P[m,n];
    let m;
    assume
A3: m <= k;
    per cases by A3,XXREAL_0:1;
    suppose
A4:   m = k;
      hence Fib k gcd Fib m = Fib k by NAT_D:32
        .= Fib(k gcd m) by A4,NAT_D:32;
    end;
    suppose
A5:   m < k;
      thus thesis
      proof
        per cases;
        suppose
A6:       m = 0;
          then Fib(k) gcd Fib(m) = Fib(k) by NEWTON:52,PRE_FF:1;
          hence thesis by A6,NEWTON:52;
        end;
        suppose
A7:       m > 0;
          thus thesis
          proof
            consider r be Nat such that
A8:         k = m + r by A3,NAT_1:10;
            reconsider r as Element of NAT by ORDINAL1:def 12;
A9:        r <= k by A8,NAT_1:11;
            r <> 0 by A5,A8;
            then consider rr being Nat such that
A10:        r = rr + 1 by NAT_1:6;
            reconsider rr as Element of NAT by ORDINAL1:def 12;
            Fib(k) = (Fib(rr+1) * Fib(m+1)) + (Fib (rr) * Fib(m)) by A8,A10,Th4
;
            then
A11:        Fib
(k) gcd Fib(m) = Fib(m) gcd (Fib(m+1) * Fib(r)) by A10,EULER_1:8;
            Fib(m) gcd Fib(m+1) = 1 by Lm7;
            then
A12:        Fib(k) gcd Fib(m) = Fib(m) gcd Fib(r) by A11,Th2;
            r <> k by A7,A8;
            then
A13:        r < k by A9,XXREAL_0:1;
            k gcd m = m gcd r by A8,Th1;
            hence thesis by A2,A5,A12,A13;
          end;
        end;
      end;
    end;
  end;
A14: for m, n holds P[m,n] implies P[n,m];
  thus for m, n holds P[m,n] from BinInd(A14,A1);
end;
