First-order logic with tuple transitive closure #
The operator of width k binds two k-tuples in one formula body and is applied to two
k-tuples of terms. Its interpretation is the reflexive transitive closure of the relation
defined by the body. Free parameters are held fixed along the path, and bodies may contain
nested closure operators. Width zero is allowed: there is one empty tuple, even on an empty
domain, and its reflexive reachability always holds.
Main definitions #
shape,policy,interpretation: tuple closure as a scoped, positive logical operator.tc: the formula constructor.pair,left,right: concatenate and split the endpoint tuples.
Main results #
interpretation_respects: closure is monotone in its body relation.realize_tc: semantics in terms of Mathlib'sRelation.ReflTransGen.realize_tc_pair: the same semantics with explicit source and target term tuples.realize_tc_refl,realize_tc_of_body,realize_tc_trans: reflexivity, edge inclusion, and composition of paths.
This file provides logical syntax and semantics, not a complexity-class capture theorem.
References #
Tuple closure binds two tuples and no relation variables.
Instances For
Closure is positive in its single body and imposes no local relation constraints.
Instances For
Interpret closure as reflexive reachability between endpoint tuples.
Instances For
Enlarging the body relation preserves all paths.
Apply tuple closure to a body with two locally bound endpoint tuples.
Instances For
Closure adds no formation condition beyond those already present in its body.
Closure holds exactly when a finite path connects the evaluated endpoint tuples.
Applying closure to concatenated endpoint terms realizes ordinary tuple reachability.
The empty path makes every tuple reachable from itself.
Every edge defined by the body is a closure path of length one.
Paths with a common intermediate tuple compose.