set f1 = and2 ;
set f2 = and2 ;
set f3 = and2 ;
set f4 = or3 ;
let x, y be FinSequence; :: thesis: for n being Nat holds
( ( (n -BitGFA0CarryOutput x,y) `1 = <*> & (n -BitGFA0CarryOutput x,y) `2 = (0 -tuples_on BOOLEAN ) --> FALSE & proj1 ((n -BitGFA0CarryOutput x,y) `2 ) = 0 -tuples_on BOOLEAN ) or ( card ((n -BitGFA0CarryOutput x,y) `1 ) = 3 & (n -BitGFA0CarryOutput x,y) `2 = or3 & proj1 ((n -BitGFA0CarryOutput x,y) `2 ) = 3 -tuples_on BOOLEAN ) )

defpred S1[ Nat] means ( ( ($1 -BitGFA0CarryOutput x,y) `1 = <*> & ($1 -BitGFA0CarryOutput x,y) `2 = (0 -tuples_on BOOLEAN ) --> FALSE & proj1 (($1 -BitGFA0CarryOutput x,y) `2 ) = 0 -tuples_on BOOLEAN ) or ( card (($1 -BitGFA0CarryOutput x,y) `1 ) = 3 & ($1 -BitGFA0CarryOutput x,y) `2 = or3 & proj1 (($1 -BitGFA0CarryOutput x,y) `2 ) = 3 -tuples_on BOOLEAN ) );
A1: dom ((0 -tuples_on BOOLEAN ) --> FALSE ) = 0 -tuples_on BOOLEAN by FUNCOP_1:19;
0 -BitGFA0CarryOutput x,y = [<*> ,((0 -tuples_on BOOLEAN ) --> FALSE )] by Th2;
then A2: S1[ 0 ] by A1, MCART_1:7;
A3: now
let n be Nat; :: thesis: ( S1[n] implies S1[n + 1] )
assume S1[n] ; :: thesis: S1[n + 1]
set c = n -BitGFA0CarryOutput x,y;
A4: (n + 1) -BitGFA0CarryOutput x,y = GFA0CarryOutput (x . (n + 1)),(y . (n + 1)),(n -BitGFA0CarryOutput x,y) by Th7
.= [<*[<*(x . (n + 1)),(y . (n + 1))*>,and2 ],[<*(y . (n + 1)),(n -BitGFA0CarryOutput x,y)*>,and2 ],[<*(n -BitGFA0CarryOutput x,y),(x . (n + 1))*>,and2 ]*>,or3 ] ;
A5: dom or3 = 3 -tuples_on BOOLEAN by FUNCT_2:def 1;
((n + 1) -BitGFA0CarryOutput x,y) `1 = <*[<*(x . (n + 1)),(y . (n + 1))*>,and2 ],[<*(y . (n + 1)),(n -BitGFA0CarryOutput x,y)*>,and2 ],[<*(n -BitGFA0CarryOutput x,y),(x . (n + 1))*>,and2 ]*> by A4, MCART_1:7;
hence S1[n + 1] by A4, A5, FINSEQ_1:62, MCART_1:7; :: thesis: verum
end;
thus for i being Nat holds S1[i] from NAT_1:sch 2(A2, A3); :: thesis: verum