// SPDX-License-Identifier: MIT // Generated by EML-lang Solidity backend // Source module: sine_oscillator // Source file: /home/monogate/monogate/forge/examples/sine_oscillator.eml // Functions: 1 (1 @verify-annotated) // Constants: 0 // Transcendental stubs: abs, sin -- override in a derived contract (see PRBMath SD59x18) pragma solidity ^0.8.20; contract SineOscillator { /// @notice Formal proof: sine_oscillator_amplitude_bound (MachLib). Compiled from EML-lang. /// @dev Pfaffian profile: chain_order=2, cost_class=p2-d5-w2-c0, drift_risk=MEDIUM. /// @dev Gas estimate: ~5,200 gas (PRBMath SD59x18 overrides assumed; run forge gas-bench for the canonical signal). /// @param amplitude amplitude (int256) /// @param omega omega (int256) /// @param t t (int256) /// @dev ensures: (_abs(result) <= amplitude) function oscillate(int256 amplitude, int256 omega, int256 t) external pure returns (int256) { require((amplitude >= 0), "oscillate: requires (amplitude >= 0)"); require((amplitude <= 1), "oscillate: requires (amplitude <= 1)"); require((omega >= 0), "oscillate: requires (omega >= 0)"); require((omega <= 10000), "oscillate: requires (omega <= 10000)"); require((t >= 0), "oscillate: requires (t >= 0)"); return (amplitude * _sin((omega * t))); } /// @dev abs stub — override with a fixed-point implementation. function _abs(int256 x) internal pure virtual returns (int256) { x; // silence unused-param warning revert("_abs: stub — override in a derived contract (see PRBMath SD59x18.abs)"); } /// @dev sin stub — override with a fixed-point implementation. function _sin(int256 x) internal pure virtual returns (int256) { x; // silence unused-param warning revert("_sin: stub — override in a derived contract (see PRBMath SD59x18.sin)"); } }