TPTP Axioms File: MGT002+3.ax
%--------------------------------------------------------------------------
% File : MGT002+3 : TPTP v9.3.1. Released v9.3.0.
% Domain : Management
% Axioms : Logical constraint composition: or and xone verdicts
% Version : [Han98] axioms.
% English : Encodes the three-valued verdict semantics for ODRL or and
% xone over branch pairs (thm:composition-soundness).
% or_verdict/2: compatible if any branch pair overlaps;
% conflict only if all pairs conflict.
% xone_verdict/2: Vm = verdict of one pair; Vr = MAX of all
% remaining pairs. Compatible iff Vm=compatible & Vr=conflict
% (exactly one overlapping pair). Vr MUST be MAX, not min;
% see body comment for the multi-pair correctness argument.
% or_sound_2branch: 1D helper for disjunction soundness only;
% uses single variable X, not multi-axis box vectors.
% Refs : [MC+26] Mustafa et al. (2026), Axis Decomposition for ODRL
% Source : [MC+26]
% Names : COMP000-0.ax [MC+26]
% Status : Satisfiable
% Syntax : Number of formulae : 9 ( 0 unt; 0 def)
% Number of atoms : 52 ( 28 equ)
% Maximal formula atoms : 8 ( 5 avg)
% Number of connectives : 49 ( 6 ~; 7 |; 27 &)
% ( 0 <=>; 9 =>; 0 <=; 0 <~>)
% Maximal formula depth : 14 ( 8 avg)
% Maximal term depth : 2 ( 1 avg)
% Number of predicates : 4 ( 3 usr; 0 prp; 1-4 aty)
% Number of functors : 5 ( 5 usr; 3 con; 0-2 aty)
% Number of variables : 25 ( 24 !; 1 ?)
% SPC : FOF_SAT_RFO_SEQ
% Comments : Requires AXIS001+1.ax and ORD000-0.ax. Continuous domains
% also requires ORD001-0.ax.
%--------------------------------------------------------------------------
%---- V1, V2 are box-level verdicts of two branch pairs being combined.
%---- Under the order Conflict < Unknown < Compatible:
%---- max(V1,V2) = compatible => or = compatible (any overlap suffices)
%---- max(V1,V2) = conflict => or = conflict (all pairs disjoint)
%---- max(V1,V2) = unknown => or = unknown (inconclusive)
fof(or_compat,axiom,
! [V1,V2] :
( ( is_verdict(V1)
& is_verdict(V2)
& ( V1 = compatible
| V2 = compatible ) )
=> or_verdict(V1,V2) = compatible ) ).
fof(or_conflict,axiom,
! [V1,V2] :
( ( is_verdict(V1)
& is_verdict(V2)
& V1 = conflict
& V2 = conflict )
=> or_verdict(V1,V2) = conflict ) ).
fof(or_unknown,axiom,
! [V1,V2] :
( ( is_verdict(V1)
& is_verdict(V2)
& V1 != compatible
& V2 != compatible
& ~ ( V1 = conflict
& V2 = conflict ) )
=> or_verdict(V1,V2) = unknown ) ).
fof(or_verdict_total,axiom,
! [V1,V2] :
( ( is_verdict(V1)
& is_verdict(V2) )
=> ( or_verdict(V1,V2) = compatible
| or_verdict(V1,V2) = conflict
| or_verdict(V1,V2) = unknown ) ) ).
%----xone_verdict(Vm, Vr):
%---- Vm = verdict of the ONE branch pair being tested for unique overlap.
%---- Vr = MAX of ALL remaining branch pair verdicts under Conflict<Unknown<Compatible.
%----CRITICAL: Vr must be MAX (not min) of remaining pairs.
%---- Vr = conflict IFF every remaining pair is conflict (max = conflict).
%---- Vr = unknown IFF some remaining pair is unknown and none compatible.
%---- Vr = compatible IFF at least one remaining pair is compatible.
%----With MAX semantics the 9-case truth table is:
%---- (compatible, conflict) -> compatible [exactly 1 compat pair]
%---- (compatible, unknown) -> unknown [1 compat + >=1 unknown]
%---- (compatible, compatible) -> unknown [>=2 compat pairs]
%---- (conflict, conflict) -> conflict [all pairs conflict]
%---- (conflict, *) -> unknown [no compat, some not conflict]
%---- (unknown, *) -> unknown
%----If Vr were MIN, a scenario with 2 compat + 2 conflict pairs would give
%---- Vm=compat, Vr=min(compat,conflict,conflict)=conflict, incorrectly
%---- firing xone_compat (Compatible instead of Unknown).
%----Generators MUST use MAX for Vr; MUST be MAX not min (see above).
fof(xone_compat,axiom,
! [Vm,Vr] :
( ( is_verdict(Vm)
& is_verdict(Vr)
& Vm = compatible
& Vr = conflict )
=> xone_verdict(Vm,Vr) = compatible ) ).
fof(xone_conflict,axiom,
! [Vm,Vr] :
( ( is_verdict(Vm)
& is_verdict(Vr)
& Vm = conflict
& Vr = conflict )
=> xone_verdict(Vm,Vr) = conflict ) ).
fof(xone_unknown,axiom,
! [Vm,Vr] :
( ( is_verdict(Vm)
& is_verdict(Vr)
& ~ ( Vm = compatible
& Vr = conflict )
& ~ ( Vm = conflict
& Vr = conflict ) )
=> xone_verdict(Vm,Vr) = unknown ) ).
fof(xone_verdict_total,axiom,
! [Vm,Vr] :
( ( is_verdict(Vm)
& is_verdict(Vr) )
=> ( xone_verdict(Vm,Vr) = compatible
| xone_verdict(Vm,Vr) = conflict
| xone_verdict(Vm,Vr) = unknown ) ) ).
%----SCOPE: 1-dimensional only.
%---- Uses a single variable X with in_closed on single-axis intervals.
%---- Encodes: all 4 cross-pair axis conflicts on one axis => no X in any
%---- cross-pair combination on that axis.
%---- For N-dimensional box soundness (multi-axis policies), a separate
%---- axiom using in_box2/in_box3 from PROJ000-0.ax with vector variables
%---- (X1,...,Xn) is required. This axiom is a 1D proof-search hint only.
fof(or_sound_2branch,axiom,
! [A1lo,A1hi,A2lo,A2hi,B1lo,B1hi,B2lo,B2hi] :
( ( axis_conflict(A1lo,A1hi,B1lo,B1hi)
& axis_conflict(A1lo,A1hi,B2lo,B2hi)
& axis_conflict(A2lo,A2hi,B1lo,B1hi)
& axis_conflict(A2lo,A2hi,B2lo,B2hi) )
=> ~ ? [X] :
( ( in_closed(X,A1lo,A1hi)
| in_closed(X,A2lo,A2hi) )
& ( in_closed(X,B1lo,B1hi)
| in_closed(X,B2lo,B2hi) ) ) ) ).
%--------------------------------------------------------------------------