Skip to main content

T-norms and T-conorms: Fuzzy AND and OR

📍 Where we are: Part I · Fuzzy and Many-Valued Logic — Chapter 2. Many-Valued Logic broke the true/false dichotomy with a third value and ended on an open question: if truth is allowed to be any number in [0,1][0,1], what happens to the connectives? This chapter answers for AND and OR.

The previous chapter could still write its logic down as tables: three values, nine rows, every connective a finite lookup. The moment truth ranges over the whole interval [0,1][0,1] (all real numbers from 0 to 1 inclusive), that option dies, because a table over a continuum would need uncountably many rows. Conjunction must become a function: some T:[0,1]2[0,1]T : [0,1]^2 \to [0,1], a rule that takes a pair of truth degrees, one for each conjunct, and returns the truth degree of the conjunction. The notation decodes as follows: [0,1]2[0,1]^2 is the set of ordered pairs (x,y)(x, y) with both coordinates in the unit interval, the arrow \to says TT maps each such pair to a value, and that value again lies in [0,1][0,1]. Which functions deserve the name "and"? Not all of them. This chapter pins down the exact axioms a graded conjunction must satisfy, meets the three functions that dominate all of fuzzy logic, and shows that each one drags behind it a matching OR and a matching implication, so that choosing your AND fixes an entire connective family. Every law is then checked, exactly and exhaustively, by the companion module tnorms.py, and the whole apparatus lands on the running example: Volume 2's confidence-annotated citation chain, recomposed three ways.

The simple version

Imagine you are booking a hotel that must be clean and quiet. Reviews give it 0.9 for clean and 0.8 for quiet. How confident should you be in "clean AND quiet"? Ask three sensible friends. The cautious one says a conjunction is only as good as its weaker half: 0.8. The probabilist treats the two as independent coin flips and multiplies: 0.72. The strict accountant adds up your doubts (0.1 of doubt about cleanliness plus 0.2 about quiet) and subtracts the total from 1: 0.7. All three answers are defensible, all three obey the same common-sense ground rules (the order of the two ratings cannot matter, a perfect 1.0 rating should change nothing, better ratings should never lower the verdict), and no rule of logic picks a winner. This chapter is about those ground rules, those three friends, and what each friend's temperament does to a chain of conclusions.

What this chapter covers

  • The four t-norm axioms: commutativity, associativity, monotonicity, and the unit 1, each decoded with the one-line reason a graded conjunction cannot do without it, plus the corner check that every t-norm restricts to classical AND on the values 0 and 1.
  • The three fundamental t-norms and their characters: the Gödel minimum (idempotent), the product (strict: zero only at zero), and the Łukasiewicz norm (nilpotent: two half-truths make a falsehood), with every axiom verified on a dense grid at deviation exactly 0.0, and why exact equality is a legitimate demand there.
  • The universal ordering, derived then checked: a pointwise proof that TŁTPTGT_{\text{Ł}} \le T_P \le T_G (Łukasiewicz below product below the Gödel minimum), a four-line proof that min is the largest t-norm there is, and the argument that min is the only idempotent one.
  • De Morgan duals: how the strong negation 1x1-x turns each AND into an OR, yielding max, the probabilistic sum, and the bounded sum, with the doubt-of-a-conjunction reading that makes the three characters intuitive.
  • Residuation, the chapter's theorem: each t-norm's residual implication derived from a supremum, the adjunction T(x,z)y    zI(x,y)T(x,z) \le y \iff z \le I(x,y) (the double arrow reads "if and only if") proved in both directions and checked on all 274,625 grid triples, and why that inequality is exactly the soundness of fuzzy modus ponens.
  • The running example: Volume 2's annotated citation chain (confidences 0.9, 0.8, 0.5, read from annotated.py, never retyped) composed as a two-link and then a three-link conjunction under all three t-norms: same facts, three defensible confidences, and a modeling question you now know how to ask.
  • The menu ahead: which later systems pick which t-norm, and why Part II will reject the whole truth-functional premise.

What must any fuzzy AND satisfy?

Start from what conjunction does in classical logic and refuse to lose any of it. Write xx and yy for the truth degrees of the two conjuncts and T(x,y)T(x, y) for the degree of their conjunction. Four requirements survive the passage from two truth values to a continuum, and together they define a t-norm (short for triangular norm) [1]:

  1. Commutativity: T(x,y)=T(y,x)T(x, y) = T(y, x). The order in which you list conjuncts is meaningless; "clean and quiet" is "quiet and clean."
  2. Associativity: T(x,T(y,z))=T(T(x,y),z)T(x, T(y, z)) = T(T(x, y), z). Chains must be well-defined: a three-way conjunction should have one value, not one value per bracketing, so we may write xyzx \otimes y \otimes z without parentheses. (The symbol \otimes, a circled times, is the generic infix sign for a t-norm, borrowed from the semiring notation of Volume 2.)
  3. Monotonicity: if xxx \le x' then T(x,y)T(x,y)T(x, y) \le T(x', y). More truth in, more truth out; raising your confidence in one conjunct can never lower your confidence in the conjunction.
  4. Unit element 1: T(x,1)=xT(x, 1) = x. Conjoining with something certainly true changes nothing.

Each axiom is doing real work, and one useful fact is already a theorem of the four rather than a fifth assumption: 0 annihilates. The derivation is a single chain and uses three of the four axioms. Since x1x \le 1, monotonicity applied in the first argument gives T(x,0)T(1,0)T(x, 0) \le T(1, 0); commutativity swaps the arguments, T(1,0)=T(0,1)T(1, 0) = T(0, 1), and the unit axiom evaluates the result, T(0,1)=0T(0, 1) = 0. A t-norm's outputs live in [0,1][0,1], so T(x,0)0T(x, 0) \ge 0 as well, and the two inequalities squeeze: T(x,0)=0T(x, 0) = 0 exactly. Conjoining with a falsehood destroys everything, and we never had to assume it.

The corners now check out completely. Restrict any t-norm to the two classical values: T(1,1)=1T(1,1) = 1 by the unit axiom, and T(0,0)=T(0,1)=T(1,0)=0T(0,0) = T(0,1) = T(1,0) = 0 by the annihilator just derived. Every t-norm, whatever it does in the interior, restricts exactly to Boolean AND on the corners. The name "triangular norm," incidentally, predates fuzzy logic entirely: the concept was invented for probabilistic metric spaces, where distances are probability distributions and the t-norm plays the role the triangle inequality plays for ordinary distances [2]. By the time fuzzy logic arrived, the probabilistic-metric-space literature had refined that original notion into the four axioms above, so fuzzy logic inherited a ready-made axiom system.

The three fundamental t-norms

Infinitely many functions satisfy the four axioms, but three of them carry essentially all of fuzzy logic, and each has a distinct character. The companion module defines them in nine lines (tnorms.py lines 66–78):

def t_min(x, y):
# T_G(x, y) = min(x, y) (Gödel)
return np.minimum(x, y)


def t_prod(x, y):
# T_P(x, y) = x · y (product / Goguen)
return x * y


def t_luk(x, y):
# T_Ł(x, y) = max(0, x + y - 1) (Łukasiewicz)
return np.maximum(0.0, x + y - 1.0)

The Gödel t-norm TG(x,y)=min(x,y)T_G(x, y) = \min(x, y) is idempotent: TG(x,x)=min(x,x)=xT_G(x, x) = \min(x, x) = x, so conjoining a statement with itself changes nothing. In a chain, min remembers only the weakest link and destroys every other number: min(0.9,0.8)=0.8\min(0.9, 0.8) = 0.8, and the 0.9 leaves no trace on the result. The product t-norm TP(x,y)=xyT_P(x, y) = x \cdot y is strict: it is continuous, strictly increasing in each argument on the open square, and returns zero only when an argument is zero. It reads truth degrees as probabilities of independent events and multiplies the evidence, so every conjunct leaves a trace. The Łukasiewicz t-norm TŁ(x,y)=max(0,x+y1)T_{\text{Ł}}(x, y) = \max(0, x + y - 1) is nilpotent: it is continuous, it is Archimedean (meaning T(x,x)<xT(x, x) \lt x for every xx strictly between 0 and 1, so no interior point is idempotent), and it can output exactly 0 from two strictly positive inputs; the standard classification requires all three properties together. Two half-truths make a falsehood, TŁ(0.5,0.5)=max(0,0.5+0.51)=max(0,0)=0T_{\text{Ł}}(0.5, 0.5) = \max(0, 0.5 + 0.5 - 1) = \max(0, 0) = 0, which is not a bug but the strictest defensible accounting: rewrite x+y1x + y - 1 as x(1y)x - (1 - y) and the formula says "start from xx and pay the full doubt of the other conjunct."

The module does not take the axioms on trust. It evaluates each one across a dense grid and demands that the worst violation be exactly zero, not merely small. The grid is x=k/64x = k/64 for k=0,1,,64k = 0, 1, \ldots, 64, that is, 65 evenly spaced points (tnorms.py lines 57–61), and the choice of 64 is deliberate: each grid value is a dyadic rational (an integer over a power of two) needing at most 7 bits of binary mantissa (the mantissa is the string of binary digits a float stores), so a product of three grid values needs at most 21 bits, and IEEE (Institute of Electrical and Electronics Engineers) double-precision floats carry 53 mantissa bits. Every product, sum, difference, min, and max of grid values is therefore an exact binary float; no rounding ever occurs, and testing for equality is legitimate. That matters because these three operations are exact closed-form arithmetic, not approximations of anything: the check certifies that the committed code and the mathematics are the same object, on all 652=4,22565^2 = 4{,}225 pairs for commutativity, all 653=274,62565^3 = 274{,}625 triples for associativity, adjacent-row differences across the full 65×6565 \times 65 table for monotonicity, and the 65 grid points for the unit and the annihilator, each of which has one free variable, so 65 points exhaust it (axiom_deviations, tnorms.py lines 86–110). The committed run reports:

[1] the t-norm axioms, verified numerically (max |violation|;
the grid is dyadic, so every value below is EXACTLY 0.0)
t-norm commut. assoc. monot. T(x,1)=x T(x,0)=0
Godel(min) 0.0 0.0 0.0 0.0 0.0
product 0.0 0.0 0.0 0.0 0.0
Lukasiewicz 0.0 0.0 0.0 0.0 0.0

Fifteen zeros, each an exact equality over its whole check domain, from the 65 points of the unit and annihilator columns to the 274,625 triples of the associativity column. A grid is not a continuum, so this does not replace the pencil proofs; it guards something the pencil cannot, namely that the implementations later chapters will differentiate through are the functions the theorems are about.

The universal ordering, derived and then checked

The three t-norms are not just different; they are ordered, everywhere, and the ordering is the mathematical content behind the three friends' temperaments. The claim is that for every x,y[0,1]x, y \in [0,1] (the symbol \in reads "is a member of": both degrees drawn from the unit interval),

TŁ(x,y)    TP(x,y)    TG(x,y),T_{\text{Ł}}(x, y) \;\le\; T_P(x, y) \;\le\; T_G(x, y),

and each inequality has a two-line proof. For the right inequality, xymin(x,y)x y \le \min(x, y): since y1y \le 1 and x0x \ge 0, multiplying xx by yy cannot enlarge it, xyx1=xx y \le x \cdot 1 = x; symmetrically, since x1x \le 1 and y0y \ge 0, xyyx y \le y. A number that is at most xx and at most yy is at most the smaller of the two, so xymin(x,y)x y \le \min(x, y). For the left inequality, max(0,x+y1)xy\max(0, x + y - 1) \le x y, split on which branch the max takes. If x+y10x + y - 1 \le 0 the max is 0, and xy0x y \ge 0 always, so the inequality holds. If x+y1>0x + y - 1 \gt 0, compare the two candidates directly by expanding a product of two nonnegative factors: 1x01 - x \ge 0 and 1y01 - y \ge 0 on the unit interval, so

(1x)(1y)  =  1xy+xy    0,(1 - x)(1 - y) \;=\; 1 - x - y + x y \;\ge\; 0,

and adding x+y1x + y - 1 to both sides rearranges this to xyx+y1x y \ge x + y - 1. Both branches agree, so TŁTPT_{\text{Ł}} \le T_P pointwise, and the sandwich is complete.

The upper end of the sandwich is not an accident of these three. Min is the largest t-norm there is, and the proof uses nothing but the axioms. Take any t-norm TT and any x,yx, y. Since y1y \le 1, monotonicity (in the second argument, which follows from monotonicity in the first plus commutativity) gives T(x,y)T(x,1)T(x, y) \le T(x, 1), and the unit axiom evaluates the bound: T(x,y)xT(x, y) \le x. Swapping the roles by commutativity, T(x,y)=T(y,x)T(y,1)=yT(x, y) = T(y, x) \le T(y, 1) = y. So T(x,y)min(x,y)T(x, y) \le \min(x, y) for every t-norm TT; and since min itself satisfies the axioms, it is the maximum of the whole family [1]. The same squeeze proves that min is the only idempotent t-norm: if T(x,x)=xT(x, x) = x for all xx, take any xyx \le y; monotonicity gives T(x,y)T(x,x)=xT(x, y) \ge T(x, x) = x, the universal bound gives T(x,y)min(x,y)=xT(x, y) \le \min(x, y) = x, and the two squeeze T(x,y)=x=min(x,y)T(x, y) = x = \min(x, y) (the remaining case yxy \le x follows by commutativity, T(x,y)=T(y,x)T(x, y) = T(y, x)). For the other two the idempotence equation has only the corner solutions: x2=xx^2 = x rearranges to x(x1)=0x(x - 1) = 0, so x{0,1}x \in \lbrace 0, 1 \rbrace; and max(0,2x1)=x\max(0, 2x - 1) = x forces x=0x = 0 on the branch x<12x \lt \tfrac12 (where the equation reads 0=x0 = x) and x=1x = 1 on the branch x12x \ge \tfrac12 (where 2x1=x2x - 1 = x gives x=1x = 1).

The committed run confirms both facts on the grid, with the strictness counts showing the three t-norms are genuinely distinct functions, not just reorderings (tnorms.py lines 218–223 and 247–252):

[2] the fundamental ordering T_Ł ≤ T_P ≤ T_G on all 65² cells
T_Ł ≤ T_P everywhere, strict on 3969/4225 cells (equal on the boundary max(0,x+y-1) = xy)
T_P ≤ T_G everywhere, strict on 3969/4225 cells (equal where the other factor is 1, or one is 0)
min is the LARGEST t-norm; T_Ł is the smallest of these three
(the drastic t-norm lies lower still).
[5] idempotence T(x,x) = x — grid points where it holds:
Godel(min) 65/65 ALL points (min is the only idempotent t-norm)
product 2/65 only the fixed points {0, 1}
Lukasiewicz 2/65 only the fixed points {0, 1}

Read the counts against the algebra: the inequalities are strict on 3,969 of the 4,225 cells and collapse to equality exactly where the proofs said they would (where a factor is 1, where an input is 0, on the boundary curve xy=x+y1x y = x + y - 1), and idempotence holds at all 65 grid points for min but at exactly the two corner solutions for the others. The printout's parenthetical is a scope guard: Łukasiewicz is the smallest of these three, not of all t-norms; the drastic t-norm, which returns min(x,y)\min(x, y) when one argument is 1 and returns 0 everywhere else, is a lawful t-norm lying below it (it sends the pair (0.9,0.9)(0.9, 0.9) to 0 where TŁT_{\text{Ł}} gives 0.8). The drastic t-norm shares Łukasiewicz's ability to send strictly positive pairs to 0, but it is discontinuous, so it does not count as nilpotent.

Every AND owes an OR: the De Morgan duals

Classical logic never defines OR from scratch; De Morgan's law manufactures it from AND and NOT, ab=¬(¬a¬b)a \vee b = \neg(\neg a \wedge \neg b). The same factory works on degrees. Fix the strong negation n(x)=1xn(x) = 1 - x (an order-reversing involution: applying it twice returns xx, and larger truth becomes smaller falsity), and define the t-conorm dual to a t-norm TT as

S(x,y)  =  1T(1x,  1y),S(x, y) \;=\; 1 - T(1 - x,\; 1 - y),

which is exactly what dual_conorm computes (tnorms.py lines 115–120). A t-conorm satisfies the mirror axioms: commutative, associative, monotone, with unit 0 (S(x,0)=xS(x, 0) = x: disjoining with a falsehood changes nothing). Work each of the three out, showing the algebra. For min, use the fact that subtracting from 1 reverses order, so the smaller of 1x1-x and 1y1-y corresponds to the larger of xx and yy: 1min(1x,1y)=max(x,y)1 - \min(1-x, 1-y) = \max(x, y). For product, expand:

1(1x)(1y)  =  1(1xy+xy)  =  x+yxy,1 - (1-x)(1-y) \;=\; 1 - (1 - x - y + x y) \;=\; x + y - x y,

the probabilistic sum, the inclusion–exclusion formula for the union of two independent events. For Łukasiewicz, substitute and simplify the inner expression, (1x)+(1y)1=1xy(1-x) + (1-y) - 1 = 1 - x - y:

1max(0,1xy)  =  min(10,  1(1xy))  =  min(1,x+y),1 - \max(0,\, 1 - x - y) \;=\; \min(1 - 0,\; 1 - (1 - x - y)) \;=\; \min(1,\, x + y),

the bounded sum (the middle step uses the identity that 1 minus a max is the min of the 1-minus values). The committed run checks each closed form against the factory output with, again, deviation exactly zero (tnorms.py lines 227–231):

[3] De Morgan duals: S(x,y) = 1 - T(1-x, 1-y), max |dev| from
the closed forms (exact):
Godel(min) -> max dev = 0.0
product -> prob-sum dev = 0.0
Lukasiewicz -> bounded-sum dev = 0.0
familyt-norm T(x,y)T(x,y)dual t-conorm S(x,y)S(x,y)character in one line
Gödelmin(x,y)\min(x, y)max(x,y)\max(x, y)idempotent: only the extreme conjunct/disjunct counts
product (Goguen)xyx\,yx+yxyx + y - x ystrict: every input leaves a trace; independent-evidence reading
Łukasiewiczmax(0,x+y1)\max(0,\, x + y - 1)min(1,x+y)\min(1,\, x + y)nilpotent: degrees add and saturate; two half-truths reach the floor

The duality also explains the three characters in one stroke. Define the doubt of a statement as d=1xd = 1 - x. Substituting into the De Morgan identity and negating both sides gives 1T(x,y)=S(1x,1y)1 - T(x, y) = S(1 - x, 1 - y): the doubt of a conjunction is the t-conorm of the doubts. Under min, doubt combines by max, so only your single worst doubt matters. Under product, doubts combine by probabilistic sum, each one contributing but with diminishing overlap. Under Łukasiewicz, doubts literally add until they saturate at 1, the accountant charging every deficiency at face value. The three temperaments of the hotel analogy are three doubt-accounting policies.

A three-column reference card for the three fundamental t-norms on the unit interval, one column per family. The left column, tinted green, is the Gödel family: the t-norm min of x and y with the character label idempotent, its De Morgan dual t-conorm max of x and y, and its residual implication, which returns 1 when x is at most y and otherwise returns y. The middle column, tinted cyan, is the product family: the t-norm x times y with the character label strict, its dual the probabilistic sum x plus y minus xy, and the Goguen residuum, which returns 1 when x is at most y and otherwise y divided by x. The right column, tinted rose, is the Łukasiewicz family: the t-norm max of 0 and x plus y minus 1 with the character label nilpotent, its dual the bounded sum min of 1 and x plus y, and its residuum min of 1 and 1 minus x plus y. A horizontal band beneath the columns states the universal pointwise ordering, with the Łukasiewicz t-norm at most the product and the product at most the Gödel minimum, annotated with the note that min is the largest t-norm of all. Along the bottom, the running example&#39;s citation chain from paper p3 through p2 to p1, with edge confidences 0.9, 0.8, and 0.5, is composed under each family: the two-link chain scores 0.8 under min, 0.72 under product, and 0.7 under Łukasiewicz, and the three-link conjunction scores 0.5, 0.36, and 0.2, each triple drawn as three diverging bars whose spread widens from 0.1 to 0.3. One AND, three defensible answers: each fundamental t-norm with its dual t-conorm and residual implication, the universal ordering between them, and Volume 2's citation chain composed under all three. Original diagram by the authors, created with AI assistance.

Residuation: the implication each conjunction owes

The chapter's theorem is next, and it is the bridge from fuzzy AND to fuzzy IF–THEN. In classical logic, modus ponens is sound because a(ab)a \wedge (a \to b) entails bb (here the arrow \to is the classical implication connective, read "if aa then bb", not the function arrow of the chapter's opening). For a graded logic we need an implication I(x,y)I(x, y) (the degree to which "xx implies yy" holds) that plays the same role with respect to a chosen t-norm, and there is a canonical construction: the residuum

IT(x,y)  =  sup{z[0,1]  :  T(x,z)y}.I_T(x, y) \;=\; \sup\,\lbrace\, z \in [0,1] \;:\; T(x, z) \le y \,\rbrace .

Decode it before using it. The symbol sup\sup is the supremum, the least upper bound of a set of numbers; the set in braces collects every degree zz that, conjoined with the premise degree xx, stays within the conclusion degree yy. The residuum is therefore the most implication you can claim without ever overshooting the conclusion: the largest license zz such that "premise AND license" never exceeds yy. This construction is the heart of the residuated-lattice view of fuzzy logic [3], and it applies to every left-continuous t-norm (TT is left-continuous when its value at a point equals the limit of its values as one argument climbs up to that point from below, the other argument held fixed; every continuous t-norm qualifies), the generality in which the framework was completed [4].

Derive the three closed forms, case by case. Gödel. If xyx \le y: for every zz, min(x,z)xy\min(x, z) \le x \le y, so the defining set is all of [0,1][0,1] and the sup is 1. If x>yx \gt y: a zyz \le y qualifies, because min(x,z)zy\min(x, z) \le z \le y; a z>yz \gt y does not, because then both x>yx \gt y and z>yz \gt y, so min(x,z)>y\min(x, z) \gt y. The set is exactly [0,y][0, y] and the sup is yy. Hence IG(x,y)=1I_G(x, y) = 1 if xyx \le y, else yy. Goguen (the product's residuum). If x=0x = 0: 0z=0y0 \cdot z = 0 \le y always, sup is 1. If x>0x \gt 0: xzyx z \le y holds exactly when zy/xz \le y / x (dividing both sides by the positive number xx preserves the inequality), so intersecting with [0,1][0,1] gives IP(x,y)=min(1,y/x)I_P(x, y) = \min(1,\, y/x); when xyx \le y the ratio is at least 1 and the answer is 1. Łukasiewicz. The condition max(0,x+z1)y\max(0, x + z - 1) \le y holds exactly when x+z1yx + z - 1 \le y, because the other branch of the max, 0, is at most yy automatically (y0y \ge 0). Solving for zz: z1x+yz \le 1 - x + y, so IŁ(x,y)=min(1,1x+y)I_{\text{Ł}}(x, y) = \min(1,\, 1 - x + y). This last formula should look familiar: it is precisely the Łukasiewicz implication of the previous chapter's three-valued logic, now extended to the whole interval, and the companion asserts the connection numerically, IŁ(0.5,0.5)=1I_{\text{Ł}}(0.5, 0.5) = 1 (tnorms.py line 243). The code carries all three closed forms (tnorms.py lines 145–161):

def i_godel(x, y):
# I_G(x, y) = 1 if x ≤ y else y (Gödel implication)
return np.where(x <= y, 1.0, y)


def i_goguen(x, y):
# I_P(x, y) = 1 if x ≤ y else y / x (Goguen implication)
x_b, y_b = np.broadcast_arrays(np.asarray(x, float), np.asarray(y, float))
out = np.ones_like(x_b)
mask = x_b > y_b # x > y ≥ 0 there, so x > 0: safe divide
np.divide(y_b, x_b, out=out, where=mask)
return out


def i_luk(x, y):
# I_Ł(x, y) = min(1, 1 - x + y) (Łukasiewicz; Ł3 arrow)
return np.minimum(1.0, 1.0 - x + y)

What makes the residuum the right implication, rather than one choice among many, is the adjunction (also called the residuation law): for all x,y,zx, y, z in [0,1][0,1],

T(x,z)yzIT(x,y).T(x, z) \le y \quad\Longleftrightarrow\quad z \le I_T(x, y).

The double arrow \Longleftrightarrow reads "if and only if": whichever side holds, the other must hold too, so the law is proved by establishing both directions separately (the filled square ∎ that ends the argument is the standard end-of-proof mark). Left to right. Suppose T(x,z)yT(x, z) \le y. Then zz is a member of the set whose supremum defines IT(x,y)I_T(x, y), and a supremum is an upper bound of its set, so zIT(x,y)z \le I_T(x, y). Right to left. Suppose zIT(x,y)z \le I_T(x, y). Monotonicity of TT in its second argument gives T(x,z)T(x,IT(x,y))T(x, z) \le T(x, I_T(x, y)), so it suffices to show T(x,IT(x,y))yT(x, I_T(x, y)) \le y. Here left-continuity earns its keep: for a left-continuous TT, the t-norm commutes with suprema in each argument. To see why, recall the definition: a supremum can be approached from below through members of its set, monotonicity makes the corresponding TT-values climb with it, and left-continuity says the limit of those values is exactly TT's value at the supremum, so TT applied to the supremum equals the supremum of the applied values. Hence

T(x,  IT(x,y))  =  T(x,  sup{z:T(x,z)y})  =  sup{T(x,z)  :  T(x,z)y}    y,T\big(x,\; I_T(x, y)\big) \;=\; T\Big(x,\; \sup\lbrace z : T(x,z) \le y\rbrace\Big) \;=\; \sup\big\lbrace\, T(x, z) \;:\; T(x, z) \le y \,\big\rbrace \;\le\; y,

because every element of the last set is at most yy by its own membership condition, and a supremum of numbers at most yy is at most yy. All three of our t-norms are continuous, hence left-continuous, so the adjunction holds for all three pairs. ∎

The inequality T(x,IT(x,y))yT(x, I_T(x, y)) \le y that fell out of the proof is fuzzy modus ponens' soundness certificate, and deserves reading aloud: if the premise holds to degree xx and the implication to degree IT(x,y)I_T(x, y), then conjoining them (with the same t-norm) yields at most yy; graded inference can never claim more for the conclusion than the implication licenses [3]. The companion checks the adjunction exhaustively, as a biconditional between two Boolean arrays over every grid triple (tnorms.py lines 168–179):

def adjunction_holds(t, i) -> bool:
"""The adjunction (residuation) law T(x, z) ≤ y ⇔ z ≤ I(x, y),
checked EXHAUSTIVELY over all 65³ grid triples (x, z, y). On this dyadic
grid the check is exact even for Goguen: y/x can round, but the nearest
grid point is ≥ 1/4096 away from any non-grid rational a/b it could
round to, vastly more than one float ulp, so no comparison flips."""
x = GRID[:, None, None] # (65, 1, 1)
z = GRID[None, :, None] # (1, 65, 1)
y = GRID[None, None, :] # (1, 1, 65)
lhs = t(x, z) <= y # (65, 65, 65) boolean
rhs = z <= i(x, y) # (65, 1, 65) → broadcasts to match
return bool(np.array_equal(lhs, np.broadcast_to(rhs, lhs.shape)))

One term in the docstring deserves a decode: a ulp (unit in the last place) is the gap between one double-precision float and the next representable one, roughly 101610^{-16} for numbers of this size, so the docstring's 1/40961/4096 margin dwarfs any rounding the division y/xy/x can introduce and no comparison can flip.

[4] residua and the adjunction T(x,z) ≤ y ⇔ z ≤ I(x,y),
checked exhaustively on all 65³ = 274,625 grid triples:
Godel I_G = (x≤y ? 1 : y) adjunction holds: True
Goguen I_P = (x≤y ? 1 : y/x) adjunction holds: True
Lukasiewicz I_Ł = min(1, 1-x+y) adjunction holds: True
cross-pairing T_P with I_G breaks it (checked): the residuum
is the UNIQUE arrow adjoint to its own t-norm.

The last two lines report a negative control worth having: the module deliberately cross-pairs the product t-norm with the Gödel arrow and asserts that the adjunction fails (tnorms.py lines 240–241). The check has teeth, and it is worth saying which half of the biconditional breaks. Pairing the product with the smaller Gödel arrow leaves the soundness inequality intact but forfeits maximality: there are degrees zz with TP(x,z)yT_P(x, z) \le y that the Gödel arrow refuses to license. Take x=0.75x = 0.75, z=0.5z = 0.5, y=0.375y = 0.375, three values of the form k/64k/64, so this is one of the triples the exhaustive grid check actually sees: then TP(0.75,0.5)=0.3750.375T_P(0.75, 0.5) = 0.375 \le 0.375, yet z=0.5>IG(0.75,0.375)=0.375z = 0.5 \gt I_G(0.75, 0.375) = 0.375, so the arrow undersells a license the product supports. Pairing a t-norm with a larger foreign arrow breaks soundness itself: with min and the Goguen arrow, min(0.5,  IP(0.5,0.3))=min(0.5,0.6)=0.5>0.3\min(0.5,\; I_P(0.5, 0.3)) = \min(0.5,\, 0.6) = 0.5 \gt 0.3, claiming more for the conclusion than its degree allows. Implications are not interchangeable accessories; each t-norm owes exactly one residuum, and only the residuum delivers both halves of the adjunction at once.

The running example: one chain, three defensible confidences

Volume 2's annotated reasoner left this chapter an inheritance. Its CONFIDENCE semiring ([0,1],max,min)([0,1], \max, \min) attached a confidence to every citation edge of the academic world and composed each derivation chain with =min\otimes = \min, joining alternative derivations with =max\oplus = \max. Both operations now have names and a family: min is the Gödel t-norm, max is its De Morgan dual, and the pair is in fact the oldest fuzzy AND and OR there is, the connectives chosen when fuzzy sets were first defined [5]. Volume 2 was doing fuzzy logic all along, under one particular t-norm, without ever presenting the choice as a choice. The companion turns that identity from a remark into a checked fact: it imports the semiring object itself and asserts that CONFIDENCE.times agrees with t_min on every one of the 4,225 grid pairs, max deviation exactly 0.0 (tnorms.py lines 254–257).

The data arrives with the same discipline. The module inserts Volume 2's directory on the import path and reads the edge list straight out of annotated.py, never retyping a number (tnorms.py lines 51–54 and 185; the edges themselves live in annotated.py lines 151–155): cites(p3, p2) carries confidence 0.9, cites(p2, p1) carries 0.8, and the direct edge cites(p3, p1) carries 0.5. The 2-link column conjoins the first two confidences, the two edges of the derivation p3 → p2 → p1. The 3-link column conjoins the direct edge as a third link, giving the confidence that all three cited claims hold at once; the label counts conjoined links, not path length in the citation graph, since the third link is itself a direct edge rather than a further hop. Axiom 2 quietly earns its keep here: T(T(c1, c2), c3) is the only bracketing anyone needs to write, because associativity guarantees every other bracketing yields the same value (chain_table, tnorms.py lines 188–201):

c1, c2 = CONF[("p3", "p2")], CONF[("p2", "p1")]
c3 = CONF[("p3", "p1")]
rows = []
for name, t in TNORMS:
two = float(t(c1, c2))
# n-ary composition by associativity: T(T(c1, c2), c3).
three = float(t(t(c1, c2), c3))
rows.append({"tnorm": name, "2hop": two, "3hop": three})

The committed run composes the chain under all three t-norms:

[6] the running example: the citation chain of the academic
world under each t-norm (edge confidences read from Volume 2's
annotated.py; its CONFIDENCE semiring ⊗ = min is the Gödel
t-norm, asserted; max dev = 0.0)
links: cites(p3,p2) = 0.9, cites(p2,p1) = 0.8, cites(p3,p1) = 0.5
t-norm 2-link 0.9⊗0.8 3-link 0.9⊗0.8⊗0.5
Godel(min) 0.8000 0.5000
product 0.7200 0.3600
Lukasiewicz 0.7000 0.2000

Read each row aloud. Gödel: min(0.9,0.8)=0.8\min(0.9, 0.8) = 0.8, and the 0.9 leaves no trace on the answer; the 3-link value min(0.8,0.5)=0.5\min(0.8, 0.5) = 0.5 is exactly the weakest edge in the chain. A min-composed chain is as strong as its weakest link and never weaker, no matter how long it grows. Product: 0.90.8=0.720.9 \cdot 0.8 = 0.72, then 0.720.5=0.360.72 \cdot 0.5 = 0.36. Every link leaves a trace, and every additional hop multiplies the running value by a number at most 1, so confidence decays monotonically with depth. Łukasiewicz: 0.9+0.81=0.70.9 + 0.8 - 1 = 0.7, then 0.7+0.51=0.20.7 + 0.5 - 1 = 0.2. The doubt reading makes the arithmetic transparent: the three links carry doubts 0.10.1, 0.20.2, and 0.50.5, the bounded sum of doubts is 0.80.8, and the surviving truth is 10.8=0.21 - 0.8 = 0.2. Each link is charged its full doubt at face value, so this column falls fastest.

Now read the columns. Within each column the universal ordering TŁTPTGT_{\text{Ł}} \le T_P \le T_G reappears, exactly as the pointwise proof demands, and the spread between the extremes widens with chain length: 0.80.7=0.10.8 - 0.7 = 0.1 at two links, 0.50.2=0.30.5 - 0.2 = 0.3 at three, an inequality the module asserts (tnorms.py lines 276–278, right after the per-column ordering assert). Longer chains do not merely lower every confidence; they pull the three accounting policies apart, so the choice of t-norm matters more, not less, as reasoning gets deeper. And nilpotency is one link from biting: conjoin one more link of confidence 0.5 and the Łukasiewicz column hits max(0,  0.2+0.51)=max(0,0.3)=0\max(0,\; 0.2 + 0.5 - 1) = \max(0, -0.3) = 0, a crisp falsehood manufactured from four individually credible links, while the product column would still report 0.180.18 and min would still report 0.50.5.

Which row is right? That is not a mathematical question, and the whole point of the chapter is that it cannot be: all three rows satisfy every axiom a graded conjunction must have. It is a modeling question about how your evidence fails. If the links stand or fall together, so that the chain is only as unreliable as its shakiest source, min's weakest-link accounting is faithful. If the links fail independently, each hop an unrelated chance of error, the product's multiplicative decay is faithful. If every link consumes a nonrefundable budget of tolerance, so that enough accumulated doubt should void the conclusion outright, Łukasiewicz is faithful. Same facts, three defensible confidences. A system that reports 0.5 where another reports 0.36 or 0.2 for the same derivation is not wrong; it has declared a different composition semantics, and the declaration, not the number, is what a reader must audit.

Who orders what from the menu

The rest of this volume orders from exactly this menu, and knowing the three characters tells you in advance how each system will behave. Logic Tensor Networks builds its Real Logic on the product family: conjunction is the product t-norm, disjunction its probabilistic-sum dual, chosen because every conjunct keeps a nonzero derivative, and stabilized with small clamps that keep the values away from the exact endpoints 0 and 1 by a tiny offset ε\varepsilon (epsilon, the clamp width; here ε=104\varepsilon = 10^{-4}, which the companion's ltn.py line 79 imports along with the clamps from fuzzy_grad.py). Neural Theorem Proving composes with the Gödel family: a proof path scores the minimum of its step scores and a goal takes the maximum over its alternative proofs (ntp_mini.py lines 20–21), the weakest-link and best-witness pair, chosen because a proof should be no more credible than its shakiest inference. And the training-free query answerers of Fuzzy and Training-Free CLQA, the chapter on complex logical query answering (CLQA) without query-specific training, put both on the table: the original continuous query decomposition (CQD) recipe evaluates conjunctions under either the Gödel or the product t-norm, and the companion's cqd.py runs the product end to end (its docstring and operator table, cqd.py lines 11 and 155). None of these choices will need justifying from scratch when we meet them; each is a row of this chapter's table, with its ordering position, its dual, its residuum, and its temperament already established.

One more system will be at those tables, and it refuses the menu entirely. Every t-norm is truth-functional: the degree of ABA \wedge B is computed from the degrees of AA and BB alone, with no further information consulted. Probability theory rejects that premise, and the rejection can be stated as a theorem about our three functions. Let x=P(A)x = P(A) and y=P(B)y = P(B) be the probabilities of two events. The conjunction's probability P(AB)P(A \wedge B) is not a function of the pair (x,y)(x, y); it depends on how the events overlap. But it is not arbitrary either. Since every outcome in ABA \wedge B lies in AA, P(AB)xP(A \wedge B) \le x, and symmetrically P(AB)yP(A \wedge B) \le y, so P(AB)min(x,y)P(A \wedge B) \le \min(x, y). In the other direction, inclusion–exclusion gives P(AB)=x+yP(AB)P(A \vee B) = x + y - P(A \wedge B), and a probability is at most 1, so x+yP(AB)1x + y - P(A \wedge B) \le 1, which rearranges to P(AB)x+y1P(A \wedge B) \ge x + y - 1; combined with P(AB)0P(A \wedge B) \ge 0 this is P(AB)max(0,x+y1)P(A \wedge B) \ge \max(0,\, x + y - 1). Assemble the two bounds:

TŁ(x,y)  =  max(0,x+y1)    P(AB)    min(x,y)  =  TG(x,y).T_{\text{Ł}}(x, y) \;=\; \max(0,\, x + y - 1) \;\le\; P(A \wedge B) \;\le\; \min(x, y) \;=\; T_G(x, y).

The true probability of a conjunction lives in an interval whose two endpoints are precisely the smallest and largest of our three t-norms, and the product TP(x,y)=xyT_P(x, y) = xy is the single interior point picked out by independence [1]. Read as a verdict on fuzzy logic: a truth-functional conjunction commits, once and for all, to one point of that interval for every pair of statements, and no single choice can be correct for events that overlap differently. Part II of this volume, beginning with Distribution Semantics, takes the other road: represent the joint distribution itself and compute where in the interval each particular conjunction falls, at the price of inference that is no longer a two-argument formula but a sum over worlds.

The unsolved part

The four axioms are a fence, not a pin. Inside the fence live infinitely many t-norms: whole parametric families interpolate continuously between the three fundamental ones, sweeping a single parameter from one end of its range to the other and passing from min through the product to Łukasiewicz along the way, every intermediate function a fully lawful t-norm with its own dual and its own residuum [1]. Nothing in the logic selects a point on that dial. Every choice satisfies the axioms, restricts to classical AND on the corners, and validates fuzzy modus ponens through its own adjunction, so the deductive machinery is silent on which conjunction is true. The selection criteria all live outside the logic: fit to how your evidence actually composes (the modeling question of the chain table), algebraic convenience (idempotence, or the ability to reach exact 0), or, in this volume's setting, a criterion the classical literature never had to weigh at all. Once a formula's truth degree becomes a training objective, what matters about TT is not its values but its derivatives, because the derivative is the only part a gradient-based learner ever feels. The three characters certified here become three different training signals: min passes gradient to the weakest conjunct alone, the product's per-conjunct gradient is the product of all the other conjuncts and shrinks with every new one, and the Łukasiewicz norm is constant at 0 on the interior region x+y<1x + y \lt 1, where its gradient vanishes identically (on the kink line x+y=1x + y = 1 the function is not differentiable, and only a subgradient exists). Which of these is a feature and which is a pathology is not decidable from this chapter's axioms, and it is precisely the question the next chapter measures.

Why it matters

This chapter converts a design mystery into a vocabulary. From here on, when a neuro-symbolic system says "we relax conjunction," you can ask the three questions that actually determine its behavior: which t-norm (and therefore where it sits in the universal ordering, how confidence decays with proof depth, and whether hard falsehood is reachable), which dual (how alternative derivations aggregate), and which residuum (whether its implication is adjoint to its conjunction, which is what fuzzy modus ponens' soundness rests on). The systems ahead stop being magic and start being rows of a table: Logic Tensor Networks is the product row with clamps, the differentiable prover is the Gödel row, CQD is a menu of two rows, and each inherits its row's temperament, provably.

The chapter also sharpens both pillars retroactively. On the symbolic side, Volume 2's CONFIDENCE semiring is now recognizable as a t-norm commitment that was never argued for: its =min\otimes = \min was one defensible policy among three, and the chain table shows exactly what was at stake in the unargued choice. On the trust side, which Volume 5 will make central, the lesson is that a reported confidence is meaningful only relative to a declared composition policy. The same three facts honestly support the answers 0.5, 0.36, and 0.2; an audit of any graded reasoner must therefore begin by asking not "is the number right" but "under which t-norm is this number even a claim."

Key terms

  • T-norm (triangular norm) — a function T:[0,1]2[0,1]T : [0,1]^2 \to [0,1] that is commutative, associative, monotone in each argument, and has 1 as unit; the axiomatic definition of a graded conjunction, with T(x,0)=0T(x, 0) = 0 a theorem rather than an axiom.
  • Gödel t-normmin(x,y)\min(x, y); idempotent, hence weakest-link chain accounting; the largest t-norm of all, and the only idempotent one.
  • Product t-normxyx\,y; strict (zero only when an input is zero), the independent-evidence reading in which every conjunct leaves a multiplicative trace.
  • Łukasiewicz t-normmax(0,x+y1)\max(0,\, x + y - 1); nilpotent (continuous and Archimedean, with exact 0 reachable from strictly positive inputs); equivalently, doubts 1x1 - x add at face value until they saturate.
  • Universal orderingTŁTPTGT_{\text{Ł}} \le T_P \le T_G pointwise, with T(x,y)min(x,y)T(x,y) \le \min(x,y) for every t-norm TT; verified strict on 3,969 of 4,225 grid cells.
  • T-conorm — the De Morgan dual S(x,y)=1T(1x,1y)S(x, y) = 1 - T(1-x, 1-y), the OR that pairs with a given AND: max, probabilistic sum x+yxyx + y - xy, and bounded sum min(1,x+y)\min(1, x+y) respectively.
  • Strong negation — the order-reversing involution n(x)=1xn(x) = 1 - x that powers the duality; the doubt of a conjunction is the t-conorm of the doubts.
  • ResiduumIT(x,y)=sup{z:T(x,z)y}I_T(x, y) = \sup\lbrace z : T(x, z) \le y\rbrace, the largest degree of implication that never overshoots the conclusion; closed forms IGI_G, IPI_P (Goguen), IŁI_{\text{Ł}}.
  • Adjunction (residuation law)T(x,z)y    zIT(x,y)T(x, z) \le y \iff z \le I_T(x, y), proved for every left-continuous t-norm and checked here on all 274,625 grid triples; the biconditional whose right-to-left half is fuzzy modus ponens' soundness and whose left-to-right half is the residuum's maximality, and cross-pairing families loses at least one half.
  • Truth-functionality — the property that a connective's output degree depends only on its input degrees; every t-norm has it, probability does not, and the true P(AB)P(A \wedge B) ranges over the interval [TŁ(x,y),TG(x,y)][T_{\text{Ł}}(x,y),\, T_G(x,y)].
  • Dyadic grid — the 65 points k/64k/64; every sum, difference, product-of-three, min, and max of grid values is an exact binary float, so the companion's asserts can demand deviation exactly 0.0.

Where this leads

This chapter judged the three t-norms as a logician would: by axioms, duals, residua, and what each says a chain of evidence is worth, and on that scorecard all three passed everything. The next chapter, From Fuzzy to Neural, rejudges them by the only property a gradient-based learner can perceive, the derivative, and the tie shatters. The Gödel minimum routes the entire training signal to a single conjunct and starves the rest; the product's per-conjunct gradient decays geometrically with the number of conjuncts; the Łukasiewicz norm owns a dead zone in which every gradient is exactly zero, and the zone swallows almost the whole cube as conjunctions grow. The companion module fuzzy_grad.py measures all three pathologies on the same academic world, then examines the two standard repairs, softened minimums and endpoint clamps, whose price the next chapter states in the currency this chapter established: which axioms each repair breaks.


Companion code: examples/integration/tnorms.py implements this entire chapter: the three t-norms (lines 66–78), the axiom grid with its exactness argument (lines 57–110), the De Morgan duals (lines 115–138), the residua and the exhaustive adjunction check with its cross-pairing negative control (lines 145–179 and 233–241), the idempotence census (lines 245–252), and the Volume 2 handshake plus the citation-chain table (lines 254–278), with every claim guarded by an assert in run(). Run python3 examples/integration/tnorms.py to reproduce every number quoted here; the run ends with SUMMARY tnorms: axioms_exact=3/3 adjunction=3/3 idem_min=65/65 chain2=(0.80, 0.72, 0.70) chain3=(0.50, 0.36, 0.20).