Autoréférence - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Phylactère autoréférent

L’autoréférence est la propriété, pour un système, de faire référence à lui-même. La référence est possible lorsqu’on est en présence de deux niveaux logiques, un niveau et un méta-niveau. Cette situation se rencontre fréquemment en mathématiques, en philosophie, en programmation ou encore en linguistique.

Il y a hétéroréférence lorsqu’un mot (ou une phrase) se réfère à un objet (ou une situation) du monde, par exemple : une encyclopédie. Il y a autoréférence lorsqu’un signe se réfère à lui-même. Ainsi, la phrase : « Cette phrase compte cinq mots » est autoréférente. Les phrases autoréférentes peuvent être paradoxales ; ainsi : « Cette phrase est un mensonge » (paradoxe d'Épiménide) ne peut être classée vraie ou fausse. Un paradoxe de type Épiménide peut être considéré comme la négation d’une autoréférence. Exemples tirés du Trésor des Paradoxes (Éd. Belin) : « N’est pas en français est en français » ; « Imprimé ici n’est pas imprimé ici » ; « Ma fourche ne langue jamais » (contrepèterie avec négation d’une autoréférence) ; « Je ne m’ai jamais trompé en parlant » ; « Cette phrase n’est pas autoréférente » ; « Si cette phrase était traduite en chinois, elle signifierait tout autre chose » (Douglas Hofstadter).

Un autre type de situation autoréférentielle est celui de l’autopoïèse, car l’organisation logique produit la structure physique qui la réalise logiquement et la régénère.

En philosophie

Certains concepts ont un fort caractère autoréférentiel, par exemple conscience, être, réalité, identité, existence. Ils renvoient à eux-mêmes : on parle de miroir ontologique.

En bouddhisme

L'étude des kōans ou paradoxes constitue une des bases de l'enseignement du Zen sōtō. De nombreux koans sont basés sur l'autoréférence.

Exemple

« Toutes les choses sont impermanentes. »

« L'impermanence est-elle permanente ou impermanente ? »

On retrouve dans certains koans la même structure que les paradoxes logiques en mathématiques. Dans l'exemple ci-dessus, il est clair que si l'impermanence est permanente, alors il existe quelque chose de permanent (l'impermanence elle-même) et tout n'est pas impermanent. Et que si l'impermanence est impermanente cela signifie qu'elle a une fin au-delà de laquelle va régner la permanence.

En informatique

Programmation

En programmation informatique, on peut faire référence à une variable par un pointeur. En langage Pascal, par exemple, la référence à une variable V s'écrit @V. Ainsi, si on définit un pointeur P de la sorte :

      var P: Pointer;          I: Integer;             begin         P := @I;  { P pointe sur l'entier I }         P := @P;  { Maintenant, P pointe sur lui-même }      end.      

alors, à la fin, le pointeur P pointera sur lui-même.

On peut établir des exemples plus complexes avec des types structurés. Par exemple :

      type { définition des types de variables utilisés }                PStructure = ^TStructure;  { type pointeur vers structure }                TStructure = record      { le type de la structure elle-même }            a,b,c: integer;       { quelques variables, ici des nombres entiers }            SoiMeme: PStructure;  { le pointeur que l'on va utiliser pour l'autoréférencement }         end;             var         S : TStructure;   { notre variable de structure }             begin         S.a := 5;  { on définit des valeurs }         S.b := 6;         S.c := 8;         S.SoiMeme := @S;  { on affecte au pointeur de structure l'adresse de S elle-même }      end.      

L'intérêt peut être dans certains cas de faire une liste chaînée infinie. Par exemple, si on définit le type suivant :

      type         PListe = ^TListe;         TListe = record            element : integer;            suivant : PListe;           end;      

On peut donner quelques éléments distincts 1, 2 puis 3, puis on revient à 3. Cela donnera la suite infinie 1, 2, 3, 3, 3...

      var        un, deux, trois : TListe;             begin         un.element := 1;         un.suivant := @deux;         deux.element := 2;         deux.suivant := @trois;         trois.element := 3;         trois.suivant := @trois; { autoréférencement }                EcrireListe(un);      end.      

Avec la procédure ÉcrireListe suivante :

      procedure EcrireListe(liste: TListe);      begin        write(liste.element);        { test si fin de liste: ça n'arrivera pas dans le cas en question }        if (liste.suivant = nil) then writeln('. Fini.') else        begin          write(', ');          EcrireListe(liste.suivant^);  { déréférencement: en effet, 'suivant' est un pointeur,                                          pas une TListe, tandis que 'suivant^' correspond bien                                          à la variable liste }        end;      end;      

ÉcrireListe est une procédure récursive, c'est-à-dire autoréférente.

Page générée en 0.161 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise