Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (* Input *)
- ClearAll[b, a, A, o, eqA, ineqA, ineqa, system, vars, norms, eqNorms,
- Nreduce2P, reduce2P, NAllreduce2P];
- A[i_, d_, b_: b, a_: a, o_: o] :=
- Sum[Binomial[d - s, i - s] a[Min[s, d - s + 1]], {s, 1, i}] +
- If[i < d, o[i], 0] - If[i > 1, o[i - 1] (b - 1), 0];
- eqA[d_, b_: b] :=
- Fold[And,
- Table[A[i, d, b] == A[d - i + 1, d, b], {i, 1, Floor[d/2]}]];
- ineqA[d_, b_: b, a_: a, o_: o] :=
- Fold[And,
- Table[0 <= A[i, d, b, a, o] && A[i, d, b, a, o] < b - 1, {i, 1,
- d}]] && A[1, d, b, a, o] > 0;
- ineqa[d_, b_: b, a_: a] :=
- Fold[And, Table[0 <= a[i] && a[i] < b, {i, 1, Floor[(d + 1)/2]}]] &&
- a[1] > 0;
- system[d_, b_: b] := eqA[d, b] && ineqA[d, b] && ineqa[d, b];
- vars[d_] := Table[a[i], {i, 1, Floor[(d + 1)/2]}];
- norms[d_, o_: o] := Table[o[i], {i, 1, d - 1}];
- eqNorms[O_, o_: o] :=
- Fold[And, Table[o[i] == O[[i]], {i, 1, Length[O]}]];
- reduce2P[d_, b0_: b, b_: b] :=
- Reduce[system[d, b] && b == b0, Join[vars[d], norms[d], {b}],
- Integers];
- Nreduce2P[O_, d_, b_: b] :=
- Reduce[system[d, b] && eqNorms[O] && b > 1,
- Join[vars[d], norms[d], {b}], Integers];
- norms1[d_, o_: o] :=
- Fold[And, Table[(o[i] == 1 || o[i] < 1 || o[i] > 1), {i, 1, d - 1}]];
- NAllreduce2P[d_, b_: b] :=
- Reduce[system[d, b] && norms1[d], Join[vars[d], norms[d], {b}],
- Integers];
- TimeConstrained[ Timing[NAllreduce2P[3] // FullSimplify], 60]
- TimeConstrained[ Timing[NAllreduce2P[5] // FullSimplify], 60*5]
- (* Output *)
- {2.60938,
- o[2] == 1 && ((a[1] \[Element] Integers && b == 4 + a[1] &&
- a[2] == 5 && o[1] == 2 &&
- a[1] >= 2) || ((a[1] | a[2]) \[Element] Integers &&
- b == a[1] + a[2] && o[1] == 1 && a[1] >= 1 && a[2] >= 4))}
- $Aborted
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement