Vi presenterar TiML (Timed ML), ett ML-liknande funktionellt språk med tidskomplexitet kommentarer i typer. Den använder indexerade typer för att uttrycka storlek på datastrukturer och övre gränser på drifttid för funktioner; och förfining typer för att begränsa dessa index, uttrycka data-strukturinvarianter och pre / post-villkor. Indexerade typer är flexibla nog att TiML undviker en inbyggd uppfattning om "storlek", och programmeraren kan välja att indexera användardefinierade datatyper på något sätt som hjälper henne att analysera. TiML:s särskiljande egenskap stöder mycket automatiserad tidsbunden verifiering som är tillämplig på datastrukturer med icke-triviala invarianter. Programmeraren tillhandahåller typanmärkningar, och typkontrollen genererar verifieringsvillkor som skrivs ut av en SMT-lösare. Type and index inference stöds för att minska notation börda, och dessutom kan big-O komplexitet härledas från upprepningar som genereras under typkontroll av en recidiv lösare baserat på heuristiska mönster matchning (t.ex. Använda Master Theorem för att hantera uppdelning-och-konquer liknande upprepningar). Vi har utvärderat TiMLs användbarhet genom att implementera en bred uppsättning fallstudiemoduler, som visar att TiML, även om det saknar fullständig automatisering och teoretisk fullständighet, är mångsidig nog för att verifiera värsta fall och / eller avtecknade komplexiteter för algoritmer och datastrukturer som klassiska listoperationer, slå samman sort, Dijkstra s kortaste-pat algoritm, röda-svarta träd, Braun träd, funktionella köer, och dynamiska tabeller med gränser som mn log n. Inlärningskurvan och notation börda är rimliga, som vi argumenterar med empiriska resultat på våra fallstudier. Vi formaliserade TiMLs typ-ljud-bevis i Coq.
REF utvecklar ett typsystem för kostnadsanalys med tids komplexitetsanteckningar i typer.
TiML: a functional language for practical complexity analysis with invariants
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}