Idempotencija – tai savybė, kuria gali pasižymėti matematikos ar informatikos operacija. Paprastai tai reiškia, kad operaciją galima atlikti pakartotinai be tolesnio rezultato pasikeitimo: vienas vykdymas duoda tą patį rezultatą kaip ir keli vykdymai iš eilės.
Terminas idempotencija kilęs iš lotyniškų žodžių idem („tas pats“) ir potens („galingas“) ir XIX a. jį pristatė matematikas Benjaminas Peirce'as. Skirtingose srityse sąvoka vartojama kiek kitaip, todėl žemiau pateikiami aiškūs apibrėžimai, savybės ir pavyzdžiai.
Apibrėžimai
Unarinė operacija (funkcija). Sakome, kad f yra idempotentinė funkcija, jei bet kuriam x jos srityje galioja f(f(x)) = f(x). Kitaip tariant, pakartotinė funkcijos taikymo operacija neduoda pokyčio. Pavyzdžiui, absoliutinė vertė tenkina abs(abs(x)) = abs(x).
Unarinis idempotentinis elementas. Jei f yra funkcija, sakome, kad elementas c yra idempotentinis (t. y. f‑fiksuotas), jeigu f(f(c)) = f(c). Dažniausiai idempotentinė funkcija yra projekcija į tam tikrą vaizdą (im(f)), todėl visi jo vaizdo elementai yra f fiksuoti.
Dvejetainė operacija. Dvejetainę operaciją, pažymėtą *, vadiname idempotentine, jei bet kuriam galimam x galioja x * x = x. Elementą c, kuriam c * c = c, vadiname idempotentiniu šios operacijos elementu. Pavyzdys: skaičius 1 yra idempotentinis elementas daugybai, nes 1 · 1 = 1.
Pavyzdžiai matematikoje
- Boolean algebra: loginė operacija AND ir OR yra idempotentinės: a ∧ a = a ir a ∨ a = a.
- Žiedai ir algebrinės struktūros: žiede idempotentiniai elementai tenkina e^2 = e. Tokie elementai svarbūs žiedo dekompozicijose ir projekcijose.
- Matricų teorija: matrica A yra idempotentinė, jei A^2 = A. Tokios matricos atitinka projekcijų operatorius; jų spektras sudarytas tik iš 0 ir 1. Jei matrica dar ir simetrinė, tai ji yra ortogonali projekcija į tam tikrą potęvė.
- Lineari operatoriai: linijinis operatorius P erdvėje idempotentinis, kai P^2 = P. Tuomet P projekcionuoja erdvę į podalą im(P) palei ker(P).
Savybės
- Jei f yra idempotentinė funkcija, tada im(f) = {y | egzistuoja x: f(x)=y} sudaro jos fiksuotų taškų rinkinį, ir f yra tarsi projekcija į im(f).
- Idempotentiniai elementai ne visada komutuoja (išskyrus kai kurias struktūras, pvz., komutatyvias semigruppes). Komutatyvioje semigruppėje idempotentinių elementų aibė sudaro puslankį (semilattice).
- Matricoms idempotentinė ⇒ savieigiai reikšmės (eigenvalues) yra 0 arba 1; tr(A) = rang(A) (jei dirbama per lauką, kuriame tr reikšmė gerai apibrėžta).
Taikymas informatikoje
Informatikoje idempotencija reiškia, kad operaciją galima atlikti kelis kartus (pvz., dėl kelių užklausų ar bandymų), o galutinė būsena nesikeičia po pirmojo sėkmingo vykdymo. Tai labai svarbu sistemų patikimumui ir atstatymui.
- HTTP metodai: REST ir HTTP standartai nurodo, kad kai kurie metodai yra idempotentiniai — pvz., GET, PUT, DELETE (nors semantika gali skirtis), o POST dažniausiai nėra idempotentinė. Tai reiškia, kad klientas gali pakartotinai siųsti užklausą, jei pirmoji nepavyko, nes neturėtų kilti nenumatytų papildomų efektų.
- Duomenų bazės ir transakcijos: idempotentinės operacijos leidžia saugiai kartoti atnaujinimus (retry) be duomenų dubliavimo. Pavyzdys — idempotentinė upsert operacija arba operacija, kuri naudoja unikalias trigerių funkcijas pagal identifikatorių.
- Funkcinis programavimas: funkcija, kuriai f(f(x)) = f(x), yra projekcija į tam tikrą reikšmių aibę — tai leidžia rašyti saugesnį ir lengviau testuojamą kodą. Pavyzdžiai: rūšiavimas sąrašo elementų pagal tam tikrą kriterijų (jei algoritmas deterministinis ir stabilus, sort(sort(list)) = sort(list)), arba normalizavimo funkcijos.
- API ir idempotentiniai užklausų identifikatoriai: ilgą operaciją vykdantys servisai dažnai priima klientų pateikiamą unikalias užklausos ID, kad pakartotinai gautas prašymas su tuo pačiu ID nebūtų įvykdytas dukart — tai padaro API idempotentinį iš vartotojo perspektyvos.
Praktinės pastabos
- Idempotencija padeda kurti atkuriamas ir tolerantiškas trikdžiams sistemas: jeigu tinklo klaida privertė pakartoti užklausą, idempotentinė operacija apsaugo nuo netyčinių pokyčių.
- Idempotencija ne visada reiškia „nekeičiamumą“ — operacija gali būti idempotentinė tik tam tikru atžvilgiu (pvz., funkcija grąžina identišką išvestį, bet generuoja log įrašą). Todėl projektuodami sistemas aiškiai apibrėžkite, kurių efektų idempotencija taikoma.
- Matematiškai idempotentiniai elementai leidžia skaidyti struktūras į paprastesnes dalis (pvz., žiedų dekompozicijos su centriniais idempotentais arba projekcijos vektorinėse erdvėse).
Apibendrinant: idempotencija yra plačiai taikoma ir matematikos, ir informatikos sąvoka. Ji padeda suprasti, kada pakartotiniai veiksmai nekeičia rezultato, leidžia kuriems patikimas programavimas ir atlieka svarbų vaidmenį abstrakčiose algebrinėse struktūrose bei praktiniuose IT sprendimuose.