Ich gehe durch Terry Taos echtes Analyse-Lehrbuch, das grundlegende Mathematik von den natürlichen Zahlen aufbaut. Indem ich so viele Beweise wie möglich formalisiere, hoffe ich, mich sowohl mit Idris als auch mit abhängigen Typen vertraut zu machen.Kämpfen mit Rewrite-Taktik in Idris
I haben die folgenden Datentypen definiert:
data GE: Nat -> Nat -> Type where
Ge : (n: Nat) -> (m: Nat) -> GE n (n + m)
den Satz zu repräsentieren, dass eine natürliche Zahl größer als oder gleich zu einem anderen.
Ich kämpfe derzeit Reflexivität dieser Beziehung zu beweisen, das heißt den Beweis mit Unterschrift war
geRefl : GE n n
Mein erster Versuch zu konstruieren einfach geRefl {n} = Ge n Z
versuchen, aber das hat Ge n (add n Z)
geben. Um dies mit der gewünschten Signatur zu vereinen, müssen wir offensichtlich eine Art von Umschreiben auszuführen, vermutlich unter Beteiligung der Lemma
plusZeroRightNeutral : (left : Nat) -> left + fromInteger 0 = left
Mein bester Versuch ist die folgende:
geRefl : GE n n
geRefl {n} = x
where x : GE n (n + Z)
x = rewrite plusZeroRightNeutral n in Ge n Z
aber dies nicht typecheck .
Können Sie bitte einen korrekten Beweis für dieses Theorem geben und die Gründe dafür erklären?
Es wäre viel einfacher, es zu machen GE: (m: Nat) -> (n : Nat) -> GE n (m + n) 'stattdessen. Dann 'geRefl = GE Z'. – RhubarbAndC
@RhubarbAndC Ich dachte darüber nach, aber es machte andere Dinge schwieriger. – user1502040