Xerox PARC research center assigned the keyboard shortcut Ctrl-Z to the undo command, which became a crucial feature of text editors and word processors in the personal computer era. In 1980, Larry Tesler of Xerox PARC began working at Apple Computer. There, he and Bill Atkinson advocated for the presence of an undo command as a standard fixture on the Apple Lisa. Atkinson was able to convince the individual developers of the Lisa's application software to include a single level of undo and redo, but was unsuccessful in lobbying for multiple levels. When Apple introduced the Lisa's successor, the Macintosh, it stipulated that all standard applications should include an “Undo” as the first command in the “Edit” menu, which has remained the standard on macOS and Windows to this day. Multi-level undo commands were introduced in the 1980s, allowing the users to take back a series of actions, not just the most recent one. EMACS and other timeshared screen editors had it before personal computer software. CygnusEd was the first Amiga text editor with an unlimited undo/redo feature. AtariWriter, a word-processing application introduced in 1982, featured undo. NewWord, another word-processing program released by NewStar in 1984, had an unerase command. IBM's VisiWord also had an undelete command. Undo and redo models Undo models can be categorized as linear or non-linear. The non-linear undo model can be sub-classified in script model, us&r model, triadic model, and selective undo. Some common properties of models are: stable execution property: A state is represented as an ordered list of commands. This means that a command "is always undone in the state that was reached after the original execution." weakened stable execution: This means that if undo is executed all commands which depend on the undone command are undone dependent on the command. stable result property: This property has the similar meaning like the stable execution property except for the list. The ordered list of commands includes that they were executed instead of only the commands. commutative: That means that the reached state after undo and redo two different commands is the same when they are executed in the converse order. minimalistic undo property: It describes that "undo operation of command C undoes only command C and all commands younger than C which are dependent on C." Linear undo Linear undo is implemented with a stack (last in first out (LIFO) data structure) that stores