A FLIPP diagram is a format for representing logic designed by David J. Cox. Each diagram represents an acyclic and-or graph in a readable and conveniently printable rectangular block. Each block may contain one or more nested blocks. The simplest block is a box that contains one statement in any declarative language: a natural language, a logical formula, a mathematical equation, or graphics in some notation other than FLIPP.
As an example, the FLIPP diagram at right contains eleven boxes, each of which asserts a proposition labeled A, ..., K. Boxes stacked vertically are connected by implicit ∧ (and) symbols; boxes grouped horizontally are connected by implicit &or (or) symbols. This diagram represents a disjunction of four options, each of which corresponds to one path from the top of the diagram to the bottom. (The path must enter each box at the top and exit at the bottom; no path is allowed to cross a side of any box.) The four paths can be translated to the following formula in propositional logic:
(A ∧ B ∧ D ∧ G ∧ K) ∨ (A ∧ B ∧ E ∧ H ∧ K) ∨ (A ∧ C ∧ F ∧ I ∧ K) ∨ (A ∧ C ∧ F ∧ J ∧ K).A logically equivalent formula can be stated in one line:
A ∧ ((B ∧ ((D ∧ G) ∨ (E ∧ H))) ∨ (C ∧ F ∧ (I ∨ J))) ∧ K.
The boxes at the bottom of a FLIPP diagram, which represent endpoints of the and-or graph, may contain either declarative or procedural statements. If all the boxes contain declarative statements, the entire FLIPP diagram can be translated to a single statement in logic. If one or more of the boxes at the bottom contain procedural statements, the diagram can be translated to a program, in which the path leading to each procedural box represents the condition for executing the procedure in that box.
For an example of a FLIPP diagram with the propositions stated in English, see a case study that represents an excerpt from US tax law. The three boxes at the bottom of that example are stated as propositions, but they could also state procedures used for calculating taxes.
The boxes of a FLIPP diagram are organized in four kinds of blocks: a box that contains a statement in a language other than FLIPP; a vertical stack of blocks connected by implicit ∧ (and) symbols; a horizontal group of boxes connected by implicit &or (or) symbols; and a menu represented by a box containing a question placed above a horizontal group of menu options.
A box is a block with no nested FLIPP blocks. It asserts a proposition A, which may be expressed in any linear or graphic declarative language, other than FLIPP. A block at the bottom of a FLIPP diagram may contain a procedural statement instead of a declarative statement; any FLIPP diagram that contains one or more procedural statements at the bottom must be translated to a program rather than a proposition.
A conjunction is a block represented as a vertical stack of two or more blocks, which may be boxes, menus, or disjunctions. Each block asserts some proposition A, B, ....; the conjunction asserts the proposition (A ∧ B ∧ ...).
A disjunction is a block represented by a horizontal group of two or more blocks, which may be boxes, conjunctions, or menus. Each block asserts some proposition A, B, ....; the disjunction asserts the proposition (A ∨ B ∨ ...).
A menu is represented by a stack consisting of a box and a disjunction. The box contains a question of the form (P ∧ which Q?), where P is an optional assertion and Q is an incompletely determined statement. Each option of the disjunction completes Q to assert some proposition A, B, ...; the menu as a whole asserts the proposition (P ∧ (A ∨ B ∨ ...)).
Not all FLIPP diagrams have a unique decomposition into the four basic blocks: boxes, conjunctions, disjunctions, and menus. In particular, the tax example cited above does not have that property. However, weaker constraints are sufficient to ensure that every FLIPP diagram has a unique translation to an acyclic and-or graph. Such a graph can then be expanded to a tree that represents a proposition in disjunctive normal form. That property can be enforced by the following constraints: