Article FSCIRC_1, MML version 4.99.1005
:: FSCIRC_1:funcnot 1 => FSCIRC_1:func 1
definition
let a1, a2, a3 be set;
func BitSubtracterOutput(A1,A2,A3) -> Element of InnerVertices 2GatesCircStr(a1,a2,a3,'xor') equals
2GatesCircOutput(a1,a2,a3,'xor');
end;
:: FSCIRC_1:def 1
theorem
for b1, b2, b3 being set holds
BitSubtracterOutput(b1,b2,b3) = 2GatesCircOutput(b1,b2,b3,'xor');
:: FSCIRC_1:funcnot 2 => FSCIRC_1:func 2
definition
let a1, a2, a3 be set;
func BitSubtracterCirc(A1,A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over 2GatesCircStr(a1,a2,a3,'xor') equals
2GatesCircuit(a1,a2,a3,'xor');
end;
:: FSCIRC_1:def 2
theorem
for b1, b2, b3 being set holds
BitSubtracterCirc(b1,b2,b3) = 2GatesCircuit(b1,b2,b3,'xor');
:: FSCIRC_1:funcnot 3 => FSCIRC_1:func 3
definition
let a1, a2, a3 be set;
func BorrowIStr(A1,A2,A3) -> non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign equals
((1GateCircStr(<*a1,a2*>,and2a)) +* 1GateCircStr(<*a2,a3*>,and2)) +* 1GateCircStr(<*a1,a3*>,and2a);
end;
:: FSCIRC_1:def 3
theorem
for b1, b2, b3 being set holds
BorrowIStr(b1,b2,b3) = ((1GateCircStr(<*b1,b2*>,and2a)) +* 1GateCircStr(<*b2,b3*>,and2)) +* 1GateCircStr(<*b1,b3*>,and2a);
:: FSCIRC_1:funcnot 4 => FSCIRC_1:func 4
definition
let a1, a2, a3 be set;
func BorrowStr(A1,A2,A3) -> non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign equals
(BorrowIStr(a1,a2,a3)) +* 1GateCircStr(<*[<*a1,a2*>,and2a],[<*a2,a3*>,and2],[<*a1,a3*>,and2a]*>,or3);
end;
:: FSCIRC_1:def 4
theorem
for b1, b2, b3 being set holds
BorrowStr(b1,b2,b3) = (BorrowIStr(b1,b2,b3)) +* 1GateCircStr(<*[<*b1,b2*>,and2a],[<*b2,b3*>,and2],[<*b1,b3*>,and2a]*>,or3);
:: FSCIRC_1:funcnot 5 => FSCIRC_1:func 5
definition
let a1, a2, a3 be set;
func BorrowICirc(A1,A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over BorrowIStr(a1,a2,a3) equals
((1GateCircuit(a1,a2,and2a)) +* 1GateCircuit(a2,a3,and2)) +* 1GateCircuit(a1,a3,and2a);
end;
:: FSCIRC_1:def 5
theorem
for b1, b2, b3 being set holds
BorrowICirc(b1,b2,b3) = ((1GateCircuit(b1,b2,and2a)) +* 1GateCircuit(b2,b3,and2)) +* 1GateCircuit(b1,b3,and2a);
:: FSCIRC_1:th 1
theorem
for b1, b2, b3 being set holds
InnerVertices BorrowStr(b1,b2,b3) is Relation-like set;
:: FSCIRC_1:th 2
theorem
for b1, b2, b3 being non pair set holds
InputVertices BorrowStr(b1,b2,b3) is without_pairs;
:: FSCIRC_1:th 3
theorem
for b1, b2, b3 being set
for b4 being Element of product the Sorts of BorrowICirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b2
holds (Following b4) . [<*b1,b2*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:th 4
theorem
for b1, b2, b3 being set
for b4 being Element of product the Sorts of BorrowICirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b2 & b6 = b4 . b3
holds (Following b4) . [<*b2,b3*>,and2] = b5 '&' b6;
:: FSCIRC_1:th 5
theorem
for b1, b2, b3 being set
for b4 being Element of product the Sorts of BorrowICirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b3
holds (Following b4) . [<*b1,b3*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:funcnot 6 => FSCIRC_1:func 6
definition
let a1, a2, a3 be set;
func BorrowOutput(A1,A2,A3) -> Element of InnerVertices BorrowStr(a1,a2,a3) equals
[<*[<*a1,a2*>,and2a],[<*a2,a3*>,and2],[<*a1,a3*>,and2a]*>,or3];
end;
:: FSCIRC_1:def 6
theorem
for b1, b2, b3 being set holds
BorrowOutput(b1,b2,b3) = [<*[<*b1,b2*>,and2a],[<*b2,b3*>,and2],[<*b1,b3*>,and2a]*>,or3];
:: FSCIRC_1:funcnot 7 => FSCIRC_1:func 7
definition
let a1, a2, a3 be set;
func BorrowCirc(A1,A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over BorrowStr(a1,a2,a3) equals
(BorrowICirc(a1,a2,a3)) +* 1GateCircuit([<*a1,a2*>,and2a],[<*a2,a3*>,and2],[<*a1,a3*>,and2a],or3);
end;
:: FSCIRC_1:def 7
theorem
for b1, b2, b3 being set holds
BorrowCirc(b1,b2,b3) = (BorrowICirc(b1,b2,b3)) +* 1GateCircuit([<*b1,b2*>,and2a],[<*b2,b3*>,and2],[<*b1,b3*>,and2a],or3);
:: FSCIRC_1:th 6
theorem
for b1, b2, b3 being set holds
b1 in the carrier of BorrowStr(b1,b2,b3) & b2 in the carrier of BorrowStr(b1,b2,b3) & b3 in the carrier of BorrowStr(b1,b2,b3);
:: FSCIRC_1:th 7
theorem
for b1, b2, b3 being set holds
[<*b1,b2*>,and2a] in InnerVertices BorrowStr(b1,b2,b3) &
[<*b2,b3*>,and2] in InnerVertices BorrowStr(b1,b2,b3) &
[<*b1,b3*>,and2a] in InnerVertices BorrowStr(b1,b2,b3);
:: FSCIRC_1:th 8
theorem
for b1, b2, b3 being non pair set holds
b1 in InputVertices BorrowStr(b1,b2,b3) & b2 in InputVertices BorrowStr(b1,b2,b3) & b3 in InputVertices BorrowStr(b1,b2,b3);
:: FSCIRC_1:th 9
theorem
for b1, b2, b3 being non pair set holds
InputVertices BorrowStr(b1,b2,b3) = {b1,b2,b3} &
InnerVertices BorrowStr(b1,b2,b3) = {[<*b1,b2*>,and2a],[<*b2,b3*>,and2],[<*b1,b3*>,and2a]} \/ {BorrowOutput(b1,b2,b3)};
:: FSCIRC_1:th 10
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b2
holds (Following b4) . [<*b1,b2*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:th 11
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b2 & b6 = b4 . b3
holds (Following b4) . [<*b2,b3*>,and2] = b5 '&' b6;
:: FSCIRC_1:th 12
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b3
holds (Following b4) . [<*b1,b3*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:th 13
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6, b7 being Element of BOOLEAN
st b5 = b4 . [<*b1,b2*>,and2a] &
b6 = b4 . [<*b2,b3*>,and2] &
b7 = b4 . [<*b1,b3*>,and2a]
holds (Following b4) . BorrowOutput(b1,b2,b3) = (b5 'or' b6) 'or' b7;
:: FSCIRC_1:th 14
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b2
holds (Following(b4,2)) . [<*b1,b2*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:th 15
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b2 & b6 = b4 . b3
holds (Following(b4,2)) . [<*b2,b3*>,and2] = b5 '&' b6;
:: FSCIRC_1:th 16
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b3
holds (Following(b4,2)) . [<*b1,b3*>,and2a] = ('not' b5) '&' b6;
:: FSCIRC_1:th 17
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3)
for b5, b6, b7 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b2 & b7 = b4 . b3
holds (Following(b4,2)) . BorrowOutput(b1,b2,b3) = ((('not' b5) '&' b6) 'or' (b6 '&' b7)) 'or' (('not' b5) '&' b7);
:: FSCIRC_1:th 18
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BorrowCirc(b1,b2,b3) holds
Following(b4,2) is stable(BorrowStr(b1,b2,b3), BorrowCirc(b1,b2,b3));
:: FSCIRC_1:funcnot 8 => FSCIRC_1:func 8
definition
let a1, a2, a3 be set;
func BitSubtracterWithBorrowStr(A1,A2,A3) -> non empty strict non void unsplit gate`1=arity gate`2isBoolean ManySortedSign equals
(2GatesCircStr(a1,a2,a3,'xor')) +* BorrowStr(a1,a2,a3);
end;
:: FSCIRC_1:def 8
theorem
for b1, b2, b3 being set holds
BitSubtracterWithBorrowStr(b1,b2,b3) = (2GatesCircStr(b1,b2,b3,'xor')) +* BorrowStr(b1,b2,b3);
:: FSCIRC_1:th 19
theorem
for b1, b2, b3 being non pair set holds
InputVertices BitSubtracterWithBorrowStr(b1,b2,b3) = {b1,b2,b3};
:: FSCIRC_1:th 20
theorem
for b1, b2, b3 being non pair set holds
InnerVertices BitSubtracterWithBorrowStr(b1,b2,b3) = ({[<*b1,b2*>,'xor'],2GatesCircOutput(b1,b2,b3,'xor')} \/ {[<*b1,b2*>,and2a],[<*b2,b3*>,and2],[<*b1,b3*>,and2a]}) \/ {BorrowOutput(b1,b2,b3)};
:: FSCIRC_1:th 21
theorem
for b1, b2, b3 being set
for b4 being non empty ManySortedSign
st b4 = BitSubtracterWithBorrowStr(b1,b2,b3)
holds b1 in the carrier of b4 & b2 in the carrier of b4 & b3 in the carrier of b4;
:: FSCIRC_1:funcnot 9 => FSCIRC_1:func 9
definition
let a1, a2, a3 be set;
func BitSubtracterWithBorrowCirc(A1,A2,A3) -> strict locally-finite gate`2=den Boolean MSAlgebra over BitSubtracterWithBorrowStr(a1,a2,a3) equals
(BitSubtracterCirc(a1,a2,a3)) +* BorrowCirc(a1,a2,a3);
end;
:: FSCIRC_1:def 9
theorem
for b1, b2, b3 being set holds
BitSubtracterWithBorrowCirc(b1,b2,b3) = (BitSubtracterCirc(b1,b2,b3)) +* BorrowCirc(b1,b2,b3);
:: FSCIRC_1:th 22
theorem
for b1, b2, b3 being set holds
InnerVertices BitSubtracterWithBorrowStr(b1,b2,b3) is Relation-like set;
:: FSCIRC_1:th 23
theorem
for b1, b2, b3 being non pair set holds
InputVertices BitSubtracterWithBorrowStr(b1,b2,b3) is without_pairs;
:: FSCIRC_1:th 25
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BitSubtracterWithBorrowCirc(b1,b2,b3)
for b5, b6, b7 being Element of BOOLEAN
st b5 = b4 . b1 & b6 = b4 . b2 & b7 = b4 . b3
holds (Following(b4,2)) . BitSubtracterOutput(b1,b2,b3) = (b5 'xor' b6) 'xor' b7 &
(Following(b4,2)) . BorrowOutput(b1,b2,b3) = ((('not' b5) '&' b6) 'or' (b6 '&' b7)) 'or' (('not' b5) '&' b7);
:: FSCIRC_1:th 26
theorem
for b1, b2, b3 being non pair set
for b4 being Element of product the Sorts of BitSubtracterWithBorrowCirc(b1,b2,b3) holds
Following(b4,2) is stable(BitSubtracterWithBorrowStr(b1,b2,b3), BitSubtracterWithBorrowCirc(b1,b2,b3));