reserve v for object;
reserve V,A for set;
reserve f for SCBinominativeFunction of V,A;
reserve d for TypeSCNominativeData of V,A;
reserve d1 for NonatomicND of V,A;
reserve a,b,c,z for Element of V;
reserve x,y for object;
reserve p,q,r,s for SCPartialNominativePredicate of V,A;
reserve x0,y0 for Nat;

theorem
  V is non empty & A is_without_nonatomicND_wrt V & a <> b & a <> y &
   A is complex-containing &
   (for d holds a is_complex_on d) & (for d holds b is_complex_on d)
  implies
  <* valid_gcd_input(V,A,x,y,x0,y0), gcd_program(V,A,a,b,x,y,z),
     valid_gcd_output(V,A,z,x0,y0) *> is SFHT of ND(V,A)
  proof
    set Da = denaming(V,A,a);
    set Db = denaming(V,A,b);
    set Dz = denaming(V,A,z);
    set e = Equality(A,a,b);
    set i = gcd_inv(V,A,a,b,x0,y0);
    set p = valid_gcd_input(V,A,x,y,x0,y0);
    set q = PP_and(e,i);
    set r = valid_gcd_output(V,A,z,x0,y0);
    set f = gcd_main_part(V,A,a,b,x,y);
    set g = SC_assignment(Da,z);
    set P = PP_inversion(q);
    assume that
A1: V is non empty & A is_without_nonatomicND_wrt V & a <> b & a <> y and
A2: A is complex-containing and
A3: for d holds a is_complex_on d and
A4: for d holds b is_complex_on d;
A5: for d holds a is_a_value_on d by A2,A3,Th7;
A6: for d holds b is_a_value_on d by A2,A4,Th7;
A7: <*p,f,q*> is SFHT of ND(V,A) by A1,A2,A3,A4,Th24;
A8: <*q,g,r*> is SFHT of ND(V,A) by A1,A5,A6,Th25;
    <*P,g,r*> is SFHT of ND(V,A) by A2,A3,A4,Th26;
    hence thesis by A7,A8,NOMIN_3:25;
  end;
