Zeige (Kopf. init) = Kopf in Agda

8

Ich versuche, ein einfaches Lemma in Agda zu beweisen, was ich für wahr halte.

  

Wenn ein Vektor mehr als zwei Elemente hat, ist die Übernahme von head nach der Verwendung von init gleichbedeutend mit der gleichzeitigen Verwendung von head .

Ich habe es wie folgt formuliert:

%Vor%

Was gibt mir?

%Vor%

als Antwort.

Ich verstehe nicht ganz, wie man die (init (x ∷ xs) | (initLast (x ∷ xs) | initLast xs)) -Komponente liest. Ich nehme an, meine Fragen sind; ist es möglich, wie und was bedeutet dieser Begriff?

Vielen Dank.

    
Jason Reich 10.08.2010, 16:09
quelle

2 Antworten

8
  

Ich verstehe nicht ganz, wie   lies die (init (x ∷ xs) | (initLast (x ∷ xs) | initLast xs)) -Komponente. ich   Angenommen, meine Fragen sind; ist es   möglich, wie und was heißt das?   gemein.

Dies sagt Ihnen, dass der Wert init (x ∷ xs) von dem Wert von alles rechts von | abhängt. Wenn Sie in Agda etwas in einer Funktion beweisen, muss Ihr Beweis die Struktur der ursprünglichen Definition haben.

In diesem Fall müssen Sie das Ergebnis von initLast berücksichtigen, weil die Definition von initLast dies vor dem Erzeugen von Ergebnissen tut.

%Vor%

Also hier ist, wie wir das Lemma schreiben.

%Vor%

Ich habe mir erlaubt, Ihr Lemma auf Vec A zu verallgemeinern, da das Lemma nicht vom Inhalt des Vektors abhängt.

    
glguy 07.11.2010, 22:26
quelle
3

Ok. Ich habe das durch Betrug und ich hoffe, dass jemand eine bessere Lösung hat. Ich habe alle zusätzlichen Informationen, die du von init bekommst, in initLast weggeworfen und meine eigene naive Version erstellt.

%Vor%

Jetzt ist das Lemma trivial.

Irgendwelche anderen Angebote?

    
Jason Reich 11.08.2010 16:20
quelle

Tags und Links