@@ -570,21 +570,36 @@ instance lie_subalgebra_lie_ring (L' : lie_subalgebra R L) : lie_ring L' :=
570
570
instance lie_subalgebra_lie_algebra (L' : lie_subalgebra R L) : lie_algebra R L' :=
571
571
{ lie_smul := by { intros, apply set_coe.ext, apply lie_smul } }
572
572
573
- @[simp] lemma lie_subalgebra.mem_coe {L' : lie_subalgebra R L} {x : L} :
573
+ namespace lie_subalgebra
574
+
575
+ @[simp] lemma mem_coe {L' : lie_subalgebra R L} {x : L} :
574
576
x ∈ (L' : set L) ↔ x ∈ L' := iff.rfl
575
577
576
- @[simp] lemma lie_subalgebra. mem_coe' {L' : lie_subalgebra R L} {x : L} :
578
+ @[simp] lemma mem_coe' {L' : lie_subalgebra R L} {x : L} :
577
579
x ∈ (L' : submodule R L) ↔ x ∈ L' := iff.rfl
578
580
579
- @[simp, norm_cast] lemma lie_subalgebra. coe_bracket (L' : lie_subalgebra R L) (x y : L') :
581
+ @[simp, norm_cast] lemma coe_bracket (L' : lie_subalgebra R L) (x y : L') :
580
582
(↑⁅x, y⁆ : L) = ⁅(↑x : L), ↑y⁆ := rfl
581
583
582
- @[ext] lemma lie_subalgebra. ext (L₁' L₂' : lie_subalgebra R L) (h : ∀ x, x ∈ L₁' ↔ x ∈ L₂') :
584
+ @[ext] lemma ext (L₁' L₂' : lie_subalgebra R L) (h : ∀ x, x ∈ L₁' ↔ x ∈ L₂') :
583
585
L₁' = L₂' :=
584
586
by { cases L₁', cases L₂', simp only [], ext x, exact h x, }
585
587
586
- lemma lie_subalgebra.ext_iff (L₁' L₂' : lie_subalgebra R L) : L₁' = L₂' ↔ ∀ x, x ∈ L₁' ↔ x ∈ L₂' :=
587
- ⟨λ h x, by rw h, lie_subalgebra.ext R L L₁' L₂'⟩
588
+ lemma ext_iff (L₁' L₂' : lie_subalgebra R L) : L₁' = L₂' ↔ ∀ x, x ∈ L₁' ↔ x ∈ L₂' :=
589
+ ⟨λ h x, by rw h, ext R L L₁' L₂'⟩
590
+
591
+ @[simp] lemma coe_to_set_mk (S : set L) (h₁ h₂ h₃ h₄) :
592
+ ((⟨S, h₁, h₂, h₃, h₄⟩ : lie_subalgebra R L) : set L) = S := rfl
593
+
594
+ @[simp, norm_cast] theorem coe_set_eq_iff (L₁' L₂' : lie_subalgebra R L) :
595
+ (L₁' : set L) = L₂' ↔ L₁' = L₂' :=
596
+ by { cases L₁'; cases L₂'; simp, }
597
+
598
+ @[simp] lemma coe_to_submodule_eq_iff (L₁' L₂' : lie_subalgebra R L) :
599
+ (L₁' : submodule R L) = (L₂' : submodule R L) ↔ L₁' = L₂' :=
600
+ by { rw [← coe_set_eq_iff, submodule.ext'_iff], exact iff.rfl, }
601
+
602
+ end lie_subalgebra
588
603
589
604
/-- A subalgebra of an associative algebra is a Lie subalgebra of the associated Lie algebra. -/
590
605
def lie_subalgebra_of_subalgebra (A : Type v) [ring A] [algebra R A]
@@ -619,6 +634,9 @@ def lie_algebra.morphism.range : lie_subalgebra R L₂ :=
619
634
@[simp] lemma lie_algebra.morphism.range_coe : (f.range : set L₂) = set.range f :=
620
635
linear_map.range_coe ↑f
621
636
637
+ @[simp] lemma lie_subalgebra.range_incl (L' : lie_subalgebra R L) : L'.incl.range = L' :=
638
+ by { rw ← lie_subalgebra.coe_to_submodule_eq_iff, exact (L' : submodule R L).range_subtype, }
639
+
622
640
/-- The image of a Lie subalgebra under a Lie algebra morphism is a Lie subalgebra of the
623
641
codomain. -/
624
642
def lie_subalgebra.map (L' : lie_subalgebra R L) : lie_subalgebra R L₂ :=
@@ -778,7 +796,7 @@ def lie_ideal_subalgebra (I : lie_ideal R L) : lie_subalgebra R L :=
778
796
779
797
instance : has_coe (lie_ideal R L) (lie_subalgebra R L) := ⟨λ I, lie_ideal_subalgebra R L I⟩
780
798
781
- @[norm_cast] lemma coe_to_subalgebra (I : lie_ideal R L) :
799
+ @[norm_cast] lemma lie_ideal. coe_to_subalgebra (I : lie_ideal R L) :
782
800
((I : lie_subalgebra R L) : set L) = I := rfl
783
801
784
802
end lie_ideal
@@ -1267,34 +1285,235 @@ end lie_submodule
1267
1285
1268
1286
namespace lie_ideal
1269
1287
1288
+ variables (f : L →ₗ⁅R⁆ L') (I : lie_ideal R L) (J : lie_ideal R L')
1289
+
1270
1290
/-- A morphism of Lie algebras `f : L → L'` pushes forward Lie ideals of `L` to Lie ideals of `L'`.
1271
1291
1272
1292
Note that unlike `lie_submodule.map`, we must take the `lie_span` of the image. Mathematically
1273
1293
this is because although `f` makes `L'` into a Lie module over `L`, in general the `L` submodules of
1274
1294
`L'` are not the same as the ideals of `L'`. -/
1275
- def map (f : L →ₗ⁅R⁆ L') (I : lie_ideal R L) : lie_ideal R L' :=
1276
- lie_submodule.lie_span R L' (f '' I)
1295
+ def map : lie_ideal R L' := lie_submodule.lie_span R L' (f '' I)
1277
1296
1278
1297
/-- A morphism of Lie algebras `f : L → L'` pulls back Lie ideals of `L'` to Lie ideals of `L`.
1279
1298
1280
1299
Note that `f` makes `L'` into a Lie module over `L` (turning `f` into a morphism of Lie modules)
1281
1300
and so this is a special case of `lie_submodule.comap` but we do not exploit this fact. -/
1282
- def comap (f : L →ₗ⁅R⁆ L') (I : lie_ideal R L') : lie_ideal R L :=
1283
- { lie_mem := λ x y h, by { suffices : ⁅f x, f y⁆ ∈ I, { simp [this ], }, apply I.lie_mem h, },
1284
- ..(I : submodule R L').comap (f : L →ₗ[R] L') }
1301
+ def comap : lie_ideal R L :=
1302
+ { lie_mem := λ x y h, by { suffices : ⁅f x, f y⁆ ∈ J, { simp [this ], }, apply J.lie_mem h, },
1303
+ ..(J : submodule R L').comap (f : L →ₗ[R] L') }
1304
+
1305
+ @[simp] lemma map_coe_submodule (h : ↑(map f I) = f '' I) :
1306
+ (map f I : submodule R L') = (I : submodule R L).map f :=
1307
+ by { rw [submodule.ext'_iff, lie_submodule.coe_to_submodule, h, submodule.map_coe], refl, }
1308
+
1309
+ @[simp] lemma comap_coe_submodule : (comap f J : submodule R L) = (J : submodule R L').comap f :=
1310
+ rfl
1285
1311
1286
- lemma map_le_iff_le_comap {f : L →ₗ⁅R⁆ L'} {I : lie_ideal R L} {I' : lie_ideal R L'} :
1287
- map f I ≤ I' ↔ I ≤ comap f I' :=
1288
- by { erw lie_submodule.lie_span_le, exact set.image_subset_iff, }
1312
+ lemma map_le : map f I ≤ J ↔ f '' I ⊆ J := lie_submodule.lie_span_le
1289
1313
1290
- lemma gc_map_comap (f : L →ₗ⁅R⁆ L') : galois_connection (map f) (comap f) :=
1314
+ variables {f I J}
1315
+
1316
+ lemma mem_map {x : L} (hx : x ∈ I) : f x ∈ map f I :=
1317
+ by { apply lie_submodule.subset_lie_span, use x, exact ⟨hx, rfl⟩, }
1318
+
1319
+ @[simp] lemma mem_comap {x : L} : x ∈ comap f J ↔ f x ∈ J := iff.rfl
1320
+
1321
+ lemma map_le_iff_le_comap : map f I ≤ J ↔ I ≤ comap f J :=
1322
+ by { rw map_le, exact set.image_subset_iff, }
1323
+
1324
+ lemma gc_map_comap : galois_connection (map f) (comap f) :=
1291
1325
λ I I', map_le_iff_le_comap
1292
1326
1327
+ lemma map_comap_le : map f (comap f J) ≤ J :=
1328
+ by { rw map_le_iff_le_comap, apply le_refl _, }
1329
+
1330
+ /-- See also `map_comap_eq` below. -/
1331
+ lemma comap_map_le : I ≤ comap f (map f I) :=
1332
+ by { rw ← map_le_iff_le_comap, apply le_refl _, }
1333
+
1334
+ lemma map_mono {I₁ I₂ : lie_ideal R L} (h : I₁ ≤ I₂) : map f I₁ ≤ map f I₂ :=
1335
+ by { rw lie_submodule.le_def at h, apply lie_submodule.lie_span_mono (set.image_subset ⇑f h), }
1336
+
1337
+ lemma comap_mono {J₁ J₂ : lie_ideal R L'} (h : J₁ ≤ J₂) : comap f J₁ ≤ comap f J₂ :=
1338
+ by { rw lie_submodule.le_def at h ⊢, exact set.preimage_mono h, }
1339
+
1340
+ lemma map_of_image (h : f '' I = J) : I.map f = J :=
1341
+ begin
1342
+ apply le_antisymm,
1343
+ { erw [lie_submodule.lie_span_le, h], },
1344
+ { rw [lie_submodule.le_def, ← h], exact lie_submodule.subset_lie_span, },
1345
+ end
1346
+
1347
+ end lie_ideal
1348
+
1349
+ namespace lie_algebra.morphism
1350
+
1351
+ variables (f : L →ₗ⁅R⁆ L') (I : lie_ideal R L) (J : lie_ideal R L')
1352
+
1353
+ /-- The kernel of a morphism of Lie algebras, as an ideal in the domain. -/
1354
+ def ker : lie_ideal R L := lie_ideal.comap f ⊥
1355
+
1356
+ /-- The range of a morphism of Lie algebras as an ideal in the codomain. -/
1357
+ def ideal_range : lie_ideal R L' := lie_ideal.map f ⊤
1358
+
1359
+ /-- The condition that the image of a morphism of Lie algebras is an ideal. -/
1360
+ def is_ideal_morphism : Prop := (f.ideal_range : lie_subalgebra R L') = f.range
1361
+
1362
+ @[simp] lemma is_ideal_morphism_def :
1363
+ f.is_ideal_morphism ↔ (f.ideal_range : lie_subalgebra R L') = f.range := iff.rfl
1364
+
1365
+ lemma range_subset_ideal_range : (f.range : set L') ⊆ f.ideal_range := lie_submodule.subset_lie_span
1366
+
1367
+ lemma map_le_ideal_range : I.map f ≤ f.ideal_range := lie_ideal.map_mono le_top
1368
+
1369
+ lemma ker_le_comap : f.ker ≤ J.comap f := lie_ideal.comap_mono bot_le
1370
+
1371
+ @[simp] lemma mem_ker {x : L} (h : x ∈ ker f) : f x = 0 :=
1372
+ begin
1373
+ change x ∈ lie_ideal.comap f ⊥ at h,
1374
+ rw [lie_ideal.mem_comap, lie_submodule.mem_bot] at h, exact h,
1375
+ end
1376
+
1377
+ lemma mem_ideal_range {x : L} : f x ∈ ideal_range f := lie_ideal.mem_map (lie_submodule.mem_top x)
1378
+
1379
+ @[simp] lemma mem_ideal_range_iff (h : is_ideal_morphism f) {y : L'} :
1380
+ y ∈ ideal_range f ↔ ∃ (x : L), f x = y :=
1381
+ begin
1382
+ rw f.is_ideal_morphism_def at h,
1383
+ rw [← lie_submodule.mem_coe, ← lie_ideal.coe_to_subalgebra, h, f.range_coe, set.mem_range],
1384
+ end
1385
+
1386
+
1387
+ @[simp] lemma ker_coe_submodule : (ker f : submodule R L) = (f : L →ₗ[R] L').ker := rfl
1388
+
1389
+ end lie_algebra.morphism
1390
+
1391
+ namespace lie_ideal
1392
+
1393
+ variables {f : L →ₗ⁅R⁆ L'} {I : lie_ideal R L} {J : lie_ideal R L'}
1394
+
1395
+ lemma map_sup_ker_eq_map : lie_ideal.map f (I ⊔ f.ker) = lie_ideal.map f I :=
1396
+ begin
1397
+ suffices : lie_ideal.map f (I ⊔ f.ker) ≤ lie_ideal.map f I,
1398
+ { exact le_antisymm this (lie_ideal.map_mono le_sup_left), },
1399
+ apply lie_submodule.lie_span_mono,
1400
+ rintros x ⟨y, hy₁, hy₂⟩, rw ← hy₂,
1401
+ erw lie_submodule.mem_sup at hy₁, obtain ⟨z₁, hz₁, z₂, hz₂, hy⟩ := hy₁, rw ← hy,
1402
+ rw [f.map_add, f.mem_ker hz₂, add_zero], exact ⟨z₁, hz₁, rfl⟩,
1403
+ end
1404
+
1405
+ @[simp] lemma map_comap_eq (h : f.is_ideal_morphism) : map f (comap f J) = f.ideal_range ⊓ J :=
1406
+ begin
1407
+ apply le_antisymm,
1408
+ { rw le_inf_iff, exact ⟨f.map_le_ideal_range _, map_comap_le⟩, },
1409
+ { rw f.is_ideal_morphism_def at h,
1410
+ rw [lie_submodule.le_def, lie_submodule.inf_coe, ← coe_to_subalgebra, h],
1411
+ rintros y ⟨⟨x, h₁, h₂⟩, h₃⟩, rw ← h₂ at h₃ ⊢, exact mem_map h₃, },
1412
+ end
1413
+
1414
+ @[simp] lemma comap_map_eq (h : ↑(map f I) = f '' I) : comap f (map f I) = I ⊔ f.ker :=
1415
+ by rw [← lie_submodule.coe_to_submodule_eq_iff, comap_coe_submodule, I.map_coe_submodule f h,
1416
+ lie_submodule.sup_coe_to_submodule, f.ker_coe_submodule, linear_map.comap_map_eq]
1417
+
1418
+ variables (f I J)
1419
+
1293
1420
/-- Regarding an ideal `I` as a subalgebra, the inclusion map into its ambient space is a morphism
1294
1421
of Lie algebras. -/
1295
- def incl (I : lie_ideal R L) : I →ₗ⁅R⁆ L := (I : lie_subalgebra R L).incl
1422
+ def incl : I →ₗ⁅R⁆ L := (I : lie_subalgebra R L).incl
1423
+
1424
+ @[simp] lemma incl_apply (x : I) : I.incl x = x := rfl
1425
+
1426
+ @[simp] lemma incl_coe : (I.incl : I →ₗ[R] L) = (I : submodule R L).subtype := rfl
1427
+
1428
+ @[simp] lemma comap_incl_self : comap I.incl I = ⊤ :=
1429
+ by { rw ← lie_submodule.coe_to_submodule_eq_iff, exact submodule.comap_subtype_self _, }
1430
+
1431
+ @[simp] lemma ker_incl : I.incl.ker = ⊥ :=
1432
+ by rw [← lie_submodule.coe_to_submodule_eq_iff, I.incl.ker_coe_submodule,
1433
+ lie_submodule.bot_coe_submodule, incl_coe, submodule.ker_subtype]
1434
+
1435
+ @[simp] lemma incl_ideal_range : I.incl.ideal_range = I :=
1436
+ begin
1437
+ apply le_antisymm,
1438
+ { erw lie_submodule.lie_span_le, intros x hx,
1439
+ simp only [true_and, set.mem_image, incl_apply, set.mem_univ, lie_submodule.top_coe] at hx,
1440
+ obtain ⟨y, hy⟩ := hx, rw ← hy, exact y.property, },
1441
+ { rw [lie_submodule.le_def, ← lie_ideal.coe_to_subalgebra, ← (I : lie_subalgebra R L).range_incl],
1442
+ exact I.incl.range_subset_ideal_range, },
1443
+ end
1444
+
1445
+ lemma incl_is_ideal_morphism : I.incl.is_ideal_morphism :=
1446
+ begin
1447
+ rw [I.incl.is_ideal_morphism_def, incl_ideal_range],
1448
+ exact (I : lie_subalgebra R L).range_incl.symm,
1449
+ end
1450
+
1451
+ open lie_algebra
1452
+
1453
+ /-- Note that the inequality can be strict; e.g., the inclusion of an Abelian subalgebra of a
1454
+ simple algebra. -/
1455
+ lemma map_bracket_le {I₁ I₂ : lie_ideal R L} : map f ⁅I₁, I₂⁆ ≤ ⁅map f I₁, map f I₂⁆ :=
1456
+ begin
1457
+ rw map_le_iff_le_comap, erw lie_submodule.lie_span_le,
1458
+ intros x hx, obtain ⟨⟨y₁, hy₁⟩, ⟨y₂, hy₂⟩, hx⟩ := hx, rw ← hx,
1459
+ let fy₁ : ↥(map f I₁) := ⟨f y₁, mem_map hy₁⟩,
1460
+ let fy₂ : ↥(map f I₂) := ⟨f y₂, mem_map hy₂⟩,
1461
+ change _ ∈ comap f ⁅map f I₁, map f I₂⁆,
1462
+ simp only [submodule.coe_mk, mem_comap, map_lie],
1463
+ exact lie_submodule.lie_mem_lie _ _ fy₁ fy₂,
1464
+ end
1465
+
1466
+ lemma comap_bracket_le {J₁ J₂ : lie_ideal R L'} : ⁅comap f J₁, comap f J₂⁆ ≤ comap f ⁅J₁, J₂⁆ :=
1467
+ begin
1468
+ rw ← map_le_iff_le_comap,
1469
+ exact le_trans (map_bracket_le f) (lie_submodule.mono_lie _ _ _ _ map_comap_le map_comap_le),
1470
+ end
1471
+
1472
+ variables {f}
1473
+
1474
+ lemma map_comap_incl {I₁ I₂ : lie_ideal R L} : map I₁.incl (comap I₁.incl I₂) = I₁ ⊓ I₂ :=
1475
+ by { conv_rhs { rw ← I₁.incl_ideal_range, }, rw ← map_comap_eq, exact I₁.incl_is_ideal_morphism, }
1476
+
1477
+ lemma comap_bracket_eq {J₁ J₂ : lie_ideal R L'} (h : f.is_ideal_morphism) :
1478
+ comap f ⁅f.ideal_range ⊓ J₁, f.ideal_range ⊓ J₂⁆ = ⁅comap f J₁, comap f J₂⁆ ⊔ f.ker :=
1479
+ begin
1480
+ rw [← lie_submodule.coe_to_submodule_eq_iff, comap_coe_submodule,
1481
+ lie_submodule.sup_coe_to_submodule, f.ker_coe_submodule, ← linear_map.comap_map_eq,
1482
+ lie_submodule.lie_ideal_oper_eq_linear_span, lie_submodule.lie_ideal_oper_eq_linear_span,
1483
+ submodule.map_span],
1484
+ congr, simp only [coe_to_linear_map, set.mem_set_of_eq], ext y,
1485
+ split,
1486
+ { rintros ⟨⟨x₁, hx₁⟩, ⟨x₂, hx₂⟩, hy⟩, rw ← hy,
1487
+ erw [lie_submodule.mem_inf, f.mem_ideal_range_iff h] at hx₁ hx₂,
1488
+ obtain ⟨⟨z₁, hz₁⟩, hz₁'⟩ := hx₁, rw ← hz₁ at hz₁',
1489
+ obtain ⟨⟨z₂, hz₂⟩, hz₂'⟩ := hx₂, rw ← hz₂ at hz₂',
1490
+ use [⁅z₁, z₂⁆, ⟨z₁, hz₁'⟩, ⟨z₂, hz₂'⟩, rfl],
1491
+ simp only [hz₁, hz₂, submodule.coe_mk, map_lie], },
1492
+ { rintros ⟨x, ⟨⟨z₁, hz₁⟩, ⟨z₂, hz₂⟩, hx⟩, hy⟩, rw [← hy, ← hx],
1493
+ have hz₁' : f z₁ ∈ f.ideal_range ⊓ J₁,
1494
+ { rw lie_submodule.mem_inf, exact ⟨f.mem_ideal_range, hz₁⟩, },
1495
+ have hz₂' : f z₂ ∈ f.ideal_range ⊓ J₂,
1496
+ { rw lie_submodule.mem_inf, exact ⟨f.mem_ideal_range, hz₂⟩, },
1497
+ use [⟨f z₁, hz₁'⟩, ⟨f z₂, hz₂'⟩], simp only [submodule.coe_mk, map_lie], },
1498
+ end
1499
+
1500
+ lemma map_comap_bracket_eq {J₁ J₂ : lie_ideal R L'} (h : f.is_ideal_morphism) :
1501
+ map f ⁅comap f J₁, comap f J₂⁆ = ⁅f.ideal_range ⊓ J₁, f.ideal_range ⊓ J₂⁆ :=
1502
+ by { rw [← map_sup_ker_eq_map, ← comap_bracket_eq h, map_comap_eq h, inf_eq_right],
1503
+ exact le_trans (lie_submodule.lie_le_left _ _) inf_le_left, }
1504
+
1505
+ lemma comap_bracket_incl {I₁ I₂ : lie_ideal R L} :
1506
+ ⁅comap I.incl I₁, comap I.incl I₂⁆ = comap I.incl ⁅I ⊓ I₁, I ⊓ I₂⁆ :=
1507
+ begin
1508
+ conv_rhs { congr, skip, rw ← I.incl_ideal_range, }, rw comap_bracket_eq,
1509
+ simp only [ker_incl, sup_bot_eq], exact I.incl_is_ideal_morphism,
1510
+ end
1296
1511
1297
- @[simp] lemma incl_apply (I : lie_ideal R L) (x : I) : I.incl x = x := rfl
1512
+ /-- This is a very useful result; it allows us to use the fact that inclusion distributes over the
1513
+ Lie bracket operation on ideals, subject to the conditions shown. -/
1514
+ lemma comap_bracket_incl_of_le {I₁ I₂ : lie_ideal R L} (h₁ : I₁ ≤ I) (h₂ : I₂ ≤ I) :
1515
+ ⁅comap I.incl I₁, comap I.incl I₂⁆ = comap I.incl ⁅I₁, I₂⁆ :=
1516
+ by { rw comap_bracket_incl, rw ← inf_eq_right at h₁ h₂, rw [h₁, h₂], }
1298
1517
1299
1518
end lie_ideal
1300
1519
0 commit comments