/Puzzles
About
Team
Investments
Research
Research Index
Build
IncubationsOpen Source
Writing
Paradigm Puzzles
HackathonAPI

Terms, Disclosures, Privacy

LinkedIn, Twitter, Contact

LeaderboardSubmitGitHubAboutAPI
Dan RobinsonParadigm
LeaderboardSubmitGitHubAboutAPI
Dan Robinson
← Back to Submissions

negative_fractional_literal_constant

Pending

Submitted, awaiting the pre-agent gates.

Author
@forwardsecrecy
Points
0
Verdict
—
Resolution
—
Submitted
Jul 24, 2026, 07:58 PM
Reviewed
—

Source

// SPDX-License-Identifier: MIT
pragma solidity 0.8.35;

/* ===ARENA-MANIFEST===
{
  "deploy": { "contract": "C", "args": [], "value": 0 },
  "entry":   { "function": "f", "args": [] },
  "lane":    "C",
  "feature": "negated-fractional-literal-constant-over-reject",
  "note":    "A NEGATED FRACTIONAL literal (a rational constant such as -1.5) anywhere in a constant expression fails to lower: solidity-lean fails closed (over_reject) on a program solc 0.8.35 accepts and runs. return -1.5 * 2; must return int256 -3; solidity-lean refuses the whole contract. The trigger is the negative FRACTIONAL OPERAND, not the sign of the result and not the position. OVER-REJECTS: -1.5 * 2 (result -3), -1.5 * 0 (result 0 - non-negative result still fails), -0.5 * -2 (result +1 - both operands negative), -2.5 * 2, -3.0 / 1.5, and it fires in every position tried: bare return, a local int256 initializer (int256 v = -1.5 * 2), an if condition, and an abi.encode argument. AGREES with solc: 1.5 * 2 (positive fractional), 1.5 * 2 - 6 and 3 - 1.5 * 2 (fractional operands, NEGATIVE result, no negated fractional literal), 1e18 / 1e9, 0.5 + 0.5, 0.5 ether, 2 ** 10, and - crucially - return -3 (a negated INTEGER literal in the same position). Distinct from 'negative-constant-in-abiencode-arg': that one needs a negative INTEGER literal, produces a wrong observable (spurious Panic(0), lane S), and only fires in a builtin-argument position (return K is fine); this one needs a FRACTIONAL literal, fails closed (lane C), and reproduces with no builtin call anywhere. Related sub-case: abi.encode(-0.5 ether) instead produces a wrong observable rather than failing closed."
}
===END-ARENA-MANIFEST=== */

contract C {
    function f() external pure returns (int256) {
        // solc+EVM: -3   |   solidity-lean: over_reject (fails closed)
        return -1.5 * 2;
    }
}