diff: Bug fix in relation__rtc

Andrew Bromage bromage at cs.mu.OZ.AU
Tue Mar 24 11:18:53 AEDT 1998


G'day all.

Fergus, could you review this one please, since you found the bug?

Note: The diff between the old relation__rtc and the new one is not very
meaningful.  Instead, the new algorithm is given here.

Cheers,
Andrew Bromage

Estimated hours taken: 3

relation__rtc was just plain broken.  Rather than try to fix an
algorithm which I pulled out of an obscure paper some years ago, it's
now replaced with a slightly less efficient algorithm which is much
easier to understand.

library/relation.m:
	Replacement for relation__rtc.

tests/general/relation_test.exp:
tests/general/relation_test.m:
	Change to the output format to make debugging of relation.m
	easier in future.

tests/general/Mmakefile:
tests/general/rtc_bug.exp:
tests/general/rtc_bug.m:
	Add the test case for which the old relation__rtc didn't work.


Index: library/relation.m
===================================================================

	% relation__rtc returns the reflexive transitive closure
	% of a relation.
	%
	% Note: This is not the most efficient algorithm (in the sense
	% of minimal number of arc insertions) possible.  However it
	% "reasonably" efficient and, more importantly, is much easier
	% to debug than some others.
	%
	% The algorithm is very simple, and is based on the
	% observation that the RTC of any element in a clique is the
	% same as the RTC of any other element in that clique.  So
	% we visit each clique in reverse topological sorted order,
	% compute the RTC for each element in the clique and then
	% add the appropriate arcs.
	%
relation__rtc(Rel, RTC) :-
	relation__dfs(Rel, Dfs),
	set_bbbtree__init(Visit),

	Rel   = relation(NextElement, ElMap, _, _),
	map__init(FwdMap),
	map__init(BwdMap),
	RTC0 = relation(NextElement, ElMap, FwdMap, BwdMap),

	relation__rtc_2(Dfs, Rel, Visit, RTC0, RTC).

:- pred relation__rtc_2(list(relation_key), relation(T),
	set_bbbtree(relation_key), relation(T), relation(T)).
:- mode relation__rtc_2(in, in, in, in, out) is det.

relation__rtc_2([], _, _, RTC, RTC).
relation__rtc_2([H | T], Rel, Visit0, RTC0, RTC) :-
	( set_bbbtree__member(H, Visit0) ->
		relation__rtc_2(T, Rel, Visit0, RTC0, RTC)
	;
		relation__dfs_3([H], Rel, Visit0, [], Visit, CliqueL0),
		list__sort_and_remove_dups(CliqueL0, CliqueL),
		list__foldl(lambda([K :: in, L0 :: in, L :: out] is det,
			( relation__lookup_from(Rel, K, Followers0),
			  set__to_sorted_list(Followers0, Followers),
			  list__merge_and_remove_dups(Followers, L0, L)
			)),
			CliqueL, CliqueL, CliqueFollowers),
		list__foldl(lambda([K :: in, L0 :: in, L :: out] is det,
			( relation__lookup_from(RTC0, K, Followers0),
			  set__to_sorted_list(Followers0, Followers),
			  list__merge_and_remove_dups(Followers, L0, L)
			)),
			CliqueFollowers, CliqueL, NewFollowers),
		relation__add_cartesian_product(CliqueL, NewFollowers,
			RTC0, RTC1),
		relation__rtc_2(T, Rel, Visit, RTC1, RTC)
	).

:- pred relation__add_cartesian_product(list(relation_key), list(relation_key),
		relation(T), relation(T)).
:- mode relation__add_cartesian_product(in, in, in, out) is det.

relation__add_cartesian_product([], _, RTC, RTC).
relation__add_cartesian_product([K1 | Ks1], Ks2, RTC0, RTC) :-
	relation__add_cartesian_product_2(K1, Ks2, RTC0, RTC1),
	relation__add_cartesian_product(Ks1, Ks2, RTC1, RTC).

:- pred relation__add_cartesian_product_2(relation_key, list(relation_key),
		relation(T), relation(T)).
:- mode relation__add_cartesian_product_2(in, in, in, out) is det.

relation__add_cartesian_product_2(_, [], RTC, RTC).
relation__add_cartesian_product_2(K1, [K2 | Ks2], RTC0, RTC) :-
	relation__add(RTC0, K1, K2, RTC1),
	relation__add_cartesian_product_2(K1, Ks2, RTC1, RTC).

Index: tests/general/Mmakefile
===================================================================
RCS file: /home/staff/zs/imp/tests/general/Mmakefile,v
retrieving revision 1.10
diff -u -r1.10 Mmakefile
--- Mmakefile	1998/03/12 21:11:29	1.10
+++ Mmakefile	1998/03/23 00:51:07
@@ -53,6 +53,7 @@
 		petdr1 \
 		prune_switch \
 		relation_test \
+		rtc_bug \
 		semidet_map \
 		set_test \
 		string_format_test \
Index: tests/general/relation_test.exp
===================================================================
RCS file: /home/staff/zs/imp/tests/general/relation_test.exp,v
retrieving revision 1.1
diff -u -r1.1 relation_test.exp
--- relation_test.exp	1998/03/12 21:11:29	1.1
+++ relation_test.exp	1998/03/23 23:58:35
@@ -1,5 +1,60 @@
-Rel = ["a" - "b", "b" - "c", "c" - "d", "l2" - "l3", "l1" - "l2", "l3" - "l1", "x" - "x"]
-tc of Rel = ["a" - "c", "a" - "d", "a" - "b", "b" - "c", "b" - "d", "c" - "d", "l2" - "l3", "l2" - "l1", "l2" - "l2", "l1" - "l3", "l1" - "l1", "l1" - "l2", "l3" - "l3", "l3" - "l1", "l3" - "l2", "x" - "x"]
-rtc of Rel = ["a" - "c", "a" - "d", "a" - "b", "a" - "a", "b" - "c", "b" - "d", "b" - "b", "d" - "d", "c" - "c", "c" - "d", "l2" - "l3", "l2" - "l1", "l2" - "l2", "l1" - "l3", "l1" - "l1", "l1" - "l2", "l3" - "l3", "l3" - "l1", "l3" - "l2", "x" - "x"]
-Rel2 = ["a" - "a1", "b" - "b1", "c" - "c1", "d" - "d1"]
-composition of Rel1 and Rel2 = ["c" - "d1", "b" - "c1", "a" - "b1"]
+Rel =
+"a" - "b"
+"b" - "c"
+"c" - "d"
+"l1" - "l2"
+"l2" - "l3"
+"l3" - "l1"
+"x" - "x"
+
+tc of Rel =
+"a" - "b"
+"a" - "c"
+"a" - "d"
+"b" - "c"
+"b" - "d"
+"c" - "d"
+"l1" - "l1"
+"l1" - "l2"
+"l1" - "l3"
+"l2" - "l1"
+"l2" - "l2"
+"l2" - "l3"
+"l3" - "l1"
+"l3" - "l2"
+"l3" - "l3"
+"x" - "x"
+
+rtc of Rel =
+"a" - "a"
+"a" - "b"
+"a" - "c"
+"a" - "d"
+"b" - "b"
+"b" - "c"
+"b" - "d"
+"c" - "c"
+"c" - "d"
+"d" - "d"
+"l1" - "l1"
+"l1" - "l2"
+"l1" - "l3"
+"l2" - "l1"
+"l2" - "l2"
+"l2" - "l3"
+"l3" - "l1"
+"l3" - "l2"
+"l3" - "l3"
+"x" - "x"
+
+Rel2 =
+"a" - "a1"
+"b" - "b1"
+"c" - "c1"
+"d" - "d1"
+
+composition of Rel1 and Rel2 =
+"a" - "b1"
+"b" - "c1"
+"c" - "d1"
+
Index: tests/general/relation_test.m
===================================================================
RCS file: /home/staff/zs/imp/tests/general/relation_test.m,v
retrieving revision 1.1
diff -u -r1.1 relation_test.m
--- relation_test.m	1998/03/12 21:11:30	1.1
+++ relation_test.m	1998/03/23 03:48:49
@@ -26,16 +26,18 @@
 	{ relation__tc(Rel, TC_Rel) },
 	{ relation__rtc(Rel, RTC_Rel) },
 	{ relation__compose(Rel, Rel2, ComposedRel) },
-	print("Rel = "), print_rel(Rel), nl,
-	print("tc of Rel = "), print_rel(TC_Rel), nl,
-	print("rtc of Rel = "), print_rel(RTC_Rel), nl,
-	print("Rel2 = "), print_rel(Rel2), nl,
-	print("composition of Rel1 and Rel2 = "), print_rel(ComposedRel), nl.
+	print("Rel ="), nl, print_rel(Rel), nl,
+	print("tc of Rel ="), nl, print_rel(TC_Rel), nl,
+	print("rtc of Rel ="), nl, print_rel(RTC_Rel), nl,
+	print("Rel2 ="), nl, print_rel(Rel2), nl,
+	print("composition of Rel1 and Rel2 ="), nl,
+			print_rel(ComposedRel), nl.
 
 :- pred print_rel(relation(T), state, state).
 :- mode print_rel(in, di, uo) is det.
 
 print_rel(Relation) -->
-	{ relation__to_assoc_list(Relation, AssocList) },
-	print(AssocList).
+	{ relation__to_assoc_list(Relation, AssocList0) },
+	{ list__sort(AssocList0, AssocList) },
+	write_list(AssocList, "\n", print), nl.
 

New File: tests/general/rtc_bug.exp
===================================================================
L:
"varset" - "mercury_builtin"
"varset" - "list"
"varset" - "assoc_list"
"varset" - "map"
"varset" - "term"
"term" - "mercury_builtin"
"term" - "list"
"term" - "std_util"
"term" - "map"
"store" - "mercury_builtin"
"stack" - "mercury_builtin"
"stack" - "list"
"set_unordlist" - "mercury_builtin"
"set_unordlist" - "list"
"set_unordlist" - "bool"
"set_ordlist" - "mercury_builtin"
"set_ordlist" - "list"
"set_ordlist" - "bool"
"require" - "mercury_builtin"
"set_bbbtree" - "mercury_builtin"
"set_bbbtree" - "list"
"set_bbbtree" - "bool"
"relation" - "mercury_builtin"
"relation" - "list"
"relation" - "assoc_list"
"relation" - "set"
"relation" - "set_bbbtree"
"rbtree" - "mercury_builtin"
"rbtree" - "list"
"rbtree" - "assoc_list"
"random" - "mercury_builtin"
"random" - "list"
"queue" - "mercury_builtin"
"queue" - "list"
"prolog" - "mercury_builtin"
"prolog" - "list"
"prolog" - "std_util"
"pqueue" - "mercury_builtin"
"pqueue" - "assoc_list"
"term_io" - "mercury_builtin"
"term_io" - "char"
"term_io" - "io"
"term_io" - "term"
"term_io" - "varset"
"parser" - "mercury_builtin"
"parser" - "io"
"parser" - "term_io"
"multi_map" - "mercury_builtin"
"multi_map" - "list"
"multi_map" - "assoc_list"
"multi_map" - "map"
"multi_map" - "set"
"math" - "mercury_builtin"
"tree234" - "mercury_builtin"
"tree234" - "list"
"tree234" - "assoc_list"
"library" - "mercury_builtin"
"lexer" - "mercury_builtin"
"lexer" - "char"
"lexer" - "io"
"ops" - "mercury_builtin"
"string" - "mercury_builtin"
"string" - "list"
"string" - "char"
"io" - "mercury_builtin"
"io" - "list"
"io" - "std_util"
"io" - "char"
"io" - "string"
"io" - "ops"
"group" - "mercury_builtin"
"group" - "list"
"group" - "assoc_list"
"group" - "set"
"graph" - "mercury_builtin"
"graph" - "list"
"graph" - "std_util"
"graph" - "set"
"getopt" - "mercury_builtin"
"getopt" - "list"
"getopt" - "std_util"
"getopt" - "map"
"getopt" - "bool"
"getopt" - "char"
"float" - "mercury_builtin"
"set" - "mercury_builtin"
"set" - "list"
"set" - "bool"
"eqvclass" - "mercury_builtin"
"eqvclass" - "list"
"eqvclass" - "set"
"dir" - "mercury_builtin"
"debugger_interface" - "mercury_builtin"
"char" - "mercury_builtin"
"int" - "mercury_builtin"
"bt_array" - "mercury_builtin"
"bt_array" - "list"
"bt_array" - "int"
"bool" - "mercury_builtin"
"bool" - "list"
"bintree_set" - "mercury_builtin"
"bintree_set" - "list"
"bintree" - "mercury_builtin"
"bintree" - "list"
"bintree" - "assoc_list"
"map" - "mercury_builtin"
"map" - "list"
"map" - "assoc_list"
"map" - "set"
"map" - "tree234"
"bimap" - "mercury_builtin"
"bimap" - "list"
"bimap" - "assoc_list"
"bimap" - "map"
"benchmarking" - "mercury_builtin"
"bag" - "mercury_builtin"
"bag" - "list"
"bag" - "assoc_list"
"assoc_list" - "mercury_builtin"
"assoc_list" - "list"
"assoc_list" - "std_util"
"std_util" - "mercury_builtin"
"std_util" - "list"
"std_util" - "set"
"list" - "mercury_builtin"
"list" - "int"
"mercury_builtin" - "mercury_builtin"
"array" - "mercury_builtin"
"array" - "list"
"array" - "std_util"

RTC_L:
"array" - "array"
"array" - "bool"
"array" - "int"
"array" - "list"
"array" - "mercury_builtin"
"array" - "set"
"array" - "std_util"
"assoc_list" - "assoc_list"
"assoc_list" - "bool"
"assoc_list" - "int"
"assoc_list" - "list"
"assoc_list" - "mercury_builtin"
"assoc_list" - "set"
"assoc_list" - "std_util"
"bag" - "assoc_list"
"bag" - "bag"
"bag" - "bool"
"bag" - "int"
"bag" - "list"
"bag" - "mercury_builtin"
"bag" - "set"
"bag" - "std_util"
"benchmarking" - "benchmarking"
"benchmarking" - "mercury_builtin"
"bimap" - "assoc_list"
"bimap" - "bimap"
"bimap" - "bool"
"bimap" - "int"
"bimap" - "list"
"bimap" - "map"
"bimap" - "mercury_builtin"
"bimap" - "set"
"bimap" - "std_util"
"bimap" - "tree234"
"bintree" - "assoc_list"
"bintree" - "bintree"
"bintree" - "bool"
"bintree" - "int"
"bintree" - "list"
"bintree" - "mercury_builtin"
"bintree" - "set"
"bintree" - "std_util"
"bintree_set" - "bintree_set"
"bintree_set" - "int"
"bintree_set" - "list"
"bintree_set" - "mercury_builtin"
"bool" - "bool"
"bool" - "int"
"bool" - "list"
"bool" - "mercury_builtin"
"bt_array" - "bt_array"
"bt_array" - "int"
"bt_array" - "list"
"bt_array" - "mercury_builtin"
"char" - "char"
"char" - "mercury_builtin"
"debugger_interface" - "debugger_interface"
"debugger_interface" - "mercury_builtin"
"dir" - "dir"
"dir" - "mercury_builtin"
"eqvclass" - "bool"
"eqvclass" - "eqvclass"
"eqvclass" - "int"
"eqvclass" - "list"
"eqvclass" - "mercury_builtin"
"eqvclass" - "set"
"float" - "float"
"float" - "mercury_builtin"
"getopt" - "assoc_list"
"getopt" - "bool"
"getopt" - "char"
"getopt" - "getopt"
"getopt" - "int"
"getopt" - "list"
"getopt" - "map"
"getopt" - "mercury_builtin"
"getopt" - "set"
"getopt" - "std_util"
"getopt" - "tree234"
"graph" - "bool"
"graph" - "graph"
"graph" - "int"
"graph" - "list"
"graph" - "mercury_builtin"
"graph" - "set"
"graph" - "std_util"
"group" - "assoc_list"
"group" - "bool"
"group" - "group"
"group" - "int"
"group" - "list"
"group" - "mercury_builtin"
"group" - "set"
"group" - "std_util"
"int" - "int"
"int" - "mercury_builtin"
"io" - "bool"
"io" - "char"
"io" - "int"
"io" - "io"
"io" - "list"
"io" - "mercury_builtin"
"io" - "ops"
"io" - "set"
"io" - "std_util"
"io" - "string"
"lexer" - "bool"
"lexer" - "char"
"lexer" - "int"
"lexer" - "io"
"lexer" - "lexer"
"lexer" - "list"
"lexer" - "mercury_builtin"
"lexer" - "ops"
"lexer" - "set"
"lexer" - "std_util"
"lexer" - "string"
"library" - "library"
"library" - "mercury_builtin"
"list" - "int"
"list" - "list"
"list" - "mercury_builtin"
"map" - "assoc_list"
"map" - "bool"
"map" - "int"
"map" - "list"
"map" - "map"
"map" - "mercury_builtin"
"map" - "set"
"map" - "std_util"
"map" - "tree234"
"math" - "math"
"math" - "mercury_builtin"
"mercury_builtin" - "mercury_builtin"
"multi_map" - "assoc_list"
"multi_map" - "bool"
"multi_map" - "int"
"multi_map" - "list"
"multi_map" - "map"
"multi_map" - "mercury_builtin"
"multi_map" - "multi_map"
"multi_map" - "set"
"multi_map" - "std_util"
"multi_map" - "tree234"
"ops" - "mercury_builtin"
"ops" - "ops"
"parser" - "assoc_list"
"parser" - "bool"
"parser" - "char"
"parser" - "int"
"parser" - "io"
"parser" - "list"
"parser" - "map"
"parser" - "mercury_builtin"
"parser" - "ops"
"parser" - "parser"
"parser" - "set"
"parser" - "std_util"
"parser" - "string"
"parser" - "term"
"parser" - "term_io"
"parser" - "tree234"
"parser" - "varset"
"pqueue" - "assoc_list"
"pqueue" - "bool"
"pqueue" - "int"
"pqueue" - "list"
"pqueue" - "mercury_builtin"
"pqueue" - "pqueue"
"pqueue" - "set"
"pqueue" - "std_util"
"prolog" - "bool"
"prolog" - "int"
"prolog" - "list"
"prolog" - "mercury_builtin"
"prolog" - "prolog"
"prolog" - "set"
"prolog" - "std_util"
"queue" - "int"
"queue" - "list"
"queue" - "mercury_builtin"
"queue" - "queue"
"random" - "int"
"random" - "list"
"random" - "mercury_builtin"
"random" - "random"
"rbtree" - "assoc_list"
"rbtree" - "bool"
"rbtree" - "int"
"rbtree" - "list"
"rbtree" - "mercury_builtin"
"rbtree" - "rbtree"
"rbtree" - "set"
"rbtree" - "std_util"
"relation" - "assoc_list"
"relation" - "bool"
"relation" - "int"
"relation" - "list"
"relation" - "mercury_builtin"
"relation" - "relation"
"relation" - "set"
"relation" - "set_bbbtree"
"relation" - "std_util"
"require" - "mercury_builtin"
"require" - "require"
"set" - "bool"
"set" - "int"
"set" - "list"
"set" - "mercury_builtin"
"set" - "set"
"set_bbbtree" - "bool"
"set_bbbtree" - "int"
"set_bbbtree" - "list"
"set_bbbtree" - "mercury_builtin"
"set_bbbtree" - "set_bbbtree"
"set_ordlist" - "bool"
"set_ordlist" - "int"
"set_ordlist" - "list"
"set_ordlist" - "mercury_builtin"
"set_ordlist" - "set_ordlist"
"set_unordlist" - "bool"
"set_unordlist" - "int"
"set_unordlist" - "list"
"set_unordlist" - "mercury_builtin"
"set_unordlist" - "set_unordlist"
"stack" - "int"
"stack" - "list"
"stack" - "mercury_builtin"
"stack" - "stack"
"std_util" - "bool"
"std_util" - "int"
"std_util" - "list"
"std_util" - "mercury_builtin"
"std_util" - "set"
"std_util" - "std_util"
"store" - "mercury_builtin"
"store" - "store"
"string" - "char"
"string" - "int"
"string" - "list"
"string" - "mercury_builtin"
"string" - "string"
"term" - "assoc_list"
"term" - "bool"
"term" - "int"
"term" - "list"
"term" - "map"
"term" - "mercury_builtin"
"term" - "set"
"term" - "std_util"
"term" - "term"
"term" - "tree234"
"term_io" - "assoc_list"
"term_io" - "bool"
"term_io" - "char"
"term_io" - "int"
"term_io" - "io"
"term_io" - "list"
"term_io" - "map"
"term_io" - "mercury_builtin"
"term_io" - "ops"
"term_io" - "set"
"term_io" - "std_util"
"term_io" - "string"
"term_io" - "term"
"term_io" - "term_io"
"term_io" - "tree234"
"term_io" - "varset"
"tree234" - "assoc_list"
"tree234" - "bool"
"tree234" - "int"
"tree234" - "list"
"tree234" - "mercury_builtin"
"tree234" - "set"
"tree234" - "std_util"
"tree234" - "tree234"
"varset" - "assoc_list"
"varset" - "bool"
"varset" - "int"
"varset" - "list"
"varset" - "map"
"varset" - "mercury_builtin"
"varset" - "set"
"varset" - "std_util"
"varset" - "term"
"varset" - "tree234"
"varset" - "varset"


New File: tests/general/rtc_bug.m
===================================================================
:- module rtc_bug.
:- interface.
:- import_module io.
:- pred main(state::di, state::uo) is det.

:- implementation.
:- import_module relation, std_util, list.

main -->
	{ l(L) },
	io__print("L:"), io__nl,
	io__write_list(L, "\n", io__print), io__nl, io__nl,
	{ relation__from_assoc_list(L, R) },
	{ relation__rtc(R, RTC_R) },
	{ relation__to_assoc_list(RTC_R, RTC_L0) },
	{ list__sort(RTC_L0, RTC_L) },
	io__print("RTC_L:"), io__nl,
	io__write_list(RTC_L, "\n", io__print), io__nl, io__nl,
	[].

:- pred l(list(pair(string)) :: out) is det.
l(["varset" - "mercury_builtin",
"varset" - "list",
"varset" - "assoc_list",
"varset" - "map",
"varset" - "term",
"term" - "mercury_builtin",
"term" - "list",
"term" - "std_util",
"term" - "map",
"store" - "mercury_builtin",
"stack" - "mercury_builtin",
"stack" - "list",
"set_unordlist" - "mercury_builtin",
"set_unordlist" - "list",
"set_unordlist" - "bool",
"set_ordlist" - "mercury_builtin",
"set_ordlist" - "list",
"set_ordlist" - "bool",
"require" - "mercury_builtin",
"set_bbbtree" - "mercury_builtin",
"set_bbbtree" - "list",
"set_bbbtree" - "bool",
"relation" - "mercury_builtin",
"relation" - "list",
"relation" - "assoc_list",
"relation" - "set",
"relation" - "set_bbbtree",
"rbtree" - "mercury_builtin",
"rbtree" - "list",
"rbtree" - "assoc_list",
"random" - "mercury_builtin",
"random" - "list",
"queue" - "mercury_builtin",
"queue" - "list",
"prolog" - "mercury_builtin",
"prolog" - "list",
"prolog" - "std_util",
"pqueue" - "mercury_builtin",
"pqueue" - "assoc_list",
"term_io" - "mercury_builtin",
"term_io" - "char",
"term_io" - "io",
"term_io" - "term",
"term_io" - "varset",
"parser" - "mercury_builtin",
"parser" - "io",
"parser" - "term_io",
"multi_map" - "mercury_builtin",
"multi_map" - "list",
"multi_map" - "assoc_list",
"multi_map" - "map",
"multi_map" - "set",
"math" - "mercury_builtin",
"tree234" - "mercury_builtin",
"tree234" - "list",
"tree234" - "assoc_list",
"library" - "mercury_builtin",
"lexer" - "mercury_builtin",
"lexer" - "char",
"lexer" - "io",
"ops" - "mercury_builtin",
"string" - "mercury_builtin",
"string" - "list",
"string" - "char",
"io" - "mercury_builtin",
"io" - "list",
"io" - "std_util",
"io" - "char",
"io" - "string",
"io" - "ops",
"group" - "mercury_builtin",
"group" - "list",
"group" - "assoc_list",
"group" - "set",
"graph" - "mercury_builtin",
"graph" - "list",
"graph" - "std_util",
"graph" - "set",
"getopt" - "mercury_builtin",
"getopt" - "list",
"getopt" - "std_util",
"getopt" - "map",
"getopt" - "bool",
"getopt" - "char",
"float" - "mercury_builtin",
"set" - "mercury_builtin",
"set" - "list",
"set" - "bool",
"eqvclass" - "mercury_builtin",
"eqvclass" - "list",
"eqvclass" - "set",
"dir" - "mercury_builtin",
"debugger_interface" - "mercury_builtin",
"char" - "mercury_builtin",
"int" - "mercury_builtin",
"bt_array" - "mercury_builtin",
"bt_array" - "list",
"bt_array" - "int",
"bool" - "mercury_builtin",
"bool" - "list",
"bintree_set" - "mercury_builtin",
"bintree_set" - "list",
"bintree" - "mercury_builtin",
"bintree" - "list",
"bintree" - "assoc_list",
"map" - "mercury_builtin",
"map" - "list",
"map" - "assoc_list",
"map" - "set",
"map" - "tree234",
"bimap" - "mercury_builtin",
"bimap" - "list",
"bimap" - "assoc_list",
"bimap" - "map",
"benchmarking" - "mercury_builtin",
"bag" - "mercury_builtin",
"bag" - "list",
"bag" - "assoc_list",
"assoc_list" - "mercury_builtin",
"assoc_list" - "list",
"assoc_list" - "std_util",
"std_util" - "mercury_builtin",
"std_util" - "list",
"std_util" - "set",
"list" - "mercury_builtin",
"list" - "int",
"mercury_builtin" - "mercury_builtin",
"array" - "mercury_builtin",
"array" - "list",
"array" - "std_util"]).

:- end_module rtc_bug.





More information about the developers mailing list