reserve D for non empty set;
reserve m,n,N for Nat;
reserve size for non zero Nat;
reserve f1,f2,f3,f4,f5,f6 for BinominativeFunction of D;
reserve p1,p2,p3,p4,p5,p6,p7 for PartialPredicate of D;
reserve d,v for object;
reserve V,A for set;
reserve z for Element of V;
reserve val for Function;
reserve loc for V-valued Function;
reserve d1 for NonatomicND of V,A;
reserve T for TypeSCNominativeData of V,A;
reserve n0 for Nat;

theorem Th18:
  V is non empty & A is complex-containing & A is_without_nonatomicND_wrt V &
  (for T holds loc/.1 is_a_value_on T & loc/.2 is_a_value_on T &
    loc/.4 is_a_value_on T & loc/.6 is_a_value_on T) &
  Seg 6 c= dom loc & loc|Seg 6 is one-to-one
  implies
  <* Fibonacci_inv(A,loc,n0),
     Fibonacci_main_loop(A,loc),
     PP_and(Equality(A,loc/.1,loc/.3),Fibonacci_inv(A,loc,n0)) *>
  is SFHT of ND(V,A)
  proof
    set i = loc/.1, j = loc/.2, n = loc/.3, s = loc/.4, b = loc/.5, c = loc/.6;
    set D = ND(V,A);
    set inv = Fibonacci_inv(A,loc,n0);
    set B = Fibonacci_loop_body(A,loc);
    set E = Equality(A,i,n);
    set N = PP_inversion(inv);
    assume that
A1: V is non empty & A is complex-containing &
    A is_without_nonatomicND_wrt V &
    (for T holds loc/.1 is_a_value_on T & loc/.2 is_a_value_on T &
    loc/.4 is_a_value_on T & loc/.6 is_a_value_on T) and
A2: Seg 6 c= dom loc and
A3: loc|Seg 6 is one-to-one;
    <*inv,B,inv*> is SFHT of D by A1,A2,A3,Th17;
    then
A4: <*PP_and(PP_not(E),inv),B,inv*> is SFHT of D by NOMIN_3:3,15;
    <*N,B,inv*> is SFHT of D by NOMIN_3:19;
    then <*PP_and(PP_not(E),N),B,inv*> is SFHT of D by NOMIN_3:3,15;
    hence thesis by A4,NOMIN_3:26;
  end;
