
theorem Th1:
  for X being set, b1,b2 being bag of X holds b1 divides b2 iff ex
  b being bag of X st b2 = b1 + b
proof
  let n be set, b1,b2 be bag of n;
  now
    assume
A1: b1 divides b2;
A2: now
      let k be object;
      b1.k <= b2.k by A1,PRE_POLY:def 11;
      then b1.k - b1.k <= b2.k - b1.k by XREAL_1:9;
      hence 0 <= b2.k - b1.k;
    end;
    now
      per cases;
      case
A3:     n = {};
        then b1 + EmptyBag n = EmptyBag n by POLYNOM7:3
          .= b2 by A3,POLYNOM7:3;
        hence ex b being bag of n st b2 = b1 + b;
      end;
      case
        n <> {};
        then reconsider n9 = n as non empty set;
        set b = the set of all  [k,b2.k -' b1.k] where k is Element of n9 ;
A4:     now
          let x be object;
          assume x in b;
          then ex k being Element of n9 st x = [k,b2.k -' b1.k];
          hence ex y,z being object st x = [y,z];
        end;
        now
          let x,y1,y2 be object;
          assume that
A5:       [x,y1] in b and
A6:       [x,y2] in b;
          consider k being Element of n9 such that
A7:       [x,y1] = [k,b2.k -' b1.k] by A5;
          consider k9 being Element of n9 such that
A8:       [x,y2] = [k9,b2.k9 -' b1.k9] by A6;
          k = x by A7,XTUPLE_0:1
            .= k9 by A8,XTUPLE_0:1;
          hence y1 = y2 by A7,A8,XTUPLE_0:1;
        end;
        then reconsider b as Function by A4,FUNCT_1:def 1,RELAT_1:def 1;
A9:     now
          let x be object;
          assume x in dom b;
          then consider y being object such that
A10:      [x,y] in b by XTUPLE_0:def 12;
          consider k being Element of n9 such that
A11:      [x,y] = [k,b2.k -' b1.k] by A10;
          x = k by A11,XTUPLE_0:1;
          hence x in n9;
        end;
        now
          let x be object;
          assume x in n9;
          then reconsider k = x as Element of n9;
          [k,b2.k -' b1.k] in b;
          hence x in dom b by XTUPLE_0:def 12;
        end;
        then
A12:    dom b = n9 by A9,TARSKI:2;
        then reconsider b as ManySortedSet of n9 by PARTFUN1:def 2
,RELAT_1:def 18;
A13:    now
          let k be set;
          assume k in n;
          then consider u being object such that
A14:      [k,u] in b by A12,XTUPLE_0:def 12;
          consider k9 being Element of n9 such that
A15:      [k,u] = [k9,b2.k9 -' b1.k9] by A14;
A16:      u = b2.k9 -' b1.k9 by A15,XTUPLE_0:1;
          k = k9 by A15,XTUPLE_0:1;
          hence b.k = b2.k -' b1.k by A14,A16,FUNCT_1:1;
        end;
        now
          let x be object;
A17:      support b c= dom b by PRE_POLY:37;
          assume
A18:      x in support b;
          then
A19:      b.x <> 0 by PRE_POLY:def 7;
          now
            assume not x in support b2;
            then b2.x = 0 by PRE_POLY:def 7;
            then 0 = b2.x-'b1.x by NAT_2:8;
            hence contradiction by A12,A13,A18,A19,A17;
          end;
          hence x in support b2;
        end;
        then
A20:    support b c= support b2;
        now
          let x be object;
          assume x in rng b;
          then consider y be object such that
A21:      [y,x] in b by XTUPLE_0:def 13;
          consider k being Element of n9 such that
A22:      [y,x] = [k,b2.k -' b1.k] by A21;
          x = b2.k -' b1.k by A22,XTUPLE_0:1;
          hence x in NAT;
        end;
        then rng b c= NAT;
        then reconsider b as bag of n by A20,PRE_POLY:def 8,VALUED_0:def 6;
        take b;
        now
          let k be object;
A23:      0 <= b2.k - b1.k by A2;
          assume k in n;
          hence b1.k + b.k = b1.k + (b2.k -' b1.k) by A13
            .= b1.k + (b2.k + -b1.k) by A23,XREAL_0:def 2
            .= b2.k;
        end;
        then b2 = b1 + b by PRE_POLY:33;
        hence ex b being bag of n st b2 = b1 + b;
      end;
    end;
    hence ex b being bag of n st b2 = b1 + b;
  end;
  hence thesis by PRE_POLY:50;
end;
