reserve x,N for set,
        k for Nat;
reserve N for with_zero set;
reserve S for IC-Ins-separated non empty with_non-empty_values
     Mem-Struct over N;
reserve s for State of S;
reserve p for PartState of S;

theorem
 for S being IC-Ins-separated non empty with_non-empty_values Mem-Struct over N
  for k being Nat, p being PartState of S,
      s1, s2 being State of S st p c= s1 & IncIC(p,k) c= s2
   holds p c= s1 +* DataPart s2
proof
 let S be IC-Ins-separated non empty with_non-empty_values Mem-Struct over N;
  let k be Nat, p be PartState of S,
      s1, s2 be State of S such that
A1: p c= s1 and
A2: IncIC(p,k) c= s2;
  set s3 = DataPart s2;
  reconsider s = s1 +* DataPart s2 as State of S;
A3:  dom p c= the carrier of S by RELAT_1:def 18;
  then
A4: dom p c= {IC S} \/ Data-Locations S by STRUCT_0:4;
A5: now
    Data-Locations S = dom s2 /\ Data-Locations S
       by Th8,XBOOLE_1:28;
    then
A6: dom s3 = Data-Locations S by RELAT_1:61;
    let x be object such that
A7: x in dom p;
    per cases by A4,A7,XBOOLE_0:def 3;
    suppose
A8:   x in {IC S};
      x = IC S by A8,TARSKI:def 1;
      then s1.x = s.x by A6,FUNCT_4:11,STRUCT_0:3;
      hence (p).x = s.x by A1,A7,GRFUNC_1:2;
    end;
    suppose
A9:  x in Data-Locations S;
      set DPp = DataPart p;
      x in dom p /\ Data-Locations S by A9,A7,XBOOLE_0:def 4;
      then
A10:  x in dom DPp by RELAT_1:61;
A11:   DataPart IncIC(p,k) = DPp by Th51;
      DPp c= IncIC(p,k) by A11,RELAT_1:59;
      then
A12:  DPp c= s2 by A2,XBOOLE_1:1;
      then dom DPp c= dom s2 by GRFUNC_1:2;
      then x in dom s2 /\ Data-Locations S by A9,A10,XBOOLE_0:def 4;
      then
A13:  x in dom s3 by RELAT_1:61;
      DPp c= p by RELAT_1:59;
      then
A14:  DPp.x = (p).x by A10,GRFUNC_1:2;
A15:  s2.x = s3.x by A9,FUNCT_1:49;
      DPp.x = s2.x by A10,A12,GRFUNC_1:2;
      hence (p).x = s.x by A14,A15,A13,FUNCT_4:13;
    end;
  end;
  dom p c= dom s by A3,PARTFUN1:def 2;
  hence thesis by A5,GRFUNC_1:2;
end;
