reserve m for Nat;
reserve P for Instruction-Sequence of SCM+FSA;

theorem Th21:
  for a being Int-Location, k being Integer holds rng aSeq(a,k) c=
  {a := intloc 0,AddTo(a,intloc 0),SubFrom(a,intloc 0)}
proof
  let a be Int-Location;
  let k be Integer;
    let x be object;
    assume
A1: x in rng aSeq(a,k);
    per cases;
    suppose
A2:   k > 0 & k = 0 + 1;
      then
      ex k1 being Nat st k1 + 1 = k & aSeq(a,k) = <% a := intloc
      0 %> ^ (k1 --> AddTo(a,intloc 0)) by SCMFSA_7:def 2;
      then aSeq(a,k) = <% a := intloc 0 %> ^ {} by A2
        .= <% a := intloc 0 %>;
      then rng aSeq(a,k) = {a := intloc 0} by AFINSQ_1:33;
      then x = a := intloc 0 by A1,TARSKI:def 1;
      hence x in {a := intloc 0,AddTo(a,intloc 0),SubFrom(a,intloc 0)} by
ENUMSET1:def 1;
    end;
    suppose
A3:   k > 0 & k <> 1;
      then consider k1 being Nat such that
A4:   k1 + 1 = k and
A5:   aSeq(a,k) = <% a := intloc 0 %> ^ (k1 --> AddTo(a,intloc 0)) by
SCMFSA_7:def 2;
A6:   k1 <> 0 by A3,A4;
      rng aSeq(a,k) = rng <% a := intloc 0 %> \/ rng (k1 --> AddTo(a,
      intloc 0)) by A5,AFINSQ_1:26
        .= {a := intloc 0} \/ rng ( k1 --> AddTo(a,intloc 0)) by AFINSQ_1:33
        .= {a := intloc 0} \/ {AddTo(a,intloc 0)} by A6,FUNCOP_1:8;
      then x in {a := intloc 0} or x in {AddTo(a,intloc 0)} by A1,
XBOOLE_0:def 3;
      then x = a := intloc 0 or x = AddTo(a,intloc 0) by TARSKI:def 1;
      hence x in {a := intloc 0,AddTo(a,intloc 0),SubFrom(a,intloc 0)} by
ENUMSET1:def 1;
    end;
    suppose
A7:   not k > 0;
      then consider k1 being Nat such that
A8:   k1 + k = 1 and
A9:   aSeq(a,k) = <% a := intloc 0 %> ^ (k1 --> SubFrom(a,intloc 0))
      by SCMFSA_7:def 2;
A10:  k1 <> 0 by A7,A8;
      rng aSeq(a,k) = rng <% a := intloc 0 %> \/ rng (k1 --> SubFrom(a,
      intloc 0)) by A9,AFINSQ_1:26
        .= {a := intloc 0} \/ rng ( k1 --> SubFrom(a,intloc 0)) by AFINSQ_1:33
        .= {a := intloc 0} \/ {SubFrom(a,intloc 0)} by A10,FUNCOP_1:8;
      then x in {a := intloc 0} or x in {SubFrom(a,intloc 0)} by A1,
XBOOLE_0:def 3;
      then x = a := intloc 0 or x = SubFrom(a,intloc 0) by TARSKI:def 1;
      hence x in {a := intloc 0,AddTo(a,intloc 0),SubFrom(a,intloc 0)} by
ENUMSET1:def 1;
    end;
end;
