mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-24 05:43:53 +00:00
Estimated hours taken: 2 doc/reference_manual.texi: compiler/make_hlds.m: Fix a problem reported by Dante Baldan <dba@info.fundp.ac.be>, where the use of `all [X] p(X) <=> q(X)' lead to spurious mode errors, due to failure to eliminate certain kinds of double negations: in particular, the compiler should convert negated conjunctions of negations into disjunctions. tests/hard_coded/Mmakefile: tests/hard_coded/quantifier.m: tests/hard_coded/quantifier.exp: Add a regression test for the above change.
36 lines
516 B
Mathematica
36 lines
516 B
Mathematica
:- module quantifier.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io__state::di,io__state::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module list, int.
|
|
|
|
:- pred sum(list(int),int).
|
|
:- mode sum(in,out) is det.
|
|
|
|
sum([],0).
|
|
sum([X|L],X + N1) :- sum(L,N1).
|
|
|
|
|
|
:- pred foo(pred(int)).
|
|
:- mode foo(free->pred(out) is det) is det.
|
|
|
|
foo(sum([1,2,3])).
|
|
|
|
|
|
main -->
|
|
( {P = lambda([X :: out] is det, X = 6),
|
|
foo(Q),
|
|
all [X] (call(P,X) <=> call(Q,X))}
|
|
->
|
|
print("equivalent")
|
|
;
|
|
print("not equivalent")
|
|
), nl.
|
|
|