Article GFACIRC2, MML version 4.99.1005

:: GFACIRC2:funcnot 1 => GFACIRC2:func 1
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA0Str(A2,A3) -> non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign means
    ex b1, b2 being ManySortedSet of NAT st
       it = b1 . a1 &
        b1 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
        b2 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
        (for b3 being natural set
        for b4 being non empty ManySortedSign
        for b5 being set
              st b4 = b1 . b3 & b5 = b2 . b3
           holds b1 . (b3 + 1) = b4 +* BitGFA0Str(a2 . (b3 + 1),a3 . (b3 + 1),b5) &
            b2 . (b3 + 1) = GFA0CarryOutput(a2 . (b3 + 1),a3 . (b3 + 1),b5));
end;

:: GFACIRC2:def 1
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign holds
      b4 = b1 -BitGFA0Str(b2,b3)
   iff
      ex b5, b6 being ManySortedSet of NAT st
         b4 = b5 . b1 &
          b5 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
          b6 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
          (for b7 being natural set
          for b8 being non empty ManySortedSign
          for b9 being set
                st b8 = b5 . b7 & b9 = b6 . b7
             holds b5 . (b7 + 1) = b8 +* BitGFA0Str(b2 . (b7 + 1),b3 . (b7 + 1),b9) &
              b6 . (b7 + 1) = GFA0CarryOutput(b2 . (b7 + 1),b3 . (b7 + 1),b9));

:: GFACIRC2:funcnot 2 => GFACIRC2:func 2
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA0Circ(A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over a1 -BitGFA0Str(a2,a3) means
    ex b1, b2, b3 being ManySortedSet of NAT st
       a1 -BitGFA0Str(a2,a3) = b1 . a1 &
        it = b2 . a1 &
        b1 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
        b2 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
        b3 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
        (for b4 being natural set
        for b5 being non empty ManySortedSign
        for b6 being non-empty MSAlgebra over b5
        for b7 being set
              st b5 = b1 . b4 & b6 = b2 . b4 & b7 = b3 . b4
           holds b1 . (b4 + 1) = b5 +* BitGFA0Str(a2 . (b4 + 1),a3 . (b4 + 1),b7) &
            b2 . (b4 + 1) = b6 +* BitGFA0Circ(a2 . (b4 + 1),a3 . (b4 + 1),b7) &
            b3 . (b4 + 1) = GFA0CarryOutput(a2 . (b4 + 1),a3 . (b4 + 1),b7));
end;

:: GFACIRC2:def 2
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being strict locally-finite gate`2=den Boolean MSAlgebra over b1 -BitGFA0Str(b2,b3) holds
      b4 = b1 -BitGFA0Circ(b2,b3)
   iff
      ex b5, b6, b7 being ManySortedSet of NAT st
         b1 -BitGFA0Str(b2,b3) = b5 . b1 &
          b4 = b6 . b1 &
          b5 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
          b6 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
          b7 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
          (for b8 being natural set
          for b9 being non empty ManySortedSign
          for b10 being non-empty MSAlgebra over b9
          for b11 being set
                st b9 = b5 . b8 & b10 = b6 . b8 & b11 = b7 . b8
             holds b5 . (b8 + 1) = b9 +* BitGFA0Str(b2 . (b8 + 1),b3 . (b8 + 1),b11) &
              b6 . (b8 + 1) = b10 +* BitGFA0Circ(b2 . (b8 + 1),b3 . (b8 + 1),b11) &
              b7 . (b8 + 1) = GFA0CarryOutput(b2 . (b8 + 1),b3 . (b8 + 1),b11));

:: GFACIRC2:funcnot 3 => GFACIRC2:func 3
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA0CarryOutput(A2,A3) -> Element of InnerVertices (a1 -BitGFA0Str(a2,a3)) means
    ex b1 being ManySortedSet of NAT st
       it = b1 . a1 &
        b1 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
        (for b2 being natural set holds
           b1 . (b2 + 1) = GFA0CarryOutput(a2 . (b2 + 1),a3 . (b2 + 1),b1 . b2));
end;

:: GFACIRC2:def 3
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being Element of InnerVertices (b1 -BitGFA0Str(b2,b3)) holds
      b4 = b1 -BitGFA0CarryOutput(b2,b3)
   iff
      ex b5 being ManySortedSet of NAT st
         b4 = b5 . b1 &
          b5 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
          (for b6 being natural set holds
             b5 . (b6 + 1) = GFA0CarryOutput(b2 . (b6 + 1),b3 . (b6 + 1),b5 . b6));

:: GFACIRC2:th 1
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set
for b3, b4, b5 being ManySortedSet of NAT
   st b3 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
      b4 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
      b5 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE] &
      (for b6 being natural set
      for b7 being non empty ManySortedSign
      for b8 being non-empty MSAlgebra over b7
      for b9 being set
            st b7 = b3 . b6 & b8 = b4 . b6 & b9 = b5 . b6
         holds b3 . (b6 + 1) = b7 +* BitGFA0Str(b1 . (b6 + 1),b2 . (b6 + 1),b9) &
          b4 . (b6 + 1) = b8 +* BitGFA0Circ(b1 . (b6 + 1),b2 . (b6 + 1),b9) &
          b5 . (b6 + 1) = GFA0CarryOutput(b1 . (b6 + 1),b2 . (b6 + 1),b9))
for b6 being natural set holds
   b6 -BitGFA0Str(b1,b2) = b3 . b6 & b6 -BitGFA0Circ(b1,b2) = b4 . b6 & b6 -BitGFA0CarryOutput(b1,b2) = b5 . b6;

:: GFACIRC2:th 2
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set holds
0 -BitGFA0Str(b1,b2) = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
 0 -BitGFA0Circ(b1,b2) = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE) &
 0 -BitGFA0CarryOutput(b1,b2) = [<*>,(0 -tuples_on BOOLEAN) --> FALSE];

:: GFACIRC2:th 3
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set
for b3 being set
      st b3 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE]
   holds 1 -BitGFA0Str(b1,b2) = (1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE)) +* BitGFA0Str(b1 . 1,b2 . 1,b3) &
    1 -BitGFA0Circ(b1,b2) = (1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE)) +* BitGFA0Circ(b1 . 1,b2 . 1,b3) &
    1 -BitGFA0CarryOutput(b1,b2) = GFA0CarryOutput(b1 . 1,b2 . 1,b3);

:: GFACIRC2:th 4
theorem
for b1, b2, b3 being set
      st b3 = [<*>,(0 -tuples_on BOOLEAN) --> FALSE]
   holds 1 -BitGFA0Str(<*b1*>,<*b2*>) = (1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> FALSE)) +* BitGFA0Str(b1,b2,b3) &
    1 -BitGFA0Circ(<*b1*>,<*b2*>) = (1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> FALSE)) +* BitGFA0Circ(b1,b2,b3) &
    1 -BitGFA0CarryOutput(<*b1*>,<*b2*>) = GFA0CarryOutput(b1,b2,b3);

:: GFACIRC2:th 5
theorem
for b1 being natural set
for b2, b3 being FinSeqLen of b1
for b4, b5, b6, b7 being Relation-like Function-like FinSequence-like set holds
b1 -BitGFA0Str(b2 ^ b4,b3 ^ b6) = b1 -BitGFA0Str(b2 ^ b5,b3 ^ b7) &
 b1 -BitGFA0Circ(b2 ^ b4,b3 ^ b6) = b1 -BitGFA0Circ(b2 ^ b5,b3 ^ b7) &
 b1 -BitGFA0CarryOutput(b2 ^ b4,b3 ^ b6) = b1 -BitGFA0CarryOutput(b2 ^ b5,b3 ^ b7);

:: GFACIRC2:th 6
theorem
for b1 being natural set
for b2, b3 being FinSeqLen of b1
for b4, b5 being set holds
(b1 + 1) -BitGFA0Str(b2 ^ <*b4*>,b3 ^ <*b5*>) = (b1 -BitGFA0Str(b2,b3)) +* BitGFA0Str(b4,b5,b1 -BitGFA0CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA0Circ(b2 ^ <*b4*>,b3 ^ <*b5*>) = (b1 -BitGFA0Circ(b2,b3)) +* BitGFA0Circ(b4,b5,b1 -BitGFA0CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA0CarryOutput(b2 ^ <*b4*>,b3 ^ <*b5*>) = GFA0CarryOutput(b4,b5,b1 -BitGFA0CarryOutput(b2,b3));

:: GFACIRC2:th 7
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
(b1 + 1) -BitGFA0Str(b2,b3) = (b1 -BitGFA0Str(b2,b3)) +* BitGFA0Str(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA0CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA0Circ(b2,b3) = (b1 -BitGFA0Circ(b2,b3)) +* BitGFA0Circ(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA0CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA0CarryOutput(b2,b3) = GFA0CarryOutput(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA0CarryOutput(b2,b3));

:: GFACIRC2:th 8
theorem
for b1, b2 being natural set
   st b1 <= b2
for b3, b4 being Relation-like Function-like FinSequence-like set holds
InnerVertices (b1 -BitGFA0Str(b3,b4)) c= InnerVertices (b2 -BitGFA0Str(b3,b4));

:: GFACIRC2:th 9
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
InnerVertices ((b1 + 1) -BitGFA0Str(b2,b3)) = (InnerVertices (b1 -BitGFA0Str(b2,b3))) \/ InnerVertices BitGFA0Str(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA0CarryOutput(b2,b3));

:: GFACIRC2:funcnot 4 => GFACIRC2:func 4
definition
  let a1, a2 be natural set;
  let a3, a4 be Relation-like Function-like FinSequence-like set;
  assume 1 <= a1 & a1 <= a2;
  func (A1,A2)-BitGFA0AdderOutput(A3,A4) -> Element of InnerVertices (a2 -BitGFA0Str(a3,a4)) means
    ex b1 being natural set st
       a1 = b1 + 1 &
        it = GFA0AdderOutput(a3 . a1,a4 . a1,b1 -BitGFA0CarryOutput(a3,a4));
end;

:: GFACIRC2:def 4
theorem
for b1, b2 being natural set
   st 1 <= b1 & b1 <= b2
for b3, b4 being Relation-like Function-like FinSequence-like set
for b5 being Element of InnerVertices (b2 -BitGFA0Str(b3,b4)) holds
      b5 = (b1,b2)-BitGFA0AdderOutput(b3,b4)
   iff
      ex b6 being natural set st
         b1 = b6 + 1 &
          b5 = GFA0AdderOutput(b3 . b1,b4 . b1,b6 -BitGFA0CarryOutput(b3,b4));

:: GFACIRC2:th 10
theorem
for b1, b2 being natural set
   st b2 < b1
for b3, b4 being Relation-like Function-like FinSequence-like set holds
(b2 + 1,b1)-BitGFA0AdderOutput(b3,b4) = GFA0AdderOutput(b3 . (b2 + 1),b4 . (b2 + 1),b2 -BitGFA0CarryOutput(b3,b4));

:: GFACIRC2:th 11
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
InnerVertices (b1 -BitGFA0Str(b2,b3)) is Relation-like set;

:: GFACIRC2:funcreg 1
registration
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  cluster a1 -BitGFA0CarryOutput(a2,a3) -> pair;
end;

:: GFACIRC2:th 12
theorem
for b1, b2 being Relation-like Function-like FinSequence-like nonpair-yielding set
for b3 being natural set holds
   InputVertices ((b3 + 1) -BitGFA0Str(b1,b2)) = (InputVertices (b3 -BitGFA0Str(b1,b2))) \/ ((InputVertices BitGFA0Str(b1 . (b3 + 1),b2 . (b3 + 1),b3 -BitGFA0CarryOutput(b1,b2))) \ {b3 -BitGFA0CarryOutput(b1,b2)}) &
    InnerVertices (b3 -BitGFA0Str(b1,b2)) is Relation-like set &
    InputVertices (b3 -BitGFA0Str(b1,b2)) is without_pairs;

:: GFACIRC2:th 13
theorem
for b1 being natural set
for b2, b3 being nonpair-yielding FinSeqLen of b1 holds
InputVertices (b1 -BitGFA0Str(b2,b3)) = (proj2 b2) \/ proj2 b3;

:: GFACIRC2:th 14
theorem
for b1 being natural set
for b2, b3 being nonpair-yielding FinSeqLen of b1
for b4 being Element of product the Sorts of b1 -BitGFA0Circ(b2,b3) holds
   Following(b4,1 + (2 * b1)) is stable(b1 -BitGFA0Str(b2,b3), b1 -BitGFA0Circ(b2,b3));

:: GFACIRC2:funcnot 5 => GFACIRC2:func 5
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA1Str(A2,A3) -> non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign means
    ex b1, b2 being ManySortedSet of NAT st
       it = b1 . a1 &
        b1 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
        b2 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
        (for b3 being natural set
        for b4 being non empty ManySortedSign
        for b5 being set
              st b4 = b1 . b3 & b5 = b2 . b3
           holds b1 . (b3 + 1) = b4 +* BitGFA1Str(a2 . (b3 + 1),a3 . (b3 + 1),b5) &
            b2 . (b3 + 1) = GFA1CarryOutput(a2 . (b3 + 1),a3 . (b3 + 1),b5));
end;

:: GFACIRC2:def 5
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign holds
      b4 = b1 -BitGFA1Str(b2,b3)
   iff
      ex b5, b6 being ManySortedSet of NAT st
         b4 = b5 . b1 &
          b5 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
          b6 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
          (for b7 being natural set
          for b8 being non empty ManySortedSign
          for b9 being set
                st b8 = b5 . b7 & b9 = b6 . b7
             holds b5 . (b7 + 1) = b8 +* BitGFA1Str(b2 . (b7 + 1),b3 . (b7 + 1),b9) &
              b6 . (b7 + 1) = GFA1CarryOutput(b2 . (b7 + 1),b3 . (b7 + 1),b9));

:: GFACIRC2:funcnot 6 => GFACIRC2:func 6
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA1Circ(A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over a1 -BitGFA1Str(a2,a3) means
    ex b1, b2, b3 being ManySortedSet of NAT st
       a1 -BitGFA1Str(a2,a3) = b1 . a1 &
        it = b2 . a1 &
        b1 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
        b2 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
        b3 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
        (for b4 being natural set
        for b5 being non empty ManySortedSign
        for b6 being non-empty MSAlgebra over b5
        for b7 being set
              st b5 = b1 . b4 & b6 = b2 . b4 & b7 = b3 . b4
           holds b1 . (b4 + 1) = b5 +* BitGFA1Str(a2 . (b4 + 1),a3 . (b4 + 1),b7) &
            b2 . (b4 + 1) = b6 +* BitGFA1Circ(a2 . (b4 + 1),a3 . (b4 + 1),b7) &
            b3 . (b4 + 1) = GFA1CarryOutput(a2 . (b4 + 1),a3 . (b4 + 1),b7));
end;

:: GFACIRC2:def 6
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being strict locally-finite gate`2=den Boolean MSAlgebra over b1 -BitGFA1Str(b2,b3) holds
      b4 = b1 -BitGFA1Circ(b2,b3)
   iff
      ex b5, b6, b7 being ManySortedSet of NAT st
         b1 -BitGFA1Str(b2,b3) = b5 . b1 &
          b4 = b6 . b1 &
          b5 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
          b6 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
          b7 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
          (for b8 being natural set
          for b9 being non empty ManySortedSign
          for b10 being non-empty MSAlgebra over b9
          for b11 being set
                st b9 = b5 . b8 & b10 = b6 . b8 & b11 = b7 . b8
             holds b5 . (b8 + 1) = b9 +* BitGFA1Str(b2 . (b8 + 1),b3 . (b8 + 1),b11) &
              b6 . (b8 + 1) = b10 +* BitGFA1Circ(b2 . (b8 + 1),b3 . (b8 + 1),b11) &
              b7 . (b8 + 1) = GFA1CarryOutput(b2 . (b8 + 1),b3 . (b8 + 1),b11));

:: GFACIRC2:funcnot 7 => GFACIRC2:func 7
definition
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  func A1 -BitGFA1CarryOutput(A2,A3) -> Element of InnerVertices (a1 -BitGFA1Str(a2,a3)) means
    ex b1 being ManySortedSet of NAT st
       it = b1 . a1 &
        b1 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
        (for b2 being natural set holds
           b1 . (b2 + 1) = GFA1CarryOutput(a2 . (b2 + 1),a3 . (b2 + 1),b1 . b2));
end;

:: GFACIRC2:def 7
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
for b4 being Element of InnerVertices (b1 -BitGFA1Str(b2,b3)) holds
      b4 = b1 -BitGFA1CarryOutput(b2,b3)
   iff
      ex b5 being ManySortedSet of NAT st
         b4 = b5 . b1 &
          b5 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
          (for b6 being natural set holds
             b5 . (b6 + 1) = GFA1CarryOutput(b2 . (b6 + 1),b3 . (b6 + 1),b5 . b6));

:: GFACIRC2:th 15
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set
for b3, b4, b5 being ManySortedSet of NAT
   st b3 . 0 = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
      b4 . 0 = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
      b5 . 0 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE] &
      (for b6 being natural set
      for b7 being non empty ManySortedSign
      for b8 being non-empty MSAlgebra over b7
      for b9 being set
            st b7 = b3 . b6 & b8 = b4 . b6 & b9 = b5 . b6
         holds b3 . (b6 + 1) = b7 +* BitGFA1Str(b1 . (b6 + 1),b2 . (b6 + 1),b9) &
          b4 . (b6 + 1) = b8 +* BitGFA1Circ(b1 . (b6 + 1),b2 . (b6 + 1),b9) &
          b5 . (b6 + 1) = GFA1CarryOutput(b1 . (b6 + 1),b2 . (b6 + 1),b9))
for b6 being natural set holds
   b6 -BitGFA1Str(b1,b2) = b3 . b6 & b6 -BitGFA1Circ(b1,b2) = b4 . b6 & b6 -BitGFA1CarryOutput(b1,b2) = b5 . b6;

:: GFACIRC2:th 16
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set holds
0 -BitGFA1Str(b1,b2) = 1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
 0 -BitGFA1Circ(b1,b2) = 1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE) &
 0 -BitGFA1CarryOutput(b1,b2) = [<*>,(0 -tuples_on BOOLEAN) --> TRUE];

:: GFACIRC2:th 17
theorem
for b1, b2 being Relation-like Function-like FinSequence-like set
for b3 being set
      st b3 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE]
   holds 1 -BitGFA1Str(b1,b2) = (1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE)) +* BitGFA1Str(b1 . 1,b2 . 1,b3) &
    1 -BitGFA1Circ(b1,b2) = (1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE)) +* BitGFA1Circ(b1 . 1,b2 . 1,b3) &
    1 -BitGFA1CarryOutput(b1,b2) = GFA1CarryOutput(b1 . 1,b2 . 1,b3);

:: GFACIRC2:th 18
theorem
for b1, b2, b3 being set
      st b3 = [<*>,(0 -tuples_on BOOLEAN) --> TRUE]
   holds 1 -BitGFA1Str(<*b1*>,<*b2*>) = (1GateCircStr(<*>,(0 -tuples_on BOOLEAN) --> TRUE)) +* BitGFA1Str(b1,b2,b3) &
    1 -BitGFA1Circ(<*b1*>,<*b2*>) = (1GateCircuit(<*>,(0 -tuples_on BOOLEAN) --> TRUE)) +* BitGFA1Circ(b1,b2,b3) &
    1 -BitGFA1CarryOutput(<*b1*>,<*b2*>) = GFA1CarryOutput(b1,b2,b3);

:: GFACIRC2:th 19
theorem
for b1 being natural set
for b2, b3 being FinSeqLen of b1
for b4, b5, b6, b7 being Relation-like Function-like FinSequence-like set holds
b1 -BitGFA1Str(b2 ^ b4,b3 ^ b6) = b1 -BitGFA1Str(b2 ^ b5,b3 ^ b7) &
 b1 -BitGFA1Circ(b2 ^ b4,b3 ^ b6) = b1 -BitGFA1Circ(b2 ^ b5,b3 ^ b7) &
 b1 -BitGFA1CarryOutput(b2 ^ b4,b3 ^ b6) = b1 -BitGFA1CarryOutput(b2 ^ b5,b3 ^ b7);

:: GFACIRC2:th 20
theorem
for b1 being natural set
for b2, b3 being FinSeqLen of b1
for b4, b5 being set holds
(b1 + 1) -BitGFA1Str(b2 ^ <*b4*>,b3 ^ <*b5*>) = (b1 -BitGFA1Str(b2,b3)) +* BitGFA1Str(b4,b5,b1 -BitGFA1CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA1Circ(b2 ^ <*b4*>,b3 ^ <*b5*>) = (b1 -BitGFA1Circ(b2,b3)) +* BitGFA1Circ(b4,b5,b1 -BitGFA1CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA1CarryOutput(b2 ^ <*b4*>,b3 ^ <*b5*>) = GFA1CarryOutput(b4,b5,b1 -BitGFA1CarryOutput(b2,b3));

:: GFACIRC2:th 21
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
(b1 + 1) -BitGFA1Str(b2,b3) = (b1 -BitGFA1Str(b2,b3)) +* BitGFA1Str(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA1CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA1Circ(b2,b3) = (b1 -BitGFA1Circ(b2,b3)) +* BitGFA1Circ(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA1CarryOutput(b2,b3)) &
 (b1 + 1) -BitGFA1CarryOutput(b2,b3) = GFA1CarryOutput(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA1CarryOutput(b2,b3));

:: GFACIRC2:th 22
theorem
for b1, b2 being natural set
   st b1 <= b2
for b3, b4 being Relation-like Function-like FinSequence-like set holds
InnerVertices (b1 -BitGFA1Str(b3,b4)) c= InnerVertices (b2 -BitGFA1Str(b3,b4));

:: GFACIRC2:th 23
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
InnerVertices ((b1 + 1) -BitGFA1Str(b2,b3)) = (InnerVertices (b1 -BitGFA1Str(b2,b3))) \/ InnerVertices BitGFA1Str(b2 . (b1 + 1),b3 . (b1 + 1),b1 -BitGFA1CarryOutput(b2,b3));

:: GFACIRC2:funcnot 8 => GFACIRC2:func 8
definition
  let a1, a2 be natural set;
  let a3, a4 be Relation-like Function-like FinSequence-like set;
  assume 1 <= a1 & a1 <= a2;
  func (A1,A2)-BitGFA1AdderOutput(A3,A4) -> Element of InnerVertices (a2 -BitGFA1Str(a3,a4)) means
    ex b1 being natural set st
       a1 = b1 + 1 &
        it = GFA1AdderOutput(a3 . a1,a4 . a1,b1 -BitGFA1CarryOutput(a3,a4));
end;

:: GFACIRC2:def 8
theorem
for b1, b2 being natural set
   st 1 <= b1 & b1 <= b2
for b3, b4 being Relation-like Function-like FinSequence-like set
for b5 being Element of InnerVertices (b2 -BitGFA1Str(b3,b4)) holds
      b5 = (b1,b2)-BitGFA1AdderOutput(b3,b4)
   iff
      ex b6 being natural set st
         b1 = b6 + 1 &
          b5 = GFA1AdderOutput(b3 . b1,b4 . b1,b6 -BitGFA1CarryOutput(b3,b4));

:: GFACIRC2:th 24
theorem
for b1, b2 being natural set
   st b2 < b1
for b3, b4 being Relation-like Function-like FinSequence-like set holds
(b2 + 1,b1)-BitGFA1AdderOutput(b3,b4) = GFA1AdderOutput(b3 . (b2 + 1),b4 . (b2 + 1),b2 -BitGFA1CarryOutput(b3,b4));

:: GFACIRC2:th 25
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set holds
InnerVertices (b1 -BitGFA1Str(b2,b3)) is Relation-like set;

:: GFACIRC2:funcreg 2
registration
  let a1 be natural set;
  let a2, a3 be Relation-like Function-like FinSequence-like set;
  cluster a1 -BitGFA1CarryOutput(a2,a3) -> pair;
end;

:: GFACIRC2:th 26
theorem
for b1, b2 being Relation-like Function-like FinSequence-like nonpair-yielding set
for b3 being natural set holds
   InputVertices ((b3 + 1) -BitGFA1Str(b1,b2)) = (InputVertices (b3 -BitGFA1Str(b1,b2))) \/ ((InputVertices BitGFA1Str(b1 . (b3 + 1),b2 . (b3 + 1),b3 -BitGFA1CarryOutput(b1,b2))) \ {b3 -BitGFA1CarryOutput(b1,b2)}) &
    InnerVertices (b3 -BitGFA1Str(b1,b2)) is Relation-like set &
    InputVertices (b3 -BitGFA1Str(b1,b2)) is without_pairs;

:: GFACIRC2:th 27
theorem
for b1 being natural set
for b2, b3 being nonpair-yielding FinSeqLen of b1 holds
InputVertices (b1 -BitGFA1Str(b2,b3)) = (proj2 b2) \/ proj2 b3;

:: GFACIRC2:th 28
theorem
for b1 being natural set
for b2, b3 being nonpair-yielding FinSeqLen of b1
for b4 being Element of product the Sorts of b1 -BitGFA1Circ(b2,b3) holds
   Following(b4,1 + (2 * b1)) is stable(b1 -BitGFA1Str(b2,b3), b1 -BitGFA1Circ(b2,b3));