* Apps: - Crypto: some cryptosystems, not all - Coding: e.g. eth, flop CRCs; hdd, cd, cell, etc. - Generate pseudo-random sequences, e.g. test patterns - We're acccustomed to applied DEs, etc. but here is applied *algebra*. - Ref. Golomb * Physical setup - n cells in Fq (F2: bits -- gen theory w/ specific examples) form a register - v_{n-1} .. v_1 - Clock; v(t+1) = f(v(t)) vs. v := f(v) - Shift, feedback, linear - Draw Fibo but note u-RER - Perhaps note recurring sequences (fibo) - States/ outs / ins - Non-autonomous cf. ODEs (e.g. CRCs); autonomous here * Graph - Iteration is a function from a finite set to itself hence there must be loops by the pigeonhole principle - Number states & obtain graph: single trajectory is a rho; full graph is rhos with hair - 2-to-1; tails; loops. - Lock-up states. - Note lin sys: zero always locks up. So max poss is q^n-1 loop - Claim usually desired is one big loop, q^n-1, in particular for pseudo-random sequence generation. Ask if constructible; short answer is yes. - [Note: floppy CRC: 16-bit LFSR; *two* lock-up states @ 0's and 1's; two big loops of 32767 each.] * Good/bad/ugly - Write matrix; compute charpoly - It turns out that the behavior of the *physical* system reduces to an *algebraic* problem. - Ugly: c0 = 0. Note (a) physically leads to subsys, -> graph hair; (b) mx non-invertible; (c) zero eigenvalue. - Rest: c0 != 0. Matrix is invertible. - T^k * T => T^{k+1} is a function from finite set to self, hence dup at T^l = T^k; T^{l-k} is identity. - Cyclic subgroup of GL(Fq, n). Group action on set S of LFSR states => matrix powers are permuations on S. => no hair since 1-1; no tails since permutation has cycle decomposition. - Difference between bad & good: number and size of loops. Analyze the charpoly - Hierarchy: ugly/singular already seen - Next is reducible; degree of splitting field = lcm of degrees of factors. - Next is irreducible but not primitive (define) in which case loops are order of u in the multiplicative group - Best is primitive - Obtain primitives (feasible for small degree) by computing q^n-1'st cyclotomic polynomial, then factoring over Fq. Result is all primitives of degree n over Fq. gp: lift(lift(factorff(polcyclo(15), 2, u+1))) gp: lift(lift(factorff(polcyclo(15), 2, u^2+u+1)))