Sto esaminando il vero libro di analisi di Terry Tao, che costruisce la matematica fondamentale dai numeri naturali in su. Formulando quante più prove possibili, spero di familiarizzare con Idris e tipi dipendenti.In lotta con la tattica della riscrittura in Idris
Ho definito il seguente tipo di dati:
data GE: Nat -> Nat -> Type where
Ge : (n: Nat) -> (m: Nat) -> GE n (n + m)
rappresentare la proposizione che un numero naturale è maggiore o uguale a un altro.
Attualmente sto lottando per dimostrare riflessività di questo rapporto, vale a dire di costruire la prova con la firma
geRefl : GE n n
Il mio primo tentativo è stato quello di provare semplicemente geRefl {n} = Ge n Z
, ma questo ha digitare Ge n (add n Z)
. Per ottenere questo di unificare con la firma desiderata, dobbiamo ovviamente di effettuare una sorta di riscrittura, presumibilmente coinvolge il lemma
plusZeroRightNeutral : (left : Nat) -> left + fromInteger 0 = left
mio miglior tentativo è la seguente:
geRefl : GE n n
geRefl {n} = x
where x : GE n (n + Z)
x = rewrite plusZeroRightNeutral n in Ge n Z
ma questo non TYPECHECK .
Potete per favore fornire una dimostrazione corretta di questo teorema e spiegare il ragionamento alla base di questo teorema?
Sarebbe molto più facile renderlo 'GE: (m: Nat) -> (n : Nat) -> GE n (m + n) 'invece. Quindi 'geRefl = GE Z'. – RhubarbAndC
@RububarbAndC Ho considerato questo, ma ha reso le altre cose più difficili. – user1502040