Skip to content

Fix SC/CP/DP postulate checkers and discussion-based overflow (#74 #75 #76 #80) - #98

Merged
ctoth merged 7 commits into
mainfrom
fix/ranking-postulates
Sep 27, 2026
Merged

ctoth merged 7 commits into
mainfrom
fix/ranking-postulates

Conversation

@ctoth

@ctoth ctoth commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Fixes four ranking issues: three postulate checkers and discussion-based overflow. The postulate formulas were checked against the Bonzon et al. 2016 page image (PDF p. 2), not only the repo notes. Each commit adds a failing regression test (an all-tied ranking that the postulate forbids) plus a control (categoriser on the same framework), then applies the fix.

The branch also carries a docs commit correcting SC/CP in papers/Bonzon_2016.../notes.md. Main had meanwhile corrected the same lines in b475c2f, and the merge takes main's version, so this PR adds no net notes change.

Closes #74
Closes #75
Closes #76
Closes #80

🤖 Generated with Claude Code

https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg

ctoth and others added 7 commits September 27, 2026 01:54
self_contradiction only checked that a self-attacking argument does not
strictly outrank a clean one, so a tie passed. Bonzon et al. 2016 (p. 2,
SC, checked against the page image) states (a, a) not in R and (b, b) in
R imply a > b, strictly. The checker now requires every non-self-
attacking argument to be strictly preferred to every self-attacker.

Closes #76

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg
…tions

cardinality_precedence skipped arguments with zero attackers and only
compared arguments whose attackers were all unattacked, so ties on a
plain a -> b -> c chain passed. Bonzon et al. 2016 (p. 2, CP, checked
against the page image) states |R1-(a)| < |R1-(b)| implies a > b with no
such restrictions. The checker now applies CP to every pair.

Closes #75

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg
…r set

defense_precedence treated an argument as defended only when every one of
its attackers was attacked, so the paper's own partially defended example
(h -> c -> a, d -> a, e -> b, g -> b) escaped the check. Amgoud & Ben-Naim
2013 (Example 3) and Bonzon et al. 2016 (p. 2, DP, checked against the
page image) require |R1-(a)| = |R1-(b)|, R2+(a) nonempty and R2+(b) empty.
The now-unused _every_attacker_is_attacked helper is removed.

Closes #74

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg
discussion_based_ranking counted linear discussions with Python integers
but converted every count to float, so the complete 3-cycle raised
OverflowError at depth 650, and large counts lost precision before the
lexicographic comparison. Amgoud & Ben-Naim 2013 (Defs. 10-11) define
Dis_i(a) as exact counts compared lexicographically; the signed counts
now stay integers.

Closes #80

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg
The notes described Self-Contradiction as "ranked no higher" and limited
Cardinality Precedence to non-attacked attackers. The page image
(pngs/page-001.png, PDF p.2) states SC with a strict preference and CP
as |R1-(a)| < |R1-(b)| => a > b with no such condition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4tAVyyKcs1sYcsEzL7Bzg
# Conflicts:
#	papers/Bonzon_2016_ComparativeStudyRanking-basedSemantics/notes.md
@ctoth
ctoth merged commit acf7f9c into main Sep 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment