[Agda] common super-structure
Sergei Meshveliani
mechvel at botik.ru
Thu Sep 21 12:42:30 CEST 2017
On Mon, 2017-09-18 at 13:59 +0200, Guillaume Allais wrote:
> Hi Sergei,
>
> I don't really have an informed opinion on the two different approaches
> but something I noticed while I was preparing the PR for the stdlib's
> structure homomorphisms is that Agda will accept a record definition
> with missing fields as long as they can be resolved by unification.
>
> This means in particular that the where-clause of your g' can be reduced
> to (this pattern should maybe be given a toplevel definition called
> "mkSemigroup"):
>
> ==========================================================
> H = record{ isSemigroup = isSemig
> }
> H' = record{ isSemigroup = isSemig'
> }
> ==========================================================
>
> Given that this gets rid of a lot of the repetitions (at least in the
> term fragment, if not the type one) it may make the stdlib's approach
> more tractable for you.
Nice! Thank you. I see.
------
Sergei
>
> On 15/09/17 15:27, Sergei Meshveliani wrote:
> > People,
> >
> > I have a question on the algebraic hierarchy architecture in Standard
> > library.
> > This concerns the problem of a common super-structure (super-class).
> >
> > Consider the example:
> >
> > having f : ∀ {c l} → Semigroup c l → Semigroup c l → Semigroup c l,
> > implement
> > g : (H H' : Semigroup) → H and H' are on the same setoid → Semigroup
> > g H H' = f H H'
> >
> > Consider the program
> >
> > ----------------------------------------------------------------------
> > postulate f : ∀ {c l} → Semigroup c l → Semigroup c l → Semigroup c l
> >
> > g : ∀ {c l} → Semigroup c l → Semigroup c l → Semigroup c l -- wrong
> > g H H' = f H H'
> > ----------------------------------------------------------------------
> >
> > This will not do, because the domain of g is not as required.
> >
> > Below g' pretends to implement the goal:
> >
> > -------------------------------------------------------------
> > module CommonSuper where
> > open import Relation.Binary using (Setoid)
> > open import Algebra using (Semigroup)
> > open import Algebra.Structures using (IsSemigroup)
> > open import Algebra.FunctionProperties using (Op₂)
> >
> > postulate f : ∀ {c l} → Semigroup c l → Semigroup c l → Semigroup c l
> >
> > g' : ∀ {c l} → (S : Setoid c l) →
> > let open Setoid S using (_≈_; Carrier)
> > in
> > (_∙_ _∙'_ : Op₂ Carrier) →
> > IsSemigroup _≈_ _∙_ → IsSemigroup _≈_ _∙'_ → Semigroup c l
> >
> > g' S _∙_ _∙'_ isSemig isSemig' = f H H'
> > where
> > open Setoid S using (_≈_; Carrier)
> >
> > H = record{ Carrier = Carrier
> > ; _≈_ = _≈_
> > ; _∙_ = _∙_
> > ; isSemigroup = isSemig
> > }
> > H' = record{ Carrier = Carrier
> > ; _≈_ = _≈_
> > ; _∙_ = _∙'_
> > ; isSemigroup = isSemig'
> > }
> > --------------------------------------------------------------
> >
> > But here g' is applied not to a pair of semigroups but to their rather
> > decomposed forms.
> >
> > Further, g'' looks as something more close to the goal:
> >
> >
> > g'' : ∀ {c l} → (H H' : Semigroup c l) →
> > let S = Semigroup.setoid H
> > S' = Semigroup.setoid H'
> > in
> > (CoinverseSetoidIso S S') → Semigroup c l
> >
> > g'' H H' _ = f H H'
> >
> >
> > Here isoPair : CoinverseSetoidIso S S'
> >
> > is a pair of mutually inverse setoid isomorphisms between S and S'.
> > For the condition of "over the same setoid" it suggests to include a
> > setoid isomorphism into the signature.
> > Still a complication. We have two different types for setoid instead of
> > one.
> >
> > The release 0.04.1 of the DoCon-A library applies the approach in which
> > the Semigroup record will have (S : Setoid) as an _argument_.
> > And a similar construct with super-structures as arguments is repeated
> > for Group, Ring, and so on.
> > With this approach, the examples like the above g are programmed
> > easier.
> >
> > But this still leads to a certain complication. Because this forces
> > introduction of certain up-structures: Semigroup - UpSemigroup,
> > Group - UpGroup, and so on (see Manual on DoCon-A-0.04.1).
> >
> > In DoCon-A-2.00, I return to the approach similar to Standard library,
> > with adding the Is-structures (IsSemigroup, IsGroup, and such).
> >
> > Anyway, a spot of inadequacy is visible.
> >
> > Can anybody comment on this philosophy?
> >
> > Regards,
> >
> > ------
> > Sergei
> >
> >
> > _______________________________________________
> > Agda mailing list
> > Agda at lists.chalmers.se
> > https://lists.chalmers.se/mailman/listinfo/agda
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
More information about the Agda
mailing list