From 0ab680b979a9c87d8e3bd7f0890ce5aab0eac454 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 15:46:55 +0000 Subject: [PATCH 01/10] add more statements to EV1 --- .../exercises/outcomes/EV/EV1/generator.sage | 21 ++++++++++++------- .../exercises/outcomes/EV/EV1/template.xml | 21 ++++++++++++++++++- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage index aee75e831..a498fd309 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage @@ -9,6 +9,10 @@ class Generator(BaseGenerator): a,b,c,d = var("a b c d") ls = [a,b,c,d][:rows] + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) + #start with nice RREF number_of_pivots = 2 A = CheckIt.simple_random_matrix_of_rank(number_of_pivots,rows=rows,columns=columns) @@ -32,14 +36,16 @@ class Generator(BaseGenerator): for i in range(number_of_pivots) ], ) - matrix = A.augment(column_matrix(lin_combo), subdivide=True) + A_aug = A.augment(column_matrix(lin_combo), subdivide=True) vectors = [ { "v": column_matrix(lin_combo), "lin_combo": True, "lin_combo_exp": lin_combo_exp, - "A": matrix, - "rref": matrix.rref(), + "A": A_aug, + "rref": A_aug.rref(), + "veceq": TBIL.VectorEquation(A_aug), + statements[0]: True, } ] @@ -53,13 +59,15 @@ class Generator(BaseGenerator): choice([-1,1]) for _ in range(rows) ]) - matrix = A.augment(column_matrix(non_lin_combo), subdivide=True) + A_aug = A.augment(column_matrix(non_lin_combo), subdivide=True) vectors += [ { "v": column_matrix(non_lin_combo), "lin_combo": False, - "A": matrix, - "rref": matrix.rref(), + "A": A_aug, + "rref": A_aug.rref(), + "veceq": TBIL.VectorEquation(A_aug), + statements[1]: True, } ] @@ -72,7 +80,6 @@ class Generator(BaseGenerator): "vectors": vectors, # "combovector": column_matrix(A.column(-1)), # "statement": choice([True,False]), - # "veceq": TBIL.VectorEquation(A), # "matrix": A, # "rref": A.rref(), # "pivots": A.pivots(), diff --git a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml index b1404f907..a29ea8474 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml @@ -16,7 +16,26 @@ that's equivalent to this claim.

-

The vector equation (...) has at least one solution.

+

+ + The vector equation {{veceq}} has at least one solution. + + + The following vector equation is consistent: {{veceq}}. + + + At least one solution exists for the equation {{veceq}}. + + + {{veceq}} has at least one solution vector. + + + A minimum of one solution for {{veceq}} can be found. + + + We can find at least one vector which solves the equation {{veceq}}. + +

From ceed8e99fc4e3118ab6190df16c27b0ee2c4f587 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 16:05:58 +0000 Subject: [PATCH 02/10] add equations for EV2 --- source/common/sagemath/library.sage | 12 ++++++++++++ .../exercises/outcomes/EV/EV2/generator.sage | 10 ++++++++++ .../exercises/outcomes/EV/EV2/template.xml | 19 ++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/source/common/sagemath/library.sage b/source/common/sagemath/library.sage index 2aa4e192a..ec7c1f398 100644 --- a/source/common/sagemath/library.sage +++ b/source/common/sagemath/library.sage @@ -576,6 +576,18 @@ class TBIL: string+=latex(self.vectors[-1]) return string + #Vector equation class + class LinearCombinationFromMatrix(LinearCombination): + def __init__(self,A,vars=None): + A=A.subdivision(0,0) + if vars is None: + self.coefficients=[var(f"x_{i}") for i in range(1,len(A.columns())+1)] + else: + self.coefficients=[vars[:len(A.columns())]] + self.vectors=[column_matrix(v) for v in A.columns()] + self.length=min(len(self.coefficients),len(self.vectors)) + self.parentheses=False + #Generic equation, which could be used with polynomial or matrix equations. Often used with a LinearCombination passed as leftside class Equation(SageObject): def __init__(self,leftside,rightside): diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage index 82ee12f65..37a8e39e5 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([2,3]),rows=4,columns=3) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "spans": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] spans = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] spans = not spans @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml index d33b3bef5..f58725508 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml @@ -17,7 +17,24 @@

- The vector equation (...)=\vec w has at least one solution for every \vec w\in\mathbb R^4. + + The vector equation {{veceqleft}}=\vec w has at least one solution for any \vec w\in\mathbb R^4. + + + For any \vec w\in\mathbb R^4, the following vector equation is consistent: {{veceqleft}}=\vec w. + + + At least one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. + + + {{veceqleft}}=\vec w has at least one solution vector regardless of how \vec v is chosen from \mathbb R^4. + + + Given any \vec w from \mathbb R^4, a minimum of one solution for {{veceqleft}}=\vec w can be found. + + + We can find at least one vector which solves the equation {{veceqleft}}=\vec w no matter what \vec w\in\mathbb R^4 is. +

From 2bd5b90e67c10f0f1140996f1e10315892998374 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 16:07:11 +0000 Subject: [PATCH 03/10] comment in LinearCombinationFromMatrix --- source/common/sagemath/library.sage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/common/sagemath/library.sage b/source/common/sagemath/library.sage index ec7c1f398..4241ada9a 100644 --- a/source/common/sagemath/library.sage +++ b/source/common/sagemath/library.sage @@ -579,7 +579,7 @@ class TBIL: #Vector equation class class LinearCombinationFromMatrix(LinearCombination): def __init__(self,A,vars=None): - A=A.subdivision(0,0) + A=A.subdivision(0,0) # ignores augmented matrices if vars is None: self.coefficients=[var(f"x_{i}") for i in range(1,len(A.columns())+1)] else: From f1fd4b79305dd3ff7b35927c52c11c4b168127d9 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 16:16:53 +0000 Subject: [PATCH 04/10] add statements for EV4, EV5 --- .../exercises/outcomes/EV/EV4/generator.sage | 10 ++++++++++ .../exercises/outcomes/EV/EV4/template.xml | 19 ++++++++++++++++++- .../exercises/outcomes/EV/EV5/generator.sage | 10 ++++++++++ .../exercises/outcomes/EV/EV5/template.xml | 19 ++++++++++++++++++- 4 files changed, 56 insertions(+), 2 deletions(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage index 138e6631b..d86772742 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([3,4]),rows=4,columns=5) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "independent": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] independent = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] independent = not independent @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml index f9c75ae35..312da20a1 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml @@ -17,7 +17,24 @@

- The vector equation (...)=\vec 0 has exactly one solution. + + The vector equation {{veceqleft}}=\vec 0 has exactly one solution. + + + The following vector equation is consistent with a unique solution: {{veceqleft}}=\vec 0. + + + Exactly one solution exists for the equation {{veceqleft}}=\vec 0. + + + {{veceqleft}}=\vec 0 can only be solved by the solution vector \vec 0. + + + The unique solution for {{veceqleft}}=\vec 0 is the zero vector. + + + We cannot find any vector besides \vec 0 which solves the equation {{veceqleft}}=\vec 0. +

diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage index f9302b8bc..5d2c6b210 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([2,3]),rows=4,columns=choice([3,5])) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "basis": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] basis = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] basis = not basis @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml index 151335ce0..978305628 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml @@ -17,7 +17,24 @@

- The vector equation (...)=\vec w has exactly one solution for every \vec w\in\mathbb R^4. + + The vector equation {{veceqleft}}=\vec w has a unique solution for any \vec w\in\mathbb R^4. + + + For any \vec w\in\mathbb R^4, the following vector equation has exactly one solution: {{veceqleft}}=\vec w. + + + One and only one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. + + + {{veceqleft}}=\vec w has a unique solution regardless of how \vec v is chosen from \mathbb R^4. + + + Given any \vec w from \mathbb R^4, exactly one solution for {{veceqleft}}=\vec w can be found. + + + We can find a unique vector which solves the equation {{veceqleft}}=\vec w no matter what \vec w\in\mathbb R^4 is. +

From c3d232232fb0b783e9515d07e24935a751f6d83f Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 10:53:52 -0600 Subject: [PATCH 05/10] Update source/linear-algebra/exercises/outcomes/EV/EV2/template.xml Co-authored-by: Drew Lewis <30658947+siwelwerd@users.noreply.github.com> --- source/linear-algebra/exercises/outcomes/EV/EV2/template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml index f58725508..ded320757 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml @@ -27,7 +27,7 @@ At least one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. - {{veceqleft}}=\vec w has at least one solution vector regardless of how \vec v is chosen from \mathbb R^4. + {{veceqleft}}=\vec w has at least one solution vector regardless of how \vec w is chosen from \mathbb R^4. Given any \vec w from \mathbb R^4, a minimum of one solution for {{veceqleft}}=\vec w can be found. From b6a70da7bc8e7abc0952a73d380873342a3d6061 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 10:54:11 -0600 Subject: [PATCH 06/10] Update source/linear-algebra/exercises/outcomes/EV/EV2/template.xml Co-authored-by: Drew Lewis <30658947+siwelwerd@users.noreply.github.com> --- source/linear-algebra/exercises/outcomes/EV/EV2/template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml index ded320757..8a8b655c3 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml @@ -24,7 +24,7 @@ For any \vec w\in\mathbb R^4, the following vector equation is consistent: {{veceqleft}}=\vec w. - At least one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. + At least one solution exists for the equation {{veceqleft}}=\vec w for every vector \vec w in \mathbb R^4. {{veceqleft}}=\vec w has at least one solution vector regardless of how \vec w is chosen from \mathbb R^4. From 0ba24b0cdcff603e8aed2e9f7f1b88f6c807d4eb Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 10:54:22 -0600 Subject: [PATCH 07/10] Update source/linear-algebra/exercises/outcomes/EV/EV4/template.xml Co-authored-by: Drew Lewis <30658947+siwelwerd@users.noreply.github.com> --- source/linear-algebra/exercises/outcomes/EV/EV4/template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml index 312da20a1..576ea1110 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml @@ -33,7 +33,7 @@ The unique solution for {{veceqleft}}=\vec 0 is the zero vector. - We cannot find any vector besides \vec 0 which solves the equation {{veceqleft}}=\vec 0. + There is no vector besides \vec 0 which solves the equation {{veceqleft}}=\vec 0.

From c8e24b7f4b8ba5e6a1afe1cc90270a00151a5753 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 10:54:30 -0600 Subject: [PATCH 08/10] Update source/linear-algebra/exercises/outcomes/EV/EV5/template.xml Co-authored-by: Drew Lewis <30658947+siwelwerd@users.noreply.github.com> --- source/linear-algebra/exercises/outcomes/EV/EV5/template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml index 978305628..0b241bea6 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml @@ -27,7 +27,7 @@ One and only one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. - {{veceqleft}}=\vec w has a unique solution regardless of how \vec v is chosen from \mathbb R^4. + {{veceqleft}}=\vec w has a unique solution regardless of how \vec w is chosen from \mathbb R^4. Given any \vec w from \mathbb R^4, exactly one solution for {{veceqleft}}=\vec w can be found. From 5fb2b883c66698d7c81e2eba4eb513d1d0560b45 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 10:54:38 -0600 Subject: [PATCH 09/10] Update source/linear-algebra/exercises/outcomes/EV/EV5/template.xml Co-authored-by: Drew Lewis <30658947+siwelwerd@users.noreply.github.com> --- source/linear-algebra/exercises/outcomes/EV/EV5/template.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml index 0b241bea6..28847aee9 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml @@ -24,7 +24,7 @@ For any \vec w\in\mathbb R^4, the following vector equation has exactly one solution: {{veceqleft}}=\vec w. - One and only one solution exists for the equation {{veceqleft}}=\vec w where \vec w is any \mathbb R^4 vector. + One and only one solution exists for the equation {{veceqleft}}=\vec w for every vector \vec w in \mathbb R^4. {{veceqleft}}=\vec w has a unique solution regardless of how \vec w is chosen from \mathbb R^4. From 88903fc6bc2eca81596412853ae5992dceb0f999 Mon Sep 17 00:00:00 2001 From: Steven Clontz Date: Wed, 25 Feb 2026 13:16:08 -0600 Subject: [PATCH 10/10] elaborate that we just give one such example --- source/linear-algebra/exercises/outcomes/EV/EV1/template.xml | 2 +- source/linear-algebra/exercises/outcomes/EV/EV2/template.xml | 2 +- source/linear-algebra/exercises/outcomes/EV/EV4/template.xml | 2 +- source/linear-algebra/exercises/outcomes/EV/EV5/template.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml index a29ea8474..22f08587a 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml @@ -16,7 +16,7 @@ that's equivalent to this claim.

-

+

Here's an example of one such statement: The vector equation {{veceq}} has at least one solution. diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml index 8a8b655c3..9623cae29 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml @@ -16,7 +16,7 @@

-

+

Here's an example of one such statement: The vector equation {{veceqleft}}=\vec w has at least one solution for any \vec w\in\mathbb R^4. diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml index 576ea1110..eae27700e 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml @@ -16,7 +16,7 @@

-

+

Here's an example of one such statement: The vector equation {{veceqleft}}=\vec 0 has exactly one solution. diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml index 28847aee9..ee38aa9d3 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml @@ -16,7 +16,7 @@

-

+

Here's an example of one such statement: The vector equation {{veceqleft}}=\vec w has a unique solution for any \vec w\in\mathbb R^4.