Module morphisms polymorphic in the underlying ring structure#2810
Module morphisms polymorphic in the underlying ring structure#2810Taneb wants to merge 3 commits intoagda:masterfrom
Conversation
|
Maybe I'm missing something, but I'm not clear about the (eventual) pragmatics/uses of this design, compared with factorising any X-module morphism between
But still, documenting the rationale for the design as part of the PR documentation, if not as commentary in the files themselves, would be useful, I think. As to unsolved metas/need for explicit arguments, that seems to be a recurring problem with Agda's (weakened) mechanisms for inferring such things in the setting of the more complicate flags/modality/erasure/polarity analyses now being instrumented? UPDATED:
|
|
I agree that more documentation would have been helpful. From what I can see from the code:
|
|
@JacquesCarette does the change-of-base construction give you what you want, as suggested above? |
Quite likely. But the devil's in the details for such things, thus my hedging. |
| LeftModule R (m ⊔ m′) (ℓm ⊔ ℓm′) | ||
| leftModule M N = record | ||
| { -ᴹ_ = map M.-ᴹ_ N.-ᴹ_ | ||
| { -ᴹ_ = map (M.-ᴹ_) (N.-ᴹ_) |
There was a problem hiding this comment.
Do the parentheses help here? I'm not convinced...
There was a problem hiding this comment.
It's been a while, but I think without them Agda doesn't know if I mean that or a use of the _-ᴹ_ operator
There was a problem hiding this comment.
Ah... I see, but still worth thinking about the earlier comment about having a small PR adding that subtraction operator in its own right?
| { +ᴹ-isMonoidHomomorphism = isMonoidHomomorphism ≈ᴹ₃-trans F.+ᴹ-isMonoidHomomorphism G.+ᴹ-isMonoidHomomorphism | ||
| ; *ₗ-homo = λ r x → ≈ᴹ₃-trans (G.⟦⟧-cong (F.*ₗ-homo r x)) (G.*ₗ-homo r (f x)) | ||
| } where module F = IsLeftSemimoduleHomomorphism f-homo; module G = IsLeftSemimoduleHomomorphism g-homo | ||
| } where module F = IsLeftSemimoduleHomomorphism M₁ M₂ f-homo; module G = IsLeftSemimoduleHomomorphism M₂ M₃ g-homo |
There was a problem hiding this comment.
So I agree with you that it's annoying to have to be explicit with these arguments... I suppose that's one way of nudging the typechecker to know which scalars are involved at a given call-/use- site in this new setup, but perhaps simply supplying the R/S arguments would be the other way to do it?
| {r} (R : Set r) -- The underlying ring | ||
| {r} (R : Set r) -- The underlying ring of the domain | ||
| {s} (S : Set s) -- The underlying ring of the codomain | ||
| ([_] : R → S) -- The homomorphism between the underlying rings |
There was a problem hiding this comment.
As I've indicated before, i think this design is trying to do too many things at once which could be usefully factored into smaller pieces, such as #2913 ?
There was a problem hiding this comment.
Yes, I've come to agree with you on this.
There was a problem hiding this comment.
OK, let's see what comes out in the wash!
|
Closing in favour of the approach described in #2913 |
This was a side-experiment in #2729 that I separated out so it could get feedback without hindering that PR. It is neither blocking nor blocked by that PR.
I'm frustrated that defining monomorphic module morphisms in terms of polymorphic ones messes with the (Agda) module parameters needed downstream. I'm not sure why they need to be made explicit