This repository has been archived by the owner on May 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdirect_lim.lean
128 lines (110 loc) · 4.91 KB
/
direct_lim.lean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import algebra.direct_limit
import linear_algebra.tensor_product
open_locale tensor_product
universes u v w
variables {R : Type u} [comm_ring R]
variables {ι : Type v}
variables [decidable_eq ι] [preorder ι]
variables (G : ι → Type w)
namespace module
variables [Π i, add_comm_group (G i)] [Π i, module R (G i)]
variables {G} (f : Π i j, i ≤ j → G i →ₗ[R] G j)
variables (M : Type w) [add_comm_group M] [module R M]
@[reducible]
def direct_limit_of_tensor_product_to_tensor_product_with_direct_limit :
direct_limit (λ i, G i ⊗[R] M)
(λ i j hij, tensor_product.map (f _ _ hij) (linear_map.id)) →ₗ[R] (direct_limit G f) ⊗[R] M :=
direct_limit.lift _ _ _ _ (λ i, tensor_product.map (direct_limit.of _ _ _ _ _) linear_map.id) $
λ i j hij z,
begin
induction z using tensor_product.induction_on with g m x y hx hy,
{ simp only [map_zero] },
{ simp only [tensor_product.map_tmul, direct_limit.of_f, linear_map.id_apply], },
{ rw [map_add, map_add, hx, hy, map_add] },
end
@[reducible]
def tensor_product_with_direct_limit_to_direct_limit_of_tensor_product :
(direct_limit G f) ⊗[R] M →ₗ[R] direct_limit (λ i, G i ⊗[R] M)
(λ i j hij, tensor_product.map (f _ _ hij) (linear_map.id)) :=
tensor_product.lift $ direct_limit.lift _ _ _ _ (λ i,
{ to_fun := λ g,
{ to_fun := λ m, direct_limit.of R ι (λ i, G i ⊗[R] M)
(λ i j hij, tensor_product.map (f _ _ hij) (linear_map.id)) i $ g ⊗ₜ m,
map_add' := λ m m', by rw [tensor_product.tmul_add, map_add],
map_smul' := λ r m, by rw [←tensor_product.smul_tmul, ←tensor_product.smul_tmul', map_smul,
ring_hom.id_apply] },
map_add' := λ g g',
begin
ext1 m,
simp only [linear_map.coe_mk, linear_map.add_apply, tensor_product.add_tmul, map_add],
end,
map_smul' := λ r g,
begin
ext1 m,
simp only [linear_map.coe_mk, ring_hom.id_apply, linear_map.smul_apply,
←tensor_product.smul_tmul', map_smul],
end }) $ λ i j hij g, linear_map.ext $ λ m,
show direct_limit.of R ι (λ (i : ι), G i ⊗[R] M)
(λ i j hij, tensor_product.map (f i j hij) linear_map.id) j
((f i j hij) g ⊗ₜ[R] m) =
(direct_limit.of R ι (λ (i : ι), G i ⊗[R] M)
(λ i j hij, tensor_product.map (f i j hij) linear_map.id) i)
(g ⊗ₜ[R] m), from
by rw [show (f i j hij) g ⊗ₜ[R] m = (tensor_product.map (f i j hij) linear_map.id) (g ⊗ₜ[R] m),
from tensor_product.map_tmul (f i j hij) linear_map.id g m, direct_limit.of_f]
variables [is_directed ι (≤)] [nonempty ι]
lemma direct_limit_of_tensor_product_iso_tensor_product_with_direct_limit.left_inv :
function.left_inverse
(tensor_product_with_direct_limit_to_direct_limit_of_tensor_product f M)
(direct_limit_of_tensor_product_to_tensor_product_with_direct_limit f M) :=
begin
intros z,
induction z using module.direct_limit.induction_on with i z,
induction z using tensor_product.induction_on with g m x y hx hy,
{ simp only [map_zero] },
{ rw [direct_limit.lift_of, tensor_product.map_tmul, linear_map.id_apply,
tensor_product.lift.tmul, direct_limit.lift_of],
refl, },
{ simp only [map_add, hx, hy] },
end
lemma direct_limit_of_tensor_product_iso_tensor_product_with_direct_limit.right_inv :
function.right_inverse
(tensor_product_with_direct_limit_to_direct_limit_of_tensor_product f M)
(direct_limit_of_tensor_product_to_tensor_product_with_direct_limit f M) :=
begin
intros z,
induction z using tensor_product.induction_on with d m x y hx hy,
{ simp only [map_zero] },
{ induction d using module.direct_limit.induction_on with i g,
rw [tensor_product.lift.tmul, direct_limit.lift_of],
simp only [linear_map.coe_mk],
rw [direct_limit.lift_of],
refl, },
{ simp only [map_add, hx, hy] },
end
@[simps]
def direct_limit_of_tensor_product_iso_tensor_product_with_direct_limit :
direct_limit (λ i, G i ⊗[R] M)
(λ i j hij, tensor_product.map (f _ _ hij) (linear_map.id)) ≃ₗ[R] (direct_limit G f) ⊗[R] M :=
{ inv_fun := tensor_product_with_direct_limit_to_direct_limit_of_tensor_product f M,
left_inv := direct_limit_of_tensor_product_iso_tensor_product_with_direct_limit.left_inv f M,
right_inv := direct_limit_of_tensor_product_iso_tensor_product_with_direct_limit.right_inv f M,
..direct_limit_of_tensor_product_to_tensor_product_with_direct_limit f M }
universes u₁
variables {P : Type u₁} [add_comm_group P] [module R P] (g : Π i, G i →ₗ[R] P)
variables (Hg₁ : ∀ i j hij x, g j (f i j hij x) = g i x)
variables (Hg₂ : ∀ i, function.injective $ g i)
include Hg₁ Hg₂
variables (R ι G f)
lemma lift_inj :
function.injective $ direct_limit.lift R ι G f g Hg₁ :=
begin
simp_rw [←linear_map.ker_eq_bot, submodule.eq_bot_iff, linear_map.mem_ker] at Hg₂ ⊢,
intros z hz,
induction z using module.direct_limit.induction_on with i gi,
rw direct_limit.lift_of at hz,
specialize Hg₂ i gi hz,
rw Hg₂,
simp only [map_zero],
end
end module