
theorem
  for n being Element of NAT for x,y being nonpair-yielding FinSeqLen of n
  for s being State of n-BitSubtracterCirc(x,y)
  holds Following(s,1+2*n) is stable
proof
  let n be Element of NAT, f,g be nonpair-yielding FinSeqLen of n;
  deffunc S(set,Nat)
  = BitSubtracterWithBorrowStr(f.($2+1), g.($2+1), $1);
  deffunc A(set,Nat)
  = BitSubtracterWithBorrowCirc(f.($2+1), g.($2+1), $1);
  deffunc o(set,Nat) = BorrowOutput(f.($2+1), g.($2+1), $1);
  set S0 = 1GateCircStr(<*>, (0-tuples_on BOOLEAN)-->TRUE);
  set A0 = 1GateCircuit(<*>, (0-tuples_on BOOLEAN)-->TRUE);
  set N = (1,2) followed_by In(n,NAT);
A1: N.0 = 1 by FUNCT_7:122;
A2: N.1 = 2 by FUNCT_7:123;
A3: N.2 = n  by FUNCT_7:124;
  deffunc n(Element of NAT) = N.$1;
A4: for x being set, n being Nat holds
  A(x,n) is Boolean gate`2=den strict Circuit of S(x,n);
A5: now
    let s be State of A0;
    Following(s, 1) = Following s by FACIRC_1:14;
    hence Following(s, n(0)) is stable by A1,CIRCCMB2:2;
  end;
  deffunc F(Element of NAT) = $1-BitBorrowOutput(f,g);
  consider h being ManySortedSet of NAT such that
A6: for n being Element of NAT holds h.n = F(n) from PBOOLE:sch 5;
A7: for n being Nat, x being set
  for A being non-empty Circuit of S(x,n) st x = h.(n) & A = A(x,n)
  for s being State of A holds Following(s, n(1)) is stable
  proof
    let n be Nat, x be set, A be non-empty Circuit of S(x,n);
A8: n in NAT by ORDINAL1:def 12;
    assume x = h.n;
    then
A9: x = n-BitBorrowOutput(f,g) by A6,A8;
    then
A10: x <> [<*f.(n+1),g.(n+1)*>, and2a] by Th19;
    x <> [<*f.(n+1),g.(n+1)*>, 'xor'] by A9,Th19;
    hence thesis by A2,A10,Th25;
  end;
  set Sn = n-BitSubtracterStr(f,g);
  set An = n-BitSubtracterCirc(f,g);
  set o0 = 0-BitBorrowOutput(f,g);
  consider f1,g1,h1 being ManySortedSet of NAT such that
A11: n-BitSubtracterStr(f,g) = f1.n and
A12: n-BitSubtracterCirc(f,g) = g1.n and
A13: f1.0 = 1GateCircStr(<*>,(0-tuples_on BOOLEAN)-->TRUE) and
A14: g1.0 = 1GateCircuit(<*>,(0-tuples_on BOOLEAN)-->TRUE) and
A15: h1.0 = [<*>, (0-tuples_on BOOLEAN)-->TRUE] and
A16: for n being Nat, S being non empty ManySortedSign, A being
  non-empty MSAlgebra over S for z being set st S = f1.n & A = g1.n & z = h1.n
holds f1.(n+1) = S +* BitSubtracterWithBorrowStr(f.(n+1), g.(n+1), z) & g1.(n+1
  ) = A +* BitSubtracterWithBorrowCirc(f.(n+1), g.(n+1), z) & h1.(n+1) =
  BorrowOutput(f.(n+1), g.(n+1), z)
  by Def2;
  now
    let i be object;
    assume i in NAT;
    then reconsider j = i as Element of NAT;
    thus h1.i = j-BitBorrowOutput(f,g) by A13,A14,A15,A16,Th1
      .= h.i by A6;
  end;
  then
A17: h1 = h by PBOOLE:3;
A18: ex u,v being ManySortedSet of NAT st Sn = u.(n(2)) & An = v.(n(2)) &
  u.0 = S0 & v.0 = A0 & h.0 = o0 &
  for n being Nat, S being non empty ManySortedSign,
  A1 being non-empty MSAlgebra over S
  for x being set, A2 being non-empty MSAlgebra over S(x,n)
  st S = u.n & A1 = v.n & x = h.n & A2 = A(x,n)
  holds u.(n+1) = S +* S(x,n) & v.(n+1) = A1 +* A2 & h.(n+1) = o(x, n)
  proof
    take f1, g1;
    thus thesis by A3,A6,A11,A12,A13,A14,A16,A17;
  end;
A19: InnerVertices S0 is Relation & InputVertices S0 is without_pairs
  by FACIRC_1:38,39;
A20: [<*>, (0-tuples_on BOOLEAN)-->TRUE] = o0 by Th2;
  InnerVertices S0 = {[<*>, (0-tuples_on BOOLEAN)-->TRUE]} by CIRCCOMB:42;
  then
A21: h.0 = o0 & o0 in InnerVertices S0 by A6,A20,TARSKI:def 1;
A22: for n being Nat, x being set
  holds InnerVertices S(x,n) is Relation by FSCIRC_1:22;
A23: for n being Nat, x being set st x = h.n holds
  (InputVertices S(x, n)) \ {x} is without_pairs
  proof
    let n be Nat, x be set such that
A24: x = h.n;
 n in NAT by ORDINAL1:def 12;
    then
A25: x = n-BitBorrowOutput(f,g) by A6,A24;
    then
A26: x <> [<*f.(n+1),g.(n+1)*>, and2a] by Th19;
    x <> [<*f.(n+1),g.(n+1)*>, 'xor'] by A25,Th19;
    then
A27: InputVertices S(x, n) = {f.(n+1),g.(n+1),x} by A26,Th16;
    let a be pair object;
    assume
A28: a in (InputVertices S(x, n)) \ {x};
    then
A29: a in {f.(n+1),g.(n+1),x} by A27,XBOOLE_0:def 5;
A30: not a in {x} by A28,XBOOLE_0:def 5;
    a = f.(n+1) or a = g.(n+1) or a = x by A29,ENUMSET1:def 1;
    hence thesis by A30,TARSKI:def 1;
  end;
A31: for n being Nat, x being set st x = h.n holds h.(n+1) = o(x, n) &
  x in InputVertices S(x,n) & o(x, n) in InnerVertices S(x, n)
  proof
    let n be Nat, x be set such that
A32: x = h.n;
 n in NAT by ORDINAL1:def 12;
    then
A33: x = n-BitBorrowOutput(f,g) by A6,A32;
    h.(n+1) = (n+1)-BitBorrowOutput(f,g) by A6;
    hence h.(n+1) = o(x, n) by A33,Th7;
A34: x <> [<*f.(n+1),g.(n+1)*>, and2a] by A33,Th19;
    x <> [<*f.(n+1),g.(n+1)*>, 'xor'] by A33,Th19;
    then InputVertices S(x, n) = {f.(n+1),g.(n+1),x} by A34,Th16;
    hence x in InputVertices S(x, n) by ENUMSET1:def 1;
    set xx = f.(n+1), xy = g.(n+1);
A35: o(x, n) in {o(x, n)} by TARSKI:def 1;
    InnerVertices S(x, n) =
    {[<*xx,xy*>, 'xor'], 2GatesCircOutput(xx,xy,x,'xor')} \/
    {[<*xx,xy*>,and2a], [<*xy,x*>,and2], [<*xx,x*>,and2a]} \/
    {BorrowOutput(xx,xy,x)} by Th17;
    hence thesis by A35,XBOOLE_0:def 3;
  end;
  for s being State of n-BitSubtracterCirc(f,g) holds
  Following(s,n(0)+n(2)*n(1)) is stable
  from CIRCCMB2:sch 22(A4,A5,A7,A18,A19,A21,A22,A23,A31);
  hence thesis by A1,A2,A3;
end;
