login
Atomic Boolean functions interpreted as binary numbers.
2

%I #31 Feb 08 2025 13:57:41

%S 1,3,5,15,51,85,255,3855,13107,21845,65535,16711935,252645135,

%T 858993459,1431655765,4294967295,281470681808895,71777214294589695,

%U 1085102592571150095,3689348814741910323,6148914691236517205

%N Atomic Boolean functions interpreted as binary numbers.

%C Row n of the triangle shows the atoms among n-ary Boolean functions:

%C 1 01

%C 3 5 0011 0101

%C 15 51 85 00001111 00110011 01010101

%C Often n-ary x_k = T(n,k), e.g. for 2-ary functions x_1=0011, x_2=0101 and for 3-ary functions x_1=00001111, x_2=00110011, x_3=01010101.

%C An easier generalized way is the enumeration from right to left, here shown with k starting from 0, so that n-ary x_k = T(n, n-k-1). As numbers in the diagonals on the right have the same bit pattern, this corresponds to the infinitary definition of x_k as a binary fraction 1/A000215(k) = 1/(2^2^k + 1):

%C 2-ary x_0=0101=5, 3-ary x_0=01010101=85, infinitary x_0 = 1/3 = .010101...

%C 2-ary x_1=0011=3, 3-ary x_1=00110011=51, infinitary x_1 = 1/5 = .001100110011...

%H Tilman Piesk, <a href="/A211344/b211344.txt">Table of n, a(n) for n = 0..65</a>

%H Tilman Piesk, <a href="http://commons.wikimedia.org/wiki/File:Atomic_Boolean_functions_in_Sierpinski_triangle.svg">Atomic Boolean functions in Sierpinski triangle</a> (Wikimedia Commons)

%F a = A001317( A089633 )

%o (MATLAB)

%o Seq = sym(zeros(55,1)) ;

%o Filledlines = 0 ;

%o for m=1:10

%o for n=1:m

%o Sum = sym(0) ;

%o for k=0:2^m-1

%o if mod( floor( k/2^(m-n) ) ,2) == 0

%o Sum = Sum + 2^sym(k) ;

%o end

%o end

%o Seq( Filledlines + n ) = Sum ;

%o end

%o Filledlines = Filledlines + m ;

%o end

%o (Python)

%o from itertools import count, islice

%o def A211344_gen(): # generator of terms

%o return (sum((bool(~(m:=(1<<t)-(1<<k)-1)&m-i)^1)<<i for i in range((1<<t)-(1<<k))) for t in count(1) for k in range(t-1, -1, -1))

%o A211344_list = list(islice(A211344_gen(),20)) # _Chai Wah Wu_, May 03 2023

%o (Python)

%o def arity_and_atom_to_integer(arity, atom):

%o result = 0

%o max_place = (1 << arity) - (1 << atom) - 1

%o for exponent in range(max_place + 1):

%o if not bool(~max_place & max_place - exponent):

%o place_value = 1 << exponent

%o result += place_value

%o return result

%o def A211344(n, k):

%o return arity_and_atom_to_integer(n, n-k-1) # _Tilman Piesk_, Jan 25 2025

%Y A001317, A089633, A051179 (left diagonal)

%K nonn,tabl

%O 0,2

%A _Tilman Piesk_, Jul 24 2012