@@ -20,6 +20,10 @@ We show that a morphism is quasi-separated if the preimage of every affine open
20
20
We also show that this property is local at the target,
21
21
and is stable under compositions and base-changes.
22
22
23
+ ## Main result
24
+ - `is_localization_basic_open_of_qcqs` (**Qcqs lemma** ):
25
+ If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
26
+
23
27
-/
24
28
25
29
noncomputable theory
@@ -28,6 +32,8 @@ open category_theory category_theory.limits opposite topological_space
28
32
29
33
universe u
30
34
35
+ open_locale algebraic_geometry
36
+
31
37
namespace algebraic_geometry
32
38
33
39
variables {X Y : Scheme.{u}} (f : X ⟶ Y)
@@ -274,4 +280,204 @@ begin
274
280
{ apply algebraic_geometry.quasi_separated_of_mono }
275
281
end
276
282
283
+ lemma exists_eq_pow_mul_of_is_affine_open (X : Scheme) (U : opens X.carrier) (hU : is_affine_open U)
284
+ (f : X.presheaf.obj (op U)) (x : X.presheaf.obj (op $ X.basic_open f)) :
285
+ ∃ (n : ℕ) (y : X.presheaf.obj (op U)),
286
+ y |_ X.basic_open f = (f |_ X.basic_open f) ^ n * x :=
287
+ begin
288
+ have := (is_localization_basic_open hU f).2 ,
289
+ obtain ⟨⟨y, _, n, rfl⟩, d⟩ := this x,
290
+ use [n, y],
291
+ delta Top.presheaf.restrict_open Top.presheaf.restrict,
292
+ simpa [mul_comm x] using d.symm,
293
+ end
294
+
295
+ lemma exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme)
296
+ (S : X.affine_opens) (U₁ U₂ : opens X.carrier)
297
+ {n₁ n₂ : ℕ} {y₁ : X.presheaf.obj (op U₁)}
298
+ {y₂ : X.presheaf.obj (op U₂)} {f : X.presheaf.obj (op $ U₁ ⊔ U₂)}
299
+ {x : X.presheaf.obj (op $ X.basic_open f)}
300
+ (h₁ : S.1 ≤ U₁) (h₂ : S.1 ≤ U₂)
301
+ (e₁ : X.presheaf.map (hom_of_le $ X.basic_open_le
302
+ (X.presheaf.map (hom_of_le le_sup_left).op f) : _ ⟶ U₁).op y₁ =
303
+ X.presheaf.map (hom_of_le (by { erw X.basic_open_res, exact inf_le_left })).op
304
+ (X.presheaf.map (hom_of_le le_sup_left).op f) ^ n₁ *
305
+ (X.presheaf.map (hom_of_le (by { erw X.basic_open_res, exact inf_le_right })).op) x)
306
+ (e₂ : X.presheaf.map (hom_of_le $ X.basic_open_le
307
+ (X.presheaf.map (hom_of_le le_sup_right).op f) : _ ⟶ U₂).op y₂ =
308
+ X.presheaf.map (hom_of_le (by { rw X.basic_open_res, exact inf_le_left })).op
309
+ (X.presheaf.map (hom_of_le le_sup_right).op f) ^ n₂ *
310
+ (X.presheaf.map (hom_of_le (by { rw X.basic_open_res, exact inf_le_right })).op) x) :
311
+ ∃ n : ℕ, X.presheaf.map (hom_of_le $ h₁).op
312
+ ((X.presheaf.map (hom_of_le le_sup_left).op f) ^ (n + n₂) * y₁) =
313
+ X.presheaf.map (hom_of_le $ h₂).op
314
+ ((X.presheaf.map (hom_of_le le_sup_right).op f) ^ (n + n₁) * y₂) :=
315
+ begin
316
+ have := (is_localization_basic_open S.2
317
+ (X.presheaf.map (hom_of_le $ le_trans h₁ le_sup_left).op f)),
318
+ obtain ⟨⟨_, n, rfl⟩, e⟩ :=
319
+ (@is_localization.eq_iff_exists _ _ _ _ _ _ this (X.presheaf.map (hom_of_le $ h₁).op
320
+ ((X.presheaf.map (hom_of_le le_sup_left).op f) ^ n₂ * y₁))
321
+ (X.presheaf.map (hom_of_le $ h₂).op
322
+ ((X.presheaf.map (hom_of_le le_sup_right).op f) ^ n₁ * y₂))).mp _,
323
+ swap,
324
+ { simp only [map_pow, ring_hom.algebra_map_to_algebra, map_mul, ← comp_apply,
325
+ ← functor.map_comp, ← op_comp, hom_of_le_comp],
326
+ have h₃ : X.basic_open ((X.presheaf.map (hom_of_le (h₁.trans le_sup_left)).op) f) ≤ S.val,
327
+ { simpa only [X.basic_open_res] using inf_le_left, },
328
+ transitivity
329
+ X.presheaf.map (hom_of_le $ h₃.trans $ h₁.trans le_sup_left).op f ^ (n₂ + n₁) *
330
+ X.presheaf.map (hom_of_le $ (X.basic_open_res f _).trans_le inf_le_right).op x,
331
+ { rw [pow_add, mul_assoc], congr' 1 ,
332
+ convert congr_arg (X.presheaf.map (hom_of_le _).op) e₁,
333
+ { simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp], congr },
334
+ { simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp], congr },
335
+ { rw [X.basic_open_res, X.basic_open_res], rintros x ⟨H₁, H₂⟩, exact ⟨h₁ H₁, H₂⟩ } },
336
+ { rw [add_comm, pow_add, mul_assoc], congr' 1 ,
337
+ convert congr_arg (X.presheaf.map (hom_of_le _).op) e₂.symm,
338
+ { simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp], congr },
339
+ { simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp], congr },
340
+ { simp only [X.basic_open_res],
341
+ rintros x ⟨H₁, H₂⟩, exact ⟨h₂ H₁, H₂⟩ } } },
342
+ use n,
343
+ conv_lhs at e { rw mul_comm },
344
+ conv_rhs at e { rw mul_comm },
345
+ simp only [pow_add, map_pow, map_mul, ← comp_apply, ← mul_assoc,
346
+ ← functor.map_comp, subtype.coe_mk] at e ⊢,
347
+ convert e
348
+ end
349
+
350
+ lemma exists_eq_pow_mul_of_is_compact_of_is_quasi_separated (X : Scheme)
351
+ (U : opens X.carrier) (hU : is_compact U.1 ) (hU' : is_quasi_separated U.1 )
352
+ (f : X.presheaf.obj (op U)) (x : X.presheaf.obj (op $ X.basic_open f)) :
353
+ ∃ (n : ℕ) (y : X.presheaf.obj (op U)), y |_ X.basic_open f = (f |_ X.basic_open f) ^ n * x :=
354
+ begin
355
+ delta Top.presheaf.restrict_open Top.presheaf.restrict,
356
+ revert hU' f x,
357
+ apply compact_open_induction_on U hU,
358
+ { intros hU' f x,
359
+ use [0 , f],
360
+ refine @@subsingleton.elim (CommRing.subsingleton_of_is_terminal
361
+ (X.sheaf.is_terminal_of_eq_empty _)) _ _,
362
+ erw eq_bot_iff,
363
+ exact X.basic_open_le f },
364
+ { -- Given `f : 𝒪(S ∪ U), x : 𝒪(X_f)`, we need to show that `f ^ n * x` is the restriction of
365
+ -- some `y : 𝒪(S ∪ U)` for some `n : ℕ`.
366
+ intros S hS U hU hSU f x,
367
+ -- We know that such `y₁, n₁` exists on `S` by the induction hypothesis.
368
+ obtain ⟨n₁, y₁, hy₁⟩ := hU (hSU.of_subset $ set.subset_union_left _ _)
369
+ (X.presheaf.map (hom_of_le le_sup_left).op f) (X.presheaf.map (hom_of_le _).op x),
370
+ swap, { rw X.basic_open_res, exact inf_le_right },
371
+ -- We know that such `y₂, n₂` exists on `U` since `U` is affine.
372
+ obtain ⟨n₂, y₂, hy₂⟩ := exists_eq_pow_mul_of_is_affine_open X _ U.2
373
+ (X.presheaf.map (hom_of_le le_sup_right).op f) (X.presheaf.map (hom_of_le _).op x),
374
+ delta Top.presheaf.restrict_open Top.presheaf.restrict at hy₂,
375
+ swap, { rw X.basic_open_res, exact inf_le_right },
376
+ -- Since `S ∪ U` is quasi-separated, `S ∩ U` can be covered by finite affine opens.
377
+ obtain ⟨s, hs', hs⟩ := (is_compact_open_iff_eq_finset_affine_union _).mp
378
+ ⟨hSU _ _ (set.subset_union_left _ _) S.2 hS
379
+ (set.subset_union_right _ _) U.1 .2 U.2 .is_compact, (S ⊓ U.1 ).2 ⟩,
380
+ haveI := hs'.to_subtype,
381
+ casesI nonempty_fintype s,
382
+ replace hs : S ⊓ U.1 = supr (λ i : s, (i : opens X.carrier)) := by { ext1, simpa using hs },
383
+ have hs₁ : ∀ i : s, i.1 .1 ≤ S,
384
+ { intro i, change (i : opens X.carrier) ≤ S,
385
+ refine le_trans _ inf_le_left, use U.1 , erw hs, exact le_supr _ _ },
386
+ have hs₂ : ∀ i : s, i.1 .1 ≤ U.1 ,
387
+ { intro i, change (i : opens X.carrier) ≤ U,
388
+ refine le_trans _ inf_le_right, use S, erw hs, exact le_supr _ _ },
389
+ -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
390
+ -- for some `n` since `f ^ n₂ * y₁ = f ^ (n₁ + n₂) * x = f ^ n₁ * y₂` on `X_f`.
391
+ have : ∀ i : s, ∃ n : ℕ,
392
+ X.presheaf.map (hom_of_le $ hs₁ i).op
393
+ ((X.presheaf.map (hom_of_le le_sup_left).op f) ^ (n + n₂) * y₁) =
394
+ X.presheaf.map (hom_of_le $ hs₂ i).op
395
+ ((X.presheaf.map (hom_of_le le_sup_right).op f) ^ (n + n₁) * y₂),
396
+ { intro i,
397
+ exact exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux X i.1 S U (hs₁ i) (hs₂ i)
398
+ hy₁ hy₂ },
399
+ choose n hn using this ,
400
+ -- We can thus choose a big enough `n` such that `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
401
+ -- on `S ∩ U`.
402
+ have : X.presheaf.map (hom_of_le $ inf_le_left).op
403
+ ((X.presheaf.map (hom_of_le le_sup_left).op f) ^ (finset.univ.sup n + n₂) * y₁) =
404
+ X.presheaf.map (hom_of_le $ inf_le_right).op
405
+ ((X.presheaf.map (hom_of_le le_sup_right).op f) ^ (finset.univ.sup n + n₁) * y₂),
406
+ { fapply X.sheaf.eq_of_locally_eq' (λ i : s, i.1 .1 ),
407
+ { refine λ i, hom_of_le _, erw hs, exact le_supr _ _ },
408
+ { exact le_of_eq hs },
409
+ { intro i,
410
+ replace hn := congr_arg (λ x, X.presheaf.map (hom_of_le
411
+ (le_trans (hs₁ i) le_sup_left)).op f ^ (finset.univ.sup n - n i) * x) (hn i),
412
+ dsimp only at hn,
413
+ delta Scheme.sheaf SheafedSpace.sheaf,
414
+ simp only [← map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, ← mul_assoc]
415
+ at hn ⊢,
416
+ erw [← map_mul, ← map_mul] at hn,
417
+ rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn,
418
+ convert hn,
419
+ exact finset.le_sup (finset.mem_univ _) } },
420
+ use finset.univ.sup n + n₁ + n₂,
421
+ -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
422
+ -- the desired section on `S ∪ U`.
423
+ use (X.sheaf.obj_sup_iso_prod_eq_locus S U.1 ).inv ⟨⟨_ * _, _ * _⟩, this ⟩,
424
+ refine X.sheaf.eq_of_locally_eq₂
425
+ (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
426
+ (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_right).op f) ≤ _)) _ _ _ _ _,
427
+ { rw X.basic_open_res, exact inf_le_right },
428
+ { rw X.basic_open_res, exact inf_le_right },
429
+ { rw [X.basic_open_res, X.basic_open_res],
430
+ erw ← inf_sup_right,
431
+ refine le_inf_iff.mpr ⟨X.basic_open_le f, le_of_eq rfl⟩ },
432
+ { convert congr_arg (X.presheaf.map (hom_of_le _).op)
433
+ (X.sheaf.obj_sup_iso_prod_eq_locus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this ⟩) using 1 ,
434
+ { delta Scheme.sheaf SheafedSpace.sheaf,
435
+ simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _),
436
+ ← functor.map_comp, ← op_comp],
437
+ congr },
438
+ { delta Scheme.sheaf SheafedSpace.sheaf,
439
+ simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, mul_assoc,
440
+ pow_add], erw hy₁, congr' 1 , rw [← mul_assoc, ← mul_assoc], congr' 1 ,
441
+ rw [mul_comm, ← comp_apply, ← functor.map_comp], congr } },
442
+ { convert congr_arg (X.presheaf.map (hom_of_le _).op)
443
+ (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this ⟩) using 1 ,
444
+ { delta Scheme.sheaf SheafedSpace.sheaf,
445
+ simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _),
446
+ ← functor.map_comp, ← op_comp],
447
+ congr },
448
+ { delta Scheme.sheaf SheafedSpace.sheaf,
449
+ simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, mul_assoc,
450
+ pow_add], erw hy₂, rw [← comp_apply, ← functor.map_comp], congr } } }
451
+ end
452
+
453
+ /-- If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
454
+ This is known as the **Qcqs lemma** in [ R. Vakil, *The rising sea* ] [RisingSea ]. -/
455
+ lemma is_localization_basic_open_of_qcqs {X : Scheme} {U : opens X.carrier}
456
+ (hU : is_compact U.1 ) (hU' : is_quasi_separated U.1 )
457
+ (f : X.presheaf.obj (op U)) :
458
+ is_localization.away f (X.presheaf.obj (op $ X.basic_open f)) :=
459
+ begin
460
+ constructor,
461
+ { rintro ⟨_, n, rfl⟩,
462
+ simp only [map_pow, subtype.coe_mk, ring_hom.algebra_map_to_algebra],
463
+ exact is_unit.pow _ (RingedSpace.is_unit_res_basic_open _ f), },
464
+ { intro z,
465
+ obtain ⟨n, y, e⟩ := exists_eq_pow_mul_of_is_compact_of_is_quasi_separated X U hU hU' f z,
466
+ refine ⟨⟨y, _, n, rfl⟩, _⟩,
467
+ simpa only [map_pow, subtype.coe_mk, ring_hom.algebra_map_to_algebra, mul_comm z]
468
+ using e.symm },
469
+ { intros x y,
470
+ rw [← sub_eq_zero, ← map_sub, ring_hom.algebra_map_to_algebra],
471
+ simp_rw [← @sub_eq_zero _ _ (x * _) (y * _), ← sub_mul],
472
+ generalize : x - y = z,
473
+ split,
474
+ { intro H,
475
+ obtain ⟨n, e⟩ := exists_pow_mul_eq_zero_of_res_basic_open_eq_zero_of_is_compact X hU _ _ H,
476
+ refine ⟨⟨_, n, rfl⟩, _⟩,
477
+ simpa [mul_comm z] using e },
478
+ { rintro ⟨⟨_, n, rfl⟩, e : z * f ^ n = 0 ⟩,
479
+ rw [← ((RingedSpace.is_unit_res_basic_open _ f).pow n).mul_left_inj, zero_mul, ← map_pow,
480
+ ← map_mul, e, map_zero] } }
481
+ end
482
+
277
483
end algebraic_geometry
0 commit comments