contract C {
	uint x;
	uint y;

	function g(uint _x) public {
		uint z = f1(_x);
		assert(x == 0); // should hold because f1 is pure
		assert(z == _x); // should hold but f1 was abstracted as nondet, so it fails

		uint t = f2(_x);
		assert(y == 0); // should hold because f1 is pure and f2 is view
		assert(t == _x); // should hold
	}

	/// @custom:smtchecker abstract-function-nondet
	function f1(uint _x) internal pure returns (uint) {
		return _x;
	}

	function f2(uint _y) internal view returns (uint) {
		return _y;
	}
}
// ====
// SMTEngine: chc
// ----
// Warning 2018: (33-335): Function state mutability can be restricted to view
// Warning 2018: (457-524): Function state mutability can be restricted to pure
// Warning 6328: (135-150): CHC: Assertion violation happens here.\nCounterexample:\nx = 0, y = 0\n_x = 0\nz = 1\nt = 0\n\nTransaction trace:\nC.constructor()\nState: x = 0, y = 0\nC.g(0)\n    C.f1(0) -- internal call
