Description
This is another instance of the issues arising when adding 'derived forms' to a(n algebraic) structure/bundle, namely where should they be added:
- to the
RawX
bundle? this is currently the case for_≉_
, but AFAICT, never used, except to hereditarily be re-exported to richer structures; - to the
IsX
structure? this is not currently the case for_≉_
via anIsEquivalence
field, but is forIsGroup._-_
cf. Add new operations (cf.RawQuasigroup
) toIsGroup
#2251 ; - to the
X
bundle? this is also the case for_≉_
via thesetoid
manifest field ([fixes #1214] Add negated ordering relation symbols systematically toRelation.Binary.*
#2095 , Added remaining flipped and negated relations to binary relation bundles #2162 ), when that is in fact a 'derived form' defined in theIsX
structure... and by the opening of the underlyingRawX
bundle.
The first and third cases seem to me to represent a clear DRY violation, and probably arise from the accumulation of 'legacy' design decisions. But what, if any, should be our refactoring policy towards a revised design?
Context: I'm working on a branch/PR addressing #2273 and find myself wondering whether (Raw)SuccessorSet
needs explicitly to declare a negated equality symbol, when it should be (available to be) brought into scope via the Setoid
instance of IsSuccessorSet
...
UPDATED I've tried to regularise my vocabulary to avoid speaking of 'instance's of record
types in favour of referring to their (often also record
-typed`) fields, also often manifest, ie. defined rather than declared.