E-graf

Inom datavetenskap är en e-graf en datastruktur som lagrar en ekvivalensrelation över termer av något språk.

Definition och verksamhet

Låt vara en uppsättning funktionssymboler, låt vara delmängden av som består av symboler för arity . Låt vara en räknebar uppsättning ogenomskinliga identifierare som kan jämföras för likhet, kallade e-klass-ID:n . Då är en e-nod en -är funktionssymbol tillsammans med e-klass-ID. En e-nod med -är funktionssymbol och e-klass-ID: betecknas . En e-klass är en uppsättning e-noder. En e-graf innehåller en union-find- struktur över e-klass-ID:n med standardoperationer , , och .

Ett e-klass-ID är kanoniskt om . En e-nod (med ) är kanonisk om varje är kanonisk ( i ).

En e-graf är kombinationen av:

  • union-find-strukturen ,
  • en hashcons (dvs en mappning) från kanoniska e-noder till e-klass-ID, och
  • en e-klasskarta som mappar e-klass-ID:n till e-klasser, så att mappar motsvarande ID:n till samma uppsättning e-noder:

Invarianter

Förutom ovanstående struktur överensstämmer en giltig e-graf med flera datastrukturinvarianter . Två e-noder är likvärdiga om de är i samma e-klass. Kongruensinvarianten graf måste säkerställa att ekvivalensen stängs under kongruens , där två e-noder , kongruenta när . Hashcons -invarianten anger att hashcons mappar kanoniska e-noder till deras e-klass-ID.

Operationer

E-grafer exponerar omslag runt a , , och displaystyle från det fackliga fyndet som bevarar e-grafens invarianter. Den sista operationen, e-matchning, beskrivs nedan.

E-matchning

Låt vara en uppsättning variabler och låt vara den minsta uppsättningen som inkluderar 0-aritetsfunktionssymbolerna (även kallade konstanter ), inkluderar variablerna och stängs under tillämpning av funktionssymbolerna. Med andra ord, är den minsta mängden så att , och när och , sedan . En term som innehåller variabler kallas ett mönster , en term utan variabler kallas mark .

En e-graf representerar en grundterm om en av dess e- klasser representerar . En e-klass representerar om någon e-nod gör det. En e-nod representerar en term om och varje e-klass representerar termen ( i ).

e-matchning är en operation som tar ett mönster och en e-graf , och ger alla par där är en substitutionsmappning av variablerna i till e-klass-ID och är ett e-klass-ID så att varje term representeras av . Det finns flera kända algoritmer för e-matchning.

Jämställdhetsmättnad

Jämlikhetsmättnad är en teknik för att bygga optimera kompilatorer med hjälp av e-grafer. Den fungerar genom att tillämpa en uppsättning omskrivningar med e-matchning tills e-grafen är mättad, en timeout nås, en e-grafstorleksgräns har nåtts, ett fast antal iterationer överskrids eller något annat stopptillstånd uppnås. Efter omskrivning extraheras en optimal term från e-grafen enligt någon kostnadsfunktion, vanligtvis relaterad till AST- storlek eller prestandaöverväganden.

Ansökningar

E-grafer används vid automatiserad satsbevisning . De är en avgörande del av moderna SMT-lösare som Z3 och CVC4 . De används också i Simplify theorem prover av ESC/Java .

Jämlikhetsmättnad används i specialiserade optimeringskompilatorer , t.ex. för djupinlärning och linjär algebra . Jämlikhetsmättnad har också använts för översättningsvalidering tillämpad på LLVM -verktygskedjan.

E-grafer har tillämpats på flera problem i programanalys , inklusive fuzzing, abstrakt tolkning och biblioteksinlärning.

externa länkar