and = 0; xor = 1; bits = 4; a = [bits]node(xor, 0); b = [bits]node(xor, 1); c = node(and) <- node(xor, 2); out = [bits+1]node(xor); p = [bits]node(xor) <- a <- b; g = [bits]node(and) <- a <- b; out[0:bits] <- ([bits]node(and) <- p); foreach (out) { @ <- (node(and) <- p[0:@0] <- c); for (i = 0; i < @0; ++i) @ <- (node(and) <- p[i+1:@0] <- g[i]); }