Theoretically, these 2 logics have some difference in Z3. But when I try to code, it seems that there is no difference between them. For example, the code below should have showed the difference:
from z3 import *
# create variables
x = Real('x')
y = Real('y')
# create solver
solver = SolverFor("QF_NRA")
# add constraints
solver.add(x * y == 1)
solver.add(x + y >= 3)
# check satisfiability
print(solver.check())
# print model
if solver.check() == sat:
m = solver.model()
print(m)
# create solver
solver = SolverFor("QF_LRA")
# add constraints
solver.add(x * y == 1)
solver.add(x + y >= 3)
# check satisfiability
print(solver.check())
# print model
if solver.check() == sat:
m = solver.model()
print(m)
However, these 2 logics finally have their solutions. I am confused and wonder whether they are different or not.
I have asked chatGPT but I am not satisfied. I want to know if there is difference. If so, please give me an example to show their obvious difference.