Je ne comprends pas comment on peut définir dans Agda un type de "Relation Symétrique Binaire". Imaginez que j'ai quelque chose comme:Comment peut-on définir un type d'opérations binaires symétriques dans Agda?
{-
First, we define a polymorphic idenity
-}
data _==_ {A : Set} (a : A) : A → Set where
definition-of-idenity : a == a
infix 30 _==_
{-
Next we define the finite set Ω = {A,B,C}
-}
data Ω : Set where
A B C : Ω
{-
We add a type "Binary operation"
-}
BinaryOperation = Ω → Ω → Ω
{-
I can actually define an example of Binary operation.
-}
_⊙_ : BinaryOperation
x ⊙ x' = A
infix 40 _⊙_
{-
And then I can proove that ⊙ is Symmetric
-}
proof-of-symmetry : ∀ x y → x ⊙ y == y ⊙ x
proof-of-symmetry = λ x y → definition-of-idenity
Comment on peut définir un type "Opération Binaire Symétrique"? Avoir ce type, nous serons en mesure de définir ⊙ comme
_⊙_ : SymmetricBinaryOperation
x ⊙ y = A
et la preuve que ⊙ est symétrique ne sera exigée.
Vous ne pouvez pas simplement dire que '_⊙_' est symétrique sans pour autant fournir une preuve de ce fait. Par conséquent, il n'y a aucun moyen de définir '_⊙_' comme' _⊙_: SymmetricBinaryOperation; x ⊙ y = A', sauf si vous utilisez des classes de type. La façon habituelle de définir des relations est de regrouper les opérations parmi les preuves dans les enregistrements. Vous pouvez trouver des exemples dans la bibliothèque standard [ici] (http://www.cse.chalmers.se/~nad/repos/lib/src/Relation/Binary.agda). Consultez également le tutoriel [this] (http://people.inf.elte.hu/divip/AgdaTutorial/Sets.Records.html). Et [ce] document (http://cs.ioc.ee/~james/papers/AssistedMonads2.pdf) est instructif. – user3237465
@ user3237465 donc, les enregistrements sont meilleurs que les données? –
Dans la plupart des cas. La différence ressemble beaucoup à 'newtype's et' data's de Haskell. Agda dispose également d'eta-laws pour les enregistrements et effectue une [unification de motif] sophistiquée (http://www2.tcs.ifi.lmu.de/~abel/talkTLCA11.pdf). Rarement vous ne voulez pas avoir eta, comme indiqué [ici] (http://agda.chalmers.narkive.com/l79pECtC/dummie-question-why-records#post4), mais l'exemple sur le lien est maintenant obsolète , et je ne suis pas au courant d'un autre. – user3237465