55Fermer57
PolluxLe 18/05/2008 à 02:02
PpHd (./55) :
Pollux (./54) :
Il y a une bonne raison pour ça ? Je vois pas en quoi add_c(x,y) serait fondamentalement différent de la liste {x,y} du point de vue du GC...
La raison est que les fils de x qui appartient à un espace N ne peuvent jamais appartenir à un espace N+1. Seulement <= N.

Je vois pas... (t'as zappé mon "?" du post précédent aussi happy)
Pollux (./54) :
Ah oui c'est super crade de faire ça...

Tu n'as que ce mot à la bouche tongue

Bah j'y peux rien si c'est le meilleur descriptif de certaines caractéristiques des CAS cheeky Dans le genre crade, AMS est pas mal aussi ^^
Pollux (./54) :
Ca veut dire que finalement tu casses la notion de types explicites dont j'avais parlé. Pourquoi tu ferais pas plutôt une extension pour gérer les types modulo ? (en plus ça serait une bonne occasion de "eat your own dogfood" pour voir si ton système d'extension tient la route, ou si au contraire le fait de rajouter un noeud pour préciser le type est 50x plus lourd que d'avoir une vraie annotation de type sur chaque noeud ; personnellement je penche pour la 2è solution ^^)

C'est prévu (Et j'en ai déjà fait des extensions - les lists par exemple).
En fait, je sais pas trop comment gérer la notion de RootOf, et je me demande si mod ne serait pas une solution convenable pour gérer les extensions algébriques.
En gros, on aura les transformations suivantes:
mod(x,2)+3*mod(y,2) -> mod(x+y,2)
mod(f12),2) -> mod(f(12),2)
mod(x^3+x,x^2+1,x) -> mod(-x+,x^2+1,x)
mod(mod(x^3+x,x^2+1,x),3) -> mod(mod(2*x+1,x^2+1,x),3) Et faudra surcharger les appels à degree, expand, gcd, ...

Je crois que ça ne peut pas marcher vraiment proprement comme ça. Je vais distinguer deux types de mod(), le mod() d'AMS qui calcule dans Q/R/C puis au dernier moment réduit la valeur et ton mod() qui représente une classe d'équivalence et suppose que toutes les feuilles sont modulo p.
Le problème c'est que tu ne peux pas transformer amsmod(2*x,2) en 0 si tu ne supposes pas x entier ; inversement pphdmod((x+1)/2,2) provoque une division par 0. Je vois deux solutions :
- empêcher que le type top-down de pphdmod() descende à *toutes* les feuilles : on pourrait écrire pphdmod(integer((x+1)/2),2) pour protéger (x+1)/2 de l'évaluation mod 2
- annoter x dans amsmod() pour signifier qu'il sera bien entier
Moi je pencherais pour des annotations systématiques à chaque noeud ^^


Autre question : est-ce que tu autorises des trucs genre mod(x,2*pi) ? (ou mod(pi,2))