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 Th21:
  V is non empty & A is_without_nonatomicND_wrt V & a <> b &
  A is complex-containing &
  (for d holds a is_complex_on d) & (for d holds b is_complex_on d)
  implies
  <* gcd_inv(V,A,a,b,x0,y0),
     gcd_loop_body(V,A,a,b),
     gcd_inv(V,A,a,b,x0,y0) *> is SFHT of ND(V,A)
  proof
    assume that
A1: V is non empty and
A2: A is_without_nonatomicND_wrt V and
A3: a <> b and
A4: A is complex-containing and
A5: (for d holds a is_complex_on d) & (for d holds b is_complex_on d);
    set i = gcd_inv(V,A,a,b,x0,y0);
    set e = Equality(A,a,b);
    set s1 = gcd_conditional_step(V,A,a,b);
    set s2 = gcd_conditional_step(V,A,b,a);
A6: PP_inversion(i) ||= PP_False(ND(V,A)) by PARTPR_2:10;
    <*PP_False(ND(V,A)),s2,i*> is SFHT of ND(V,A) by NOMIN_3:18;
    then
A7: <*PP_inversion(i),s2,i*> is SFHT of ND(V,A) by A6,NOMIN_3:15;
A8: <*i,s1,i*> is SFHT of ND(V,A) by A1,A2,A3,A4,A5,Th19;
    <*i,s2,i*> is SFHT of ND(V,A) by A1,A2,A3,A4,A5,Th20;
    hence thesis by A7,A8,NOMIN_3:25;
  end;
