| Bill Allombert on Sat, 15 Nov 2025 17:49:24 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: PARI/GP vecsort/versearch and Mod() |
On Sat, Nov 15, 2025 at 05:23:55PM +0100, hermann@stamm-wilbrandt.de wrote:
> How to make this work and get rid of 1st } and 2nd { ?
> So all in one outer pair of braces?
I suppose you can do that
{
(assert(b,s="")=if(!(b),error(Str(s))));
F4 = [[Mod(0,2),Mod(0,2); \\ 0
Mod(0,2),Mod(0,2)],
[Mod(1,2),Mod(0,2); \\ 1
Mod(0,2),Mod(1,2)],
[Mod(0,2),Mod(1,2); \\ a
Mod(1,2),Mod(1,2)],
[Mod(1,2),Mod(1,2); \\ b
Mod(1,2),Mod(0,2)]];
slF4 = vecsort(lift(F4));
(inF4(M)=vecsearch(slF4,lift(M)));
foreach(F4,a,
foreach(F4,b,
assert(inF4(a+b),"add not closed")));
print("{0,1,a,b} is closed under matrix +");
}
instead of (inF4(M)=vecsearch(slF4,lift(M))) you can do
global(inF4(M)=vecsearch(slF4,lift(M)));
local(inF4(M)=vecsearch(slF4,lift(M)));
my(inF4(M)=vecsearch(slF4,lift(M)));
with different scoping rules.
But I would rather do the opposite:
assert(b,s="")=if(!(b),error(Str(s)));
F4 = { [[Mod(0,2),Mod(0,2); \\ 0
Mod(0,2),Mod(0,2)],
[Mod(1,2),Mod(0,2); \\ 1
Mod(0,2),Mod(1,2)],
[Mod(0,2),Mod(1,2); \\ a
Mod(1,2),Mod(1,2)],
[Mod(1,2),Mod(1,2); \\ b
Mod(1,2),Mod(0,2)]]; }
slF4 = vecsort(lift(F4));
inF4(M)=vecsearch(slF4,lift(M));
{
foreach(F4,a,
foreach(F4,b,
assert(inF4(a+b),"add not closed")));
print("{0,1,a,b} is closed under matrix +");
}
Cheers,
Bill