Idempotens er en egenskab, som en operation i matematik eller datalogi kan have. Kort sagt betyder det, at operationen kan anvendes flere gange uden at ændre resultatet efter første anvendelse — gentagne anvendelser er "neutrale".

Begrebet blev introduceret i 1800-tallet af den amerikanske matematiker Benjamin Peirce og er siden blevet centralt i mange grene af matematik og computer science.

Definitioner

Betydningen af idempotens afhænger lidt af, hvilken type operation vi taler om:

  • For en unær funktion f siger vi, at f er idempotent hvis det for ethvert x i dens domæne gælder: f(f(x)) = f(x). Et eksempel er den absolutte værdi, fordi abs(abs(x)) = abs(x).
  • For en binær operation * siger vi, at * er idempotent hvis x * x = x for alle x operationen kan tage.

Et enkelt element c i domænet kaldes et idempotent element for en funktion eller operation, hvis det opfylder den tilsvarende ligning (f.eks. f(f(c)) = f(c) eller c * c = c). Hvis alle elementer i domænet opfylder betingelsen, kaldes funktionen eller operationen idempotent.

Matematiske eksempler

  • Absolutværdafunktionen: abs(abs(x)) = abs(x).
  • Gulv- og loftfunktioner (floor/ceiling): floor(floor(x)) = floor(x) og tilsvarende for ceil.
  • Min og max: min(x,x)=x og max(x,x)=x, hvilket gør disse operationer idempotente. Det samme gælder for forenings- og snit-operationer på mængder (union og intersection).
  • Boolesk algebra: de logiske operationer AND og OR er idempotente, fordi A AND A = A og A OR A = A.
  • Matrixprojektioner: En lineær operator (matrix) P er idempotent hvis P^2 = P. Sådanne matricer svarer ofte til projektioner på et underrum.
  • Ringe og algebra: I en ring kaldes et element e idempotent hvis e^2 = e. I mange strukturer (f.eks. semilattices) er binære operationer typisk idempotente.
  • Multiplikation og addition (reelle tal): For reelle tal opfylder kun 0 og 1 x·x = x, så disse er idempotente elementer for multiplikation. For addition er kun 0 idempotent (fordi x+x=x giver x=0).

Idempotens i datalogi og it

Idempotens er vigtigt i design af systemer, API'er og distribuerede systemer, fordi det gør operationer robuste over for gentagne kald eller netværksfejl (retry):

  • HTTP-metoder: Ifølge HTTP-standarden er visse metoder defineret som idempotente — typisk GET, PUT, DELETE, HEAD og OPTIONS — mens POST normalt ikke er idempotent.
  • API-design: En operation der "sætter" en værdi til en bestemt tilstand (fx sætte en flag til true) er idempotent; en operation der "inkrementerer" en tæller er det normalt ikke.
  • Databaser og transaktioner: Idempotente opdateringer gør det lettere at implementere sikre retry-strategier uden at skabe duplikater eller inkonsistens.
  • Konfigurationsstyring og deployment: Mange værktøjer (fx system provisioning) er designet til at være idempotente, så samme instruktion kan køres flere gange uden at ændre resultatet efter første gennemførsel.

Egenskaber og betydning

  • Hvis f er idempotent, så er alle værdier i billedet f(X) faste punkter for f (dvs. f(y)=y for alle y i billedet).
  • Idempotente operationer kan kombineres i algebraiske strukturer (fx semilattices), hvor de giver et enkelt og stabilt opførselsmønster.
  • I praksis gør idempotens systemer mere fejltolerante, fordi gentagne anmodninger eller utilsigtede genkørsler ikke fører til uønskede bivirkninger.

Hvordan man genkender og designer idempotente operationer

  • Matematisk: Tjek om f(f(x)) = f(x) for alle relevante x, eller om x * x = x for den binære operation.
  • Praktisk (software): Overvej om operationen ændrer tilstanden afhængigt af tidligere anvendelser. Design fx opdateringer som "sæt til værdi" i stedet for "ændre relativt" for at opnå idempotens.
  • Ved integrationer: Gør operationer idempotente ved at bruge idempotensnøgler, kontrollere eksisterende tilstand før ændring eller gøre opkald transaktionelle.

Opsummering: Idempotens betyder, at gentagne anvendelser af en operation ikke ændrer resultatet efter første anvendelse. Det er et simpelt men kraftfuldt begreb med mange anvendelser — fra abstrakt algebra og matrixprojektioner til praktisk API-design og fejltolerante systemer.