You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
variables {ι : Type u} [has_zero ι] {A : ι → Type u}
29
31
/-- objects are coercible only if they have the same grade-/
30
-
instancehas_coe (r s : ℕ) (h: r = s) : has_coe (A r) (A s) := { coe := by {subst h, exact id}}
32
+
instancehas_coe (r s : ι) (h: r = s) : has_coe (A r) (A s) := { coe := by {subst h, exact id}}
31
33
end graded_module_components
32
34
33
35
-- needed for the definition of `select`
34
36
attribute [instance] dfinsupp.to_semimodule
35
37
36
38
/-- Grade selection maps from objects in G to a finite set of components of substituent grades -/
37
39
classhas_grade_select
38
-
(A : ℤ → Type u) (G: Type u)
40
+
{ι : Type u} [has_zero ι]
41
+
(A : ι → Type u) (G: Type u)
39
42
[graded_module_components A]
40
43
[add_comm_group G]
44
+
[ring (A 0)]
41
45
[module (A 0) G] :=
42
-
(select : G →ₗ[A 0] (Π₀ r, A r))
46
+
(select : linear_map (A 0) G (Π₀ r, A r))
43
47
44
48
/- TODO: check precedence -/
45
49
notation `⟨`:0 g`⟩_`:0 r:100 := has_grade_select.select g r
@@ -51,7 +55,8 @@ notation `⟨`:0 g`⟩_`:0 r:100 := has_grade_select.select g r
51
55
/-- A module divisible into disjoint graded modules, where the grade selectio
52
56
operator is a complete and independent set of projections -/
53
57
classgraded_module
54
-
(A : ℤ → Type u) (G: Type u)
58
+
{ι : Type v} [has_zero ι]
59
+
(A : ι → Type u) (G: Type u)
55
60
[graded_module_components A]
56
61
[add_comm_group G]
57
62
[module (A 0) G]
@@ -61,42 +66,42 @@ class graded_module
61
66
62
67
63
68
namespace graded_module
64
-
variables {A : ℤ → Type u} {G: Type u}
69
+
variables {ι : Type v} [has_zero ι] {A : ι → Type u} {G: Type u}
65
70
variables [graded_module_components A] [add_comm_group G] [module (A 0) G]
66
71
variables [graded_module A G]
67
72
68
73
/-- locally bind the notation above to our A and G-/
69
-
localnotation `⟨`:0 g`⟩_`:0 r:100 := @has_grade_select.select A G _ _ _ _ g r
74
+
localnotation `⟨`:0 g`⟩_`:0 r:100 := @has_grade_select.select ι A G _ _ _ _ g r
70
75
71
76
/-- convert from r-vectors to multi-vectors -/
72
-
instancehas_coe (r : ℤ) : has_coe (A r) G := { coe := to_fun }
77
+
instancehas_coe (r : ι) : has_coe (A r) G := { coe := to_fun }
73
78
74
79
@[simp]
75
-
lemmacoe_def {r : ℤ} (v : A r) : (v : G) = to_fun v := rfl
80
+
lemmacoe_def {r : ι} (v : A r) : (v : G) = to_fun v := rfl
76
81
77
82
/-- An r-vector has only a single grade
78
83
Discussed at https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Expressing.20a.20sum.20with.20finitely.20many.20nonzero.20terms/near/202657281-/
79
-
lemmaselect_coe_is_single {r : ℤ} (v : A r) : has_grade_select.select (v : G) = dfinsupp.single r v := begin
84
+
lemmaselect_coe_is_single {r : ι} (v : A r) : has_grade_select.select (v : G) = dfinsupp.single r v := begin
80
85
symmetry,
81
86
rw is_complete (v : G) (dfinsupp.single r v),
82
87
symmetry,
83
88
apply dfinsupp.sum_single_index,
84
89
exact linear_map.map_zero _,
85
90
end
86
91
87
-
defis_r_vector (r : ℤ) (a : G) := (⟨a⟩_r : G) = a
92
+
defis_r_vector (r : ι) (a : G) := (⟨a⟩_r : G) = a
88
93
89
94
/-- Chisholm 6a, ish.
90
95
This says A = ⟨A}_r for r-vectors.
91
96
Chisholm aditionally wants proof that A != ⟨A}_r for non-rvectors -/
92
-
lemmar_grade_of_coe {r : ℤ} (v : A r) : ⟨v⟩_r = v := begin
97
+
lemmar_grade_of_coe {r : ι} (v : A r) : ⟨v⟩_r = v := begin
93
98
rw select_coe_is_single,
94
99
rw dfinsupp.single_apply,
95
100
simp,
96
101
end
97
102
98
103
/-- to_fun is injective -/
99
-
lemmato_fun_inj (r : ℤ) : function.injective (to_fun : A r → G) := begin
104
+
lemmato_fun_inj (r : ι) : function.injective (to_fun : A r → G) := begin
100
105
intros a b h,
101
106
rw ← r_grade_of_coe a,
102
107
rw ← r_grade_of_coe b,
@@ -106,13 +111,13 @@ namespace graded_module
106
111
end
107
112
108
113
/-- Chisholm 6b -/
109
-
lemmagrade_of_sum (r : ℤ) (a b : G) : ⟨a + b⟩_r = ⟨a⟩_r + ⟨b⟩_r := by simp
114
+
lemmagrade_of_sum (r : ι) (a b : G) : ⟨a + b⟩_r = ⟨a⟩_r + ⟨b⟩_r := by simp
110
115
111
116
/-- Chisholm 6c -/
112
-
lemmagrade_smul (r : ℤ) (k : A 0) (a : G) : ⟨k • a⟩_r = k • ⟨a⟩_r := by simp
117
+
lemmagrade_smul (r : ι) (k : A 0) (a : G) : ⟨k • a⟩_r = k • ⟨a⟩_r := by simp
113
118
114
119
/-- chisholm 6d. Modifid to use `_s` instead of `_r` on the right, to keep the statement cast-free -/
115
-
lemmagrade_grade (r s : ℤ) (a : G) : ⟨⟨a⟩_r⟩_s = if r = s then ⟨a⟩_s else0
120
+
lemmagrade_grade (r s : ι) (a : G) : ⟨⟨a⟩_r⟩_s = if r = s then ⟨a⟩_s else0
0 commit comments