Confusable names: l, 1, I, O and 0 in variable names
l1 and I1 are different inputs that look the same on screen, and rate and Rate differ only by case. The engine's name check flags such pairs, and the list below is its output for a set of deliberately bad names.
The artefact on this page is the engine's confusable-name report for a small list of inputs. It pairs l1 with I1 and with Il (lower-case L, capital I and the digit 1 look alike in most fonts), O0 with 0O (capital O and zero), is_member with ismember (a separator is easy to miss), and rate with Rate (letter case only). Each pair carries the reason. The app shows the same warnings in the glossary, where every input has a name and a description, so a slip is caught when the name is typed rather than when a test fails.
Names are matched by identity in the engine, never by spelling: renaming an input rewrites every reference and keeps its ID. That removes one class of error, a rename that misses a reference, but it cannot remove this one, because two inputs with look-alike names are two inputs, both valid, both in the truth table, and the rule that mentions the wrong one is a valid rule with a different function.
The cure is naming discipline: words rather than letters where the rule has a domain (banned, not b), a consistent separator, lower case throughout, and a description for every input in the glossary. The glossary page on glossary variables explains the descriptions, and the rule review checklist has a line for confusable names.
What the name check says
Names checked: l1, I1, Il, O0, 0O, rate, Rate, is_member, ismember, member, invited
| A | B | Reason |
|---|---|---|
| l1 | I1 | look alike |
| l1 | Il | look alike |
| I1 | Il | look alike |
| O0 | 0O | look alike |
| rate | Rate | differ only by letter case |
| is_member | ismember | look alike |
The common slip
Copying a rule with I and l from a document and typing one of them as the other. The parser accepts both, the model gains an extra input, and the truth table silently doubles. The variable list on the table, and the warning in the glossary, are the two places it shows.
Questions
Are names case-sensitive?
Yes: rate and Rate are two inputs. Operator words are case-insensitive (and, AND), which is a separate rule; the symbols page lists the reserved words.
Which characters are allowed in a name?
Letters, digits and underscores, starting with a letter or underscore; the operator words and the constants are reserved. The engine rejects anything else with a message that says so.
Related
Tools
- Logical equivalence checker: two expressions, exact verdict, counterexample
- Truth table generator: any Boolean expression, up to 12 variables, with intermediate columns
See also
- Variable and its glossary description: meaning and examples
- AB is one name, not A AND B: implicit multiplication
- A review checklist for decision rules (for analysts and reviewers)
- Logic symbols: meanings, LaTeX, Unicode and how to type them
- Writing business rules in plain English that translate to logic
Pitfalls
Generated from the Tangibool engine, semantics tangibool-semantics/1, engine 1.0.0, build . Every table, map, simplification and verdict on these pages was computed by the Tangibool engine when the site was built, and every claim was re-checked by the same exact checker the app uses. Limits are stated where they apply. © 2026 Foreranger LTD.