Realization Boundaries · Lean source
DirectSumEndomorphisms.lean
Declared contract recorded Coverage and evidence
The cited release explicitly reports completion of its registered formal contract, under its exact hypotheses.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
Local imports (2)
RealizationBoundaries/DirectSumEndomorphisms.lean80 lines
Original source path
RealizationBoundaries/DirectSumEndomorphisms.leanSkip declarations and read code
1 import RealizationBoundaries.DiagonalRealization
2 import RealizationBoundaries.CompletionConsequences
3
4 /-! # The endomorphism ring of the original finite-support subgroup -/
5 set_option autoImplicit false
6 noncomputable section
7 namespace RealizationBoundaries
8
9 /-- Every coordinate family restricts to the actual finite-support subgroup. -/
10 def finiteSupportDiagonal (c : Ambient) : AddMonoid.End finiteSupport where
11 toFun x := ⟨diagonal c x.val, diagonal_finiteSupport c x.val x.property⟩
12 map_zero' := Subtype.ext (map_zero (diagonal c))
13 map_add' x y := Subtype.ext (map_add (diagonal c) x.val y.val)
14
15 @[simp] theorem finiteSupportDiagonal_apply (c : Ambient) (x : finiteSupport) (p : Prime) :
16 (finiteSupportDiagonal c x).val p = c p * x.val p := rfl
17
18 /-- Multiplication in the source is coordinatewise; multiplication in the target is composition. -/
19 def finiteSupportDiagonalRing : Ambient →+* AddMonoid.End finiteSupport where
20 toFun := finiteSupportDiagonal
21 map_zero' := by
22 apply AddMonoidHom.ext
23 intro x
24 apply Subtype.ext
25 funext p
26 exact zero_mul (x.val p)
27 map_one' := by
28 apply AddMonoidHom.ext
29 intro x
30 apply Subtype.ext
31 funext p
32 exact one_mul (x.val p)
33 map_add' c d := by
34 apply AddMonoidHom.ext
35 intro x
36 apply Subtype.ext
37 exact diagonal_add c d x.val
38 map_mul' c d := by
39 apply AddMonoidHom.ext
40 intro x
41 apply Subtype.ext
42 exact diagonal_mul c d x.val
43
44 theorem finiteSupportDiagonalRing_bijective : Function.Bijective finiteSupportDiagonalRing := by
45 constructor
46 · intro c d h
47 funext p
48 have he := congrArg (fun f : AddMonoid.End finiteSupport => (f (primeSeed p)).val p) h
49 classical
50 change c p * (primeSeed p).val p = d p * (primeSeed p).val p at he
51 simpa [primeSeed, cut] using he
52 · intro f
53 let e := bottomFiniteSupportEquiv
54 let g : preimage (⊥ : Submodule ℚ TailSpace) →+
55 preimage (⊥ : Submodule ℚ TailSpace) :=
56 e.symm.toAddMonoidHom.comp (f.comp e.toAddMonoidHom)
57 refine ⟨homDiagonal ⊥ ⊥ g, ?_⟩
58 apply AddMonoidHom.ext
59 intro x
60 apply Subtype.ext
61 exact (hom_eq_diagonal ⊥ ⊥ g (e.symm x)).symm
62
63 /-- Monograph Proposition 2.2: the original direct-sum endomorphism ring, not a proxy. -/
64 def finiteSupportEndomorphismRingEquiv : AddMonoid.End finiteSupport ≃+* Ambient :=
65 (RingEquiv.ofBijective finiteSupportDiagonalRing finiteSupportDiagonalRing_bijective).symm
66
67 /-- No arbitrary endomorphism of D can introduce a missing prime coordinate. -/
68 theorem finiteSupport_endomorphism_coordinate (f : AddMonoid.End finiteSupport)
69 (x : finiteSupport) (p : Prime) :
70 (f x).val p = finiteSupportEndomorphismRingEquiv f p * x.val p := by
71 have he : finiteSupportDiagonalRing (finiteSupportEndomorphismRingEquiv f) = f :=
72 (RingEquiv.ofBijective finiteSupportDiagonalRing
73 finiteSupportDiagonalRing_bijective).apply_symm_apply f
74 exact (congrArg (fun g : AddMonoid.End finiteSupport => (g x).val p) he).symm
75
76 theorem finiteSupport_endomorphism_preserves_zero (f : AddMonoid.End finiteSupport)
77 (x : finiteSupport) (p : Prime) (hx : x.val p = 0) : (f x).val p = 0 := by
78 rw [finiteSupport_endomorphism_coordinate, hx, mul_zero]
79
80 end RealizationBoundaries
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: 4bc505ada42e86bb31daf5dd20c02d04737472b43cb5d611eeace6cf1d9f2c6c