@@ -19,6 +19,7 @@ open import Cubical.HITs.FreeAbGroup
1919open import Cubical.Algebra.AbGroup
2020open import Cubical.Algebra.AbGroup.Instances.Pi
2121open import Cubical.Algebra.AbGroup.Instances.Int
22+ open import Cubical.Algebra.AbGroup.Instances.DirectProduct
2223open import Cubical.Algebra.Group
2324open import Cubical.Algebra.Group.Morphisms
2425open import Cubical.Algebra.Group.MorphismProperties
@@ -413,3 +414,49 @@ agreeOnℤFinGenerator→≡ {n} {m} {ϕ} {ψ} idr =
413414 λ f p → IsGroupHom.presinv (snd ϕ) f
414415 ∙∙ (λ i x → -ℤ (p i x))
415416 ∙∙ sym (IsGroupHom.presinv (snd ψ) f)))
417+
418+ --
419+ sumCoefficients : (n : ℕ) → AbGroupHom (ℤ[Fin n ]) (ℤ[Fin 1 ])
420+ fst (sumCoefficients n) v = λ _ → sumFinℤ v
421+ snd (sumCoefficients n) = makeIsGroupHom (λ x y → funExt λ _ → sumFinℤHom x y)
422+
423+ ℤFinProductIso : (n m : ℕ) → Iso (ℤ[Fin (n +ℕ m) ] .fst) ((AbDirProd ℤ[Fin n ] ℤ[Fin m ]) .fst)
424+ ℤFinProductIso n m = iso sum→product product→sum product→sum→product sum→product→sum
425+ where
426+ sum→product : (ℤ[Fin (n +ℕ m) ] .fst) → ((AbDirProd ℤ[Fin n ] ℤ[Fin m ]) .fst)
427+ sum→product x = ((λ (a , Ha) → x (a , <→<ᵗ (≤-trans (<ᵗ→< Ha) (≤SumLeft {n}{m}))))
428+ , λ (a , Ha) → x (n +ℕ a , <→<ᵗ (<-k+ {a}{m}{n} (<ᵗ→< Ha))))
429+
430+ product→sum : ((AbDirProd ℤ[Fin n ] ℤ[Fin m ]) .fst) → (ℤ[Fin (n +ℕ m) ] .fst)
431+ product→sum (x , y) (a , Ha) with (a ≟ᵗ n)
432+ ... | lt H = x (a , H)
433+ ... | eq H = y (a ∸ n , <→<ᵗ (subst (a ∸ n <_) (∸+ m n) (<-∸-< a (n +ℕ m) n (<ᵗ→< Ha) (subst (λ a → a < n +ℕ m) H (<ᵗ→< Ha)))))
434+ ... | gt H = y (a ∸ n , <→<ᵗ (subst (a ∸ n <_) (∸+ m n) (<-∸-< a (n +ℕ m) n (<ᵗ→< Ha) (<ᵗ→< (<ᵗ-trans {n}{a}{n +ℕ m} H Ha)))))
435+
436+ product→sum→product : ∀ x → sum→product (product→sum x) ≡ x
437+ product→sum→product (x , y) = ≡-× (funExt (λ (a , Ha) → lemx a Ha)) (funExt (λ (a , Ha) → lemy a Ha))
438+ where
439+ lemx : (a : ℕ) (Ha : a <ᵗ n) → fst (sum→product (product→sum (x , y))) (a , Ha) ≡ x (a , Ha)
440+ lemx a Ha with (a ≟ᵗ n)
441+ ... | lt H = cong x (Fin≡ (a , H) (a , Ha) refl)
442+ ... | eq H = rec (¬m<ᵗm (subst (λ a → a <ᵗ n) H Ha))
443+ ... | gt H = rec (¬m<ᵗm (<ᵗ-trans Ha H))
444+
445+ lemy : (a : ℕ) (Ha : a <ᵗ m) → snd (sum→product (product→sum (x , y))) (a , Ha) ≡ y (a , Ha)
446+ lemy a Ha with ((n +ℕ a) ≟ᵗ n)
447+ ... | lt H = rec (¬m<m (≤<-trans (≤SumLeft {n}{a}) (<ᵗ→< H)))
448+ ... | eq H = cong y (Fin≡ _ _ (∸+ a n))
449+ ... | gt H = cong y (Fin≡ _ _ (∸+ a n))
450+
451+ sum→product→sum : ∀ x → product→sum (sum→product x) ≡ x
452+ sum→product→sum x = funExt (λ (a , Ha) → lem a Ha)
453+ where
454+ lem : (a : ℕ) (Ha : a <ᵗ (n +ℕ m)) → product→sum (sum→product x) (a , Ha) ≡ x (a , Ha)
455+ lem a Ha with (a ≟ᵗ n)
456+ ... | lt H = cong x (Fin≡ _ _ refl)
457+ ... | eq H = cong x (Fin≡ _ _ ((+-comm n (a ∸ n)) ∙ ≤-∸-+-cancel (subst (n ≤_) (sym H) ≤-refl)))
458+ ... | gt H = cong x (Fin≡ _ _ ((+-comm n (a ∸ n)) ∙ ≤-∸-+-cancel (<-weaken (<ᵗ→< H))))
459+
460+ ℤFinProduct : (n m : ℕ) → AbGroupIso ℤ[Fin (n +ℕ m) ] (AbDirProd ℤ[Fin n ] ℤ[Fin m ])
461+ fst (ℤFinProduct n m) = ℤFinProductIso n m
462+ snd (ℤFinProduct n m) = makeIsGroupHom (λ x y → refl)
0 commit comments