Diskussion:Invariante (Informatik)

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 7 Jahren von Drachentöter2012 in Abschnitt Link "Invarianz in Java"
Zur Navigation springen Zur Suche springen

Sollte es nicht heißen "FOR a = 1 TO 5 STEP 1" statt "... NEXT 1"? Auch wenn's nur Pseudocode ist, wäre das verständlicher, zumal NEXT weiter unten mit anderer Semantik auftaucht. --rara 10:47, 30. Nov 2004 (CET)

Überarbeiten[Quelltext bearbeiten]

Widersprüchliche Aussagen: Eine Invariante ist eine Bedingung, die in jedem Programmzustand erfüllt sein muss <-> Schleifeninvarianten müssen zu jedem Zeitpunkt des Programms gelten, ausser in der Schleife selbst.

Die Schleifeninvariante muss selbstverständlich auch innerhalb der Schleife gelten..!

Schritte für die Beweisführung:
  1. precondition -> INVARIANTE
  2. (INVARIANTE AND (NOT b)) -> postcondition
  3. Schleife terminiert
--ngo
Teilweise wird "um den heißen Brei herumgeschlichen". --Mulno 17:45, 11. Jun 2005 (CEST)

Wahrscheinlich hat ngo das gleiche gemeint, aber es ist doch so, dass eine Schleieninvariante während eines Schleifendurchlaufs verletzt sein kann, aber vor und nach jedem Durchlauf erfüllt sein muss. Das heißt ich würde mehr zwischen Schleife und Schleifendurchlauf differenzieren, für mich ist die Schleife das gesamte Konstrukt vom ersten bis zum letzten Durchlauf. (Vielleicht helfen auch die Begriffe Schleifenkopf und Schleifenrumpf.) -- Evolux 18:18, 7. Jan 2006 (CET)

Überarbeitet[Quelltext bearbeiten]

Ich habe mir erlaubt, den Text widerspruchsfrei zu gestalten, und inhaltliche Änderungen vorzunehmen, da mir die gegebenen unsinnig erschienen und bspw. mit http://www.computerbase.de/lexikon/Schleifeninvariante in Konflikt stehen.

Ich habe mich nicht getraut, den Weblink zu entfernen, da ich glaube, er gehört an andere Stelle. Ich bitte, ihn dahin zu transferieren.

84.185.11.238 18:33, 7. Jan 2006 (CET)Niko

Kann vielleicht jemand erklären wie man, herangeht um eine Schleifeninvariante zu finden ?

z.b. für

static boolean ordered(int[] a)

   boolean sortiert = true;
   int i = 0;
   while(sortiert && i<a.length-1){
         if(a[i]>a[i+1])
            sortiert = false;
         i++;
   }
   return sortiert;

}


THX (nicht signierter Beitrag von 88.72.42.12 (Diskussion) 16:48, 13. Jan 2006)

(Hierher verschoben von Gunther 16:58, 13. Jan 2006 (CET))

Ein System zum Finden von Invarianten gibt es grundlegend nicht. Man braucht etwas Gefühl und Übung. Eine Invariante gilt immer für den betreffenden Abschnitt. M.M. nach wäre hier folgendes zu unterscheiden: i >= 0 und i < a.length-1, da letztere die stärkere Invariante ist, ist diese die gesuchte Invariante. Eine stärkere Invariante "grenzt mehr ein". --JensKohl 17:17, 14. Jan 2006 (CET)

Die Invariante soll ja helfen um die Korrektheit der Schleife zu begruenden. Im o.a. Beispiel ist natuerlich i>=0 eine Invariante, aber eben nicht die entscheidende. Die Intuition des Erfinders dieser Schleife ist doch wohl, dass, falls sortiert=true, dann der Bereich a[0]..a[i] sortiert ist. Am Ende der Schleife ist i=a.length-1 also ist, falls immer noch sortiert=true, das Array in diesem Falle sortiert. Es kann gut sein, dass hier noch irgendwo eins addiert oder subtrahiert werden muss.

Damit die Invariante "durchgeht", also man zeigen kann, dass sie im naechsten Schleifendurchlauf gilt, nur unter der Annahme, dass sie vorher gegolten hat und man die Schleife nicht inzwischen verlassen hat, kann es sein, dass man sie verstaerken muss. Zum Beispiel muss man hier 0<=i<a.length zur Invariante hinzunehmen und damit es ganz formal hinhaut auch noch, dass das Array gleich dem urspruenglichen ist, durch die Schleifenanweisungen nicht veraendert wird. Eine andere Invariante ist dass wenn sortiert=false ist, dann der Bereich a[0]..a[i] nicht sortiert ist. Auch die gilt am Anfang (da ist naemlcih gar nicht sortiert=false) und wird von jedem Durchlauf erhalten.

Uebrigens gefaellt mir der ganze Eintrag zu Invarianten in der Informatik gar nicht gut. Er erklaert nicht das Konzept sondern faengt gleich mit Details und Spezialfallen an. Genauso wie diese typischen Informatikerauskuenfte: Kannst Du mir mal erklaeren, was XML ist? Also Du brauchst zunaechst mal einen DTD oder ein Schema, das faengt mit ... an. Dann kannst Du entweder das SAX oder das DOM Modell verwenden..... [Martin Hofmann, 14.2.2006]

Wäre dir als Antwort „es ist eine selbstbeschreibende Beschreibungs- bzw. Auszeichnungssprache“ lieber? Da weiß man doch dann auch nicht was es ist. --JensKohl 15:00, 17. Feb 2006 (CET)

Link "Invarianz in Java"[Quelltext bearbeiten]

Das Thema "Invarianz von Typparametern" hat doch nichts mit den Invarianten, also Bedingungen zu tun, oder täusche ich mich da? In der Definition im Artikel finden Typsysteme keine Erwähnung, ich glaube daher, dass es sinnvoll wäre den Link zu entfernen, da er nichts mit dem Thema zu tun hat. --Drachentöter2012 (Diskussion) 12:41, 24. Jan. 2017 (CET)Beantworten