Tutti sanno che il modo elegante per esprimere numeri naturali su linguaggi funzionali dipendente tipizzati:Come si formalizza la torre numerica sui linguaggi funzionali?
data Nat = Zero | Succ Nat
Integer, Frazione, reale, Complex e Quaternion sono, anche, molto importante per l'applicazione pratica di programmazione. li si potrebbe implementare come:
data Integer = Integer (sign : Bool) (modulus : Nat)
data Fraction = Fraction (dividend : Nat) (divisor : Nat)
data Real = Real (exponent : Integer) (fraction : Nat)
data Complex = Complex Real Real
data Quaternion = Quaternion Real Real Real Real
Ma nessuno di quelli davvero riflettere la reale struttura di/natura dei loro tipi di significato come Nats fanno. L'intero non è isomorfo rispetto agli interi effettivi, ad esempio (poiché Zero si verifica due volte). Reals ha bisogno di più di un milione di celle per memorizzare (3.141592), ma nemmeno di 100 per memorizzare (4096), che sembra sbilanciato. Complex è solo una tupla di Reals, che non riflette in realtà ciò che è un Complesso. Mi chiedo qual è il modo naturale ed elegante per esprimere la torre numerica sui linguaggi di programmazione funzionale?
Ho già fatto domande simili, ma penso che nessuno sia mai arrivato con una soluzione abbastanza buona. – MaiaVictor
Perché non pensi che "rispecchi accuratamente ciò che è un" Complesso "? (Detto questo, il tuo 'Real' include solo valori decimali finitamente lunghi, che è un sottoinsieme rigoroso dei razionali.) Voglio dire, suppongo che potresti rappresentarlo come il vero polinomio mod x^2 + 1, ma non è chiaro me, quale è la tua obiezione. –
Matematicamente parlando, non esiste una "struttura fondamentale" di qualcosa di diverso da ciò che selezioniamo, e se ci piace possiamo mostrare che due strutture diverse sono equivalenti e le usano in modo intercambiabile. Non c'è niente di matematico nella tua rappresentazione degli interi. –