let n be non zero 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:3;
A3:
1 in Seg 1
by FINSEQ_1:3;
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, Th22
.=
'not' ((Bin1 n) /. n)
by A2, BINARITH:def 1
.=
'not' FALSE
by A2, A16, BINARI_2:6
.=
TRUE
;
len y = n
by CARD_1:def 7;
then
n in dom y
by A2, FINSEQ_1:def 3;
then A18:
y /. n =
y . n
by PARTFUN1:def 6
.=
0
by A1, FINSEQ_1:3, FUNCOP_1:7
;
A19:
x /. n =
'not' (y /. n)
by A2, A15, BINARITH:def 1
.=
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 6
.=
TRUE
by A19, A17
;
verum end; suppose A20:
n = 1
;
add_ovfl (x,(Bin1 n)) = TRUE then
len y = 1
by CARD_1:def 7;
then
1
in dom y
by A3, FINSEQ_1:def 3;
then A21:
y /. 1 =
y . 1
by PARTFUN1:def 6
.=
0
by A1, A20, FINSEQ_1:3, FUNCOP_1:7
;
consider d being
Element of
BOOLEAN such that A22:
x = <*d*>
by A20, FINSEQ_2:97;
d =
('not' y) /. 1
by A15, A22, FINSEQ_4:16
.=
'not' (y /. 1)
by A3, A20, BINARITH:def 1
.=
TRUE
by A21
;
hence
add_ovfl (
x,
(Bin1 n))
= TRUE
by A20, A22, Th10, Th13;
verum end; end;