Ich habe versucht, Coq listSet
verwenden, um eine set
nats
zu erstellen. Ich habe jedoch Probleme beim Hinzufügen von Mitgliedern zum Set.Coq - Überschreiben von Gleichheit zum Hinzufügen von Elementen zum Set
Hier ist der Code, den ich verwende.
Require Import ListSet Nat.
Axiom eq_dec : forall x y : nat, {x = y} + {x <> y}.
Compute (set_add eq_dec 0 (set_add eq_dec 0 nil)).
Wenn er gestartet wird, ist der Ausgang
= if eq_dec 0 0 then (0 :: nil)% Liste sonst (0 :: 0 :: nil)% Liste : set nat
Jetzt weiß ich, warum ich die if-else
Aussagen in der Ausgabe immer bin. Es ist, weil ich Coq nur gesagt habe, dass die Gleichheit auf nats
entscheidbar ist, aber nichts über die Bewertung der Gleichheit. Ich weiß auch wie zwei nats
zu vergleichen. Der Code dafür ist unten.
Fixpoint nats_equal (m n : nat) : bool :=
match m, n with
| 0, 0 => true
| 0, _ => false
| _, 0 => false
| S m', S n' => nats_equal m' n'
end.
Allerdings bin ich die beiden zusammen zu String nicht in der Lage die gewünschte Ausgabe zu erhalten, die
ist(0 :: nil)% Liste: set nat
Ich würde schätze jede Hilfe zu diesem Thema.
Guter Punkt, hinzugefügt einige spezifischere Möglichkeiten zur Suche nach Decidable Gleichheit. –
Sie können auch "Scheme Equality for ..." erwähnen –