reserve l, m, n for Nat;
reserve a,b for Int-Location,
  f for FinSeq-Location,
  s,s1,s2 for State of SCM+FSA;
reserve L for finite Subset of Int-Locations;
reserve L for finite Subset of FinSeq-Locations;

theorem
  for s1,s2 being State of SCM+FSA st s1.intloc 0 = s2.intloc 0 &
  ((for a being read-write Int-Location holds s1.a = s2.a) & for f being
  FinSeq-Location holds s1.f = s2.f) holds DataPart s1 = DataPart s2
proof
  let s1,s2 be State of SCM+FSA;
  set D = Data-Locations SCM+FSA;
  assume
A1: s1.intloc 0 = s2.intloc 0;
  assume
A2: for a being read-write Int-Location holds s1.a = s2.a;
A3: dom DataPart s1 = dom s1 /\ D by RELAT_1:61
    .= (Data-Locations SCM+FSA \/ {IC SCM+FSA}) /\ D by MEMSTR_0:13
    .= dom s2 /\ D by MEMSTR_0:13
    .= dom DataPart s2 by RELAT_1:61;
  assume
A4: for f being FinSeq-Location holds s1.f = s2.f;
  now
    let x be object;
    assume
A5: x in dom DataPart s1;
    then
A6: x in dom s1 /\ D by RELAT_1:61;
    then
A7: x in dom s1 by XBOOLE_0:def 4;
    per cases by A7,Th1;
    suppose
A8:   x is Int-Location;
      hereby
        per cases;
        suppose
A9:      x is read-write Int-Location;
          thus (DataPart s1).x = s1.x by A5,FUNCT_1:47
            .= s2.x by A2,A9
            .= (DataPart s2).x by A3,A5,FUNCT_1:47;
        end;
        suppose
A10:      not x is read-write Int-Location;
          reconsider a = x as Int-Location by A8;
          a = intloc 0 by A10,Def2;
          hence (DataPart s1).x = s2.a by A1,A5,FUNCT_1:47
            .= (DataPart s2).x by A3,A5,FUNCT_1:47;
        end;
      end;
    end;
    suppose
A11:  x is FinSeq-Location;
      thus (DataPart s1).x = s1.x by A5,FUNCT_1:47
        .= s2.x by A4,A11
        .= (DataPart s2).x by A3,A5,FUNCT_1:47;
    end;
    suppose x = IC SCM+FSA;
     then not x in Data-Locations SCM+FSA by STRUCT_0:3;
     hence (DataPart s1).x = (DataPart s2).x by A6,XBOOLE_0:def 4;
    end;
  end;
  then DataPart s1 c= DataPart s2 by A3,GRFUNC_1:2;
  hence thesis by A3,GRFUNC_1:3;
end;
