N=1なら簡単です。以後特に断らない限り演算や等式はすべて環Z/q 上で考えます。
すなわちmod qで考えます。
さてqは固定してN=1の場合を考えます。stmachmanさんが書かれているように
この問題でベクトルとか行列は本質的なことではありません。問題を
<a[1],a[2],…,a[m]>を Z/q 上の列とするとき すべてのi ∈{1,2,…,m} に対し
a[i] + b = a[P(i)]となるような b ∈ Z/q と{1,2,…,m}上の置換Pが存在するための
条件を求めよ。
と言う形で考えてみましょう。
mを1つ固定して考えても、任意の置換に対して条件を満たすような
{<a[i]>,b}が存在するとは言えないということはstomachmanさんの証明の通りです。
しかし置換の形によっては条件を満たすものも作れます。
以下で問題の条件に合うような m,<a[i]>,b,P の満たすべき条件を考えます。
証明をきちんと書こうとするとかなり表記が面倒なものになりそうなので概要だけ書きます。
(0) まずi≠jならa[i]≠a[j]と言う条件から当然 m≦q であることが必要です。
(1)さらに各成分 a[i] は公差k(ただしk∈{1,2,…,q})の循環する等差数列のそれぞれ
異なる要素であることが必要です。すなわち<a[i]>の要素を適当に並べ変えて
a[i_1]+k = a[i_2] ,a[i_2]+k = a[i_3],… ,a[i_{m-1}]+k = a[i_{m}] ,a[i_{m}]+k = a[i_1]
となっている必要があります。q = 12 としていくつかこのような等差数列の例を挙げると
{ 2,5,8,11 } (公差3), { 11 ,5 }(公差6) , { 0,1,2,3,4,5,6,7,8,9,10,11}(公差1)
などです。
(2)ここで公差kは1からqまでの任意の整数をとることが出来ますがmは(1)の条件があるので
kによって決まります。具体的にはkとqの最小公倍数をlとし、l = sk(これは通常の整数演算です)
とするとm=sになります。従ってkがqの約数ならm = q/k、kとqが互いに素ならm = qとなります。
そこでqによっては取り得ないmもあります。例えばq = 12ならm= 5とすることはできません。
(3)もうおわかりだと思いますが(1)のような<a[i]>は問題の条件を満たし、そのときの
bの値はkになります。証明は省略しますが、直観的に問題の要請を満たすものであることは
おわかりいただけると思います。
q = 12 として例を作ってみましょう。k=10とします。等差数列として
{1,11,9,7,5,3 }をとります。適当に並べ変えて
a = ( 5,9,1,7,11,3 )としましょう。aの各要素に10を足したものは
c = ( 3,7,11,5,9,1) となるので
置換P=
/1 2 3 4 5 6\
\6 4 5 1 2 3/
によってc[i] = a[P(i)]と表現できます。
またbとして公差のt倍の数を取れば
c[i] = a[P^t(i)]となります。
今の例で言えばk=20とすると
c=(1,5,9,3,7,11)であって c[i] = a[P^2(i)]となっています。
(4)またどんな置換に対してもaがとれる訳ではなく、恒等置換以外で”不動点”がある置換
(すなわちP(i)= iとなるようなiが存在する)の場合は a はとれません。
それは不動点iに対してa[i]+ k = a[P(i)] = a[i]であるから必然的に k= 0となり
従って<c[i]>= <a[i]>となってしまうからです。
m > 2なら互換は不動点を持ちますから
互換に対して条件を満たすような<a[i]> ,bはとれません。
以上でN=1に対する問題はおわりです。
N ≧ 2 に対してはN=1の場合を応用します。
> N>1の場合は、各列が違う系列
ということですから、異なるkに対する等差数列を並べれば良いですね。
このとき公差k_1,k_2,…,k_Nに対する項数をそれぞれm_1,m_2,…,m_Nとすると
全体の項数mは{m_1,m_2,…,m_N}の最小公倍数である必要があります。
q=12の例を一つ作ってみましょう。
0 4 2 5
1 8 5 7
2 0 8 9
3 4 11 11
4 8 2 1
5 0 5 3
6 4 8 5
7 8 11 7
8 0 2 9
9 4 5 11
10 8 8 1
11 0 11 3
1列目の公差は1、2列目は4、3列目は3、4列目は2となっています。
そこでb= <1,4,3,2>となります。この行列の行を適当に入れ換えたものも
条件を満たします。また任意の列の要素を循環的に入れ換えても同様です。
なんだか符合理論のような匂いがしてきた……
というより情報代数の中ですでに知られている結果のような気がしてきました。
大部はしょったので計算ミスなどがあるかも知れません。わかりにくいところがあれば
補足要求して下さい。
お礼
stomachmanさん。回答ありがとうございます。 証明了解いたしました。もともとの問題は x の関数 f_j(x) (j=0,1,2,...,N) があって、 exp[ i (f_j(x)+ g(x)) ] = exp[ i f_P(j)(x) ] ( i は虚数単位) となるようなg(x)があったら、便利だろうな、というところから、行列になってしまいました。そういう都合がいいことはそうそう起こらないと思っていましたがやっぱりそうですか。 (※oodaikoさんが等差数列のときを示してくださったように、 同じ列に同じ値が複数含まれる場合はN>1で 行単位の置換の意味がちょっと違うのだなと思いました。 多分、の場合は同じ列に同じ値が複数含まれる場合を許す場合だと思います。 a[1,1]=1, a[1,2]=0, a[2,1]=1, a[2,1]=1 のようにです。 ただ、stomachmanさんの証明自体は生きますよね。) 方法としては、似たような置き換えを何回かくりかえしてもいいかと思っています。 (ごめんなさい、問題自体が固まっていないもんで。最終目標は、「とにかく足し算だけで置き換える」ということなんです。) a[m,n]+b_w[n] (mod q_w) (w=1,...,W) として(Wはできるだけ小さく)、何回か繰り返していつかは、目的とする置換になっているというようなイメージです。(歯車のついたくるくるお絵かき定規(?)みたいに(スピログラフというらしいです)。) ともあれ、stomachmanさんのおかげで一歩前進です。ありがとうございます。