let n be non empty Nat; for x, y being Tuple of n, BOOLEAN st y = 0* n holds
( add_ovfl x,(Bin1 n) = TRUE iff x = 'not' y )
let x, y be Tuple of n, BOOLEAN ; ( y = 0* n implies ( add_ovfl x,(Bin1 n) = TRUE iff x = 'not' y ) )
assume A1:
y = 0* n
; ( add_ovfl x,(Bin1 n) = TRUE iff x = 'not' y )
A2:
n in Seg n
by FINSEQ_1:5;
A3:
1 in Seg 1
by FINSEQ_1:5;
thus
( add_ovfl x,(Bin1 n) = TRUE implies x = 'not' y )
( x = 'not' y implies add_ovfl x,(Bin1 n) = TRUE )
assume A15:
x = 'not' y
; add_ovfl x,(Bin1 n) = TRUE
per cases
( n <> 1 or n = 1 )
;
suppose A16:
n <> 1
;
add_ovfl x,(Bin1 n) = TRUE A17:
(carry x,(Bin1 n)) /. n =
('not' (Bin1 n)) /. n
by A1, A15, Th23
.=
'not' ((Bin1 n) /. n)
by A2, BINARITH:def 4
.=
'not' FALSE
by A2, A16, BINARI_2:8
.=
TRUE
;
len y = n
by FINSEQ_1:def 18;
then
n in dom y
by A2, FINSEQ_1:def 3;
then A18:
y /. n =
y . n
by PARTFUN1:def 8
.=
0
by A1, FINSEQ_1:5, FUNCOP_1:13
;
A19:
x /. n =
'not' (y /. n)
by A2, A15, BINARITH:def 4
.=
TRUE
by A18
;
thus add_ovfl x,
(Bin1 n) =
(((x /. n) '&' ((Bin1 n) /. n)) 'or' ((x /. n) '&' ((carry x,(Bin1 n)) /. n))) 'or' (((Bin1 n) /. n) '&' ((carry x,(Bin1 n)) /. n))
by BINARITH:def 9
.=
TRUE
by A19, A17
;
verum end; suppose A20:
n = 1
;
add_ovfl x,(Bin1 n) = TRUE then
len y = 1
by FINSEQ_1:def 18;
then
1
in dom y
by A3, FINSEQ_1:def 3;
then A21:
y /. 1 =
y . 1
by PARTFUN1:def 8
.=
0
by A1, A20, FINSEQ_1:5, FUNCOP_1:13
;
consider d being
Element of
BOOLEAN such that A22:
x = <*d*>
by A20, FINSEQ_2:117;
d =
('not' y) /. 1
by A15, A22, FINSEQ_4:25
.=
'not' (y /. 1)
by A3, A20, BINARITH:def 4
.=
TRUE
by A21
;
hence
add_ovfl x,
(Bin1 n) = TRUE
by A20, A22, Th11, Th14;
verum end; end;