TK Solver (originally TK!Solver) is a mathematical modeling and problem solving software system based on a declarative, rule-based language, commercialized by Universal Technical Systems, Inc. History Invented by Milos Konopasek in the late 1970s and initially developed in 1982 by Software Arts, the company behind VisiCalc, TK Solver was acquired by Universal Technical Systems in 1984 after Software Arts fell into financial difficulty and was sold to Lotus Software. Konopasek's goal in inventing the TK Solver concept was to create a problem solving environment in which a given mathematical model built to solve a specific problem could be used to solve related problems (with a redistribution of input and output variables) with minimal or no additional programming required: once a user enters an equation, TK Solver can evaluate that equation as is—without isolating unknown variables on one side of the equals sign. Software Arts also released a series of "Solverpacks" - "ready-made versions of some of the formulas most commonly used in specific areas of application." The New York Times described TK Solver as doing "for science and engineering what word processing did for corporate communictions [sic] and calc packages did for finance." Universal Technical Systems Lotus, which had acquired Software Arts, including TK Solver, in 1984 sold its ownership of the software to Universal Technical Systems less than two years later. Release 5 was still considered "one of the longest–standing mathematical equation solvers on the market today" in 2012. Core technology TK Solver's core technologies are a declarative programming language, algebraic equation solver, an iterative equation solver, and a structured, object-based interface, using a command structure. The interface comprises nine classes of objects that can be shared between and merged into other TK files: Rules: equations, formulas, function calls which may include logical conditions Variables: a listing of the variables that are used in the rules, along with values (numeric or non-numeric) that have been entered by the user or calculated by the software Units: all units conversion factors, in a single location, to allow automatic update of values when units are changed Lists: ranges of numeric and non-numeric values which can be associated with a variable or processed directly by procedure functions Tables: collections of lists displayed together Plots: line charts, scatterplots, bar charts, and pie charts Functions: rule-based, table look-up, and procedural programming components Formats: settings for displaying numeric and string values Comments: for explanation and documentation