load("__common__.sage")
def generator():
context=choice(["polynomial","matrix"])
task=choice(["independent","span"])
if task=="independent":
n=4
vec=[]
for i in range(0,n):
vec.append(vector([ randrange(-6,6), randrange(-6,6), randrange(-6,6), randrange(-6,6)]))
independent = choice([false,true])
if independent==0:
d = choice( range(3,n))
vec[d]=randrange(-3,3)*vec[0]+randrange(-3,3)*vec[1]+randrange(-3,3)*vec[2]
if choice([false,true]):
d = choice( range(2,n))
vec[d]=randrange(-3,3)*vec[0]+randrange(-3,3)*vec[1]
A=matrix(vec).transpose()
if rank(A)<n:
independent = false
else:
independent = true
result=independent
if task=="span":
n=choice([4,5,6])
vec=[]
for i in range(0,n):
vec.append(vector([ randrange(-5,5),randrange(-5,5), randrange(-5,5),randrange(-5,5)]))
span = choice([false,true])
if span==false:
if choice([false,true]):
vec[2] = randrange(-3,3)*vec[0]+randrange(-4,4)*vec[1]
for i in range (3,n):
vec[3] = randrange(-3,3)*vec[0]+randrange(-3,3)*vec[1]+randrange(-3,3)*vec[2]
A=matrix(vec).transpose()
if rank(A)<4:
span = false
else:
span = true
result=span
if context=="polynomial":
polys=[ sum([v[i]*x^i for i in range(0,len(v))]) for v in vec ]
vset=polys
vars=[var("y_"+str(i+1)) for i in range(0,len(vec))]
lc=linearCombination(vars,polys,parentheses=true)
if task=="independent":
eq=Equation(lc,"0")
else:
eq=lc
if context=="matrix":
matrices = [ matrix(ZZ,2,v) for v in vec]
vset=matrices
vars=[var("y_"+str(i+1)) for i in range(0,len(vec))]
lc=linearCombination(vars,matrices)
if task=="independent":
eq=Equation(lc,matrix(ZZ,2))
else:
eq=lc
return {
"task": task,
"context": context,
"set": bracedSet(vset),
"equation": eq,
"result": result,
"matrix": A,
"rref": A.rref(),
}