--* From postmaster%watson.vnet.ibm.com@yktvmv.watson.ibm.com Wed Nov 30 06:57:24 1994 --* Received: from yktvmv-ob.watson.ibm.com by asharp.watson.ibm.com (AIX 3.2/UCB 5.64/930311) --* id AA20281; Wed, 30 Nov 1994 06:57:24 -0500 --* Received: from watson.vnet.ibm.com by yktvmv.watson.ibm.com (IBM VM SMTP V2R3) --* with BSMTP id 3231; Wed, 30 Nov 94 06:57:29 EST --* Received: from YKTVMV by watson.vnet.ibm.com with "VAGENT.V1.0" --* id --* for asbugs@watson; Wed, 30 Nov 94 06:57:28 -0500 --* Received: from server1.rz.uni-leipzig.de by watson.ibm.com (IBM VM SMTP V2R3) --* with TCP; Wed, 30 Nov 94 06:25:26 EST --* Received: from aix550.informatik.uni-leipzig.de by server1.rz.uni-leipzig.de with SMTP --* (1.38.193.5/15.6) id AA17014; Wed, 30 Nov 1994 12:23:47 +0100 --* Received: by aix550.informatik.uni-leipzig.de (AIX 3.2/UCB 5.64/BelWue-1.1AIXRS) --* id AA15969; Wed, 30 Nov 1994 12:24:20 +0100 --* Date: Wed, 30 Nov 1994 12:24:20 +0100 --* From: graebe@aix550.informatik.uni-leipzig.de --* Message-Id: <9411301124.AA15969@aix550.informatik.uni-leipzig.de> --* To: asbugs@watson.ibm.com --* Subject: [3] Some domain is imported twice. --@ Fixed by: SSD Thu Dec 1 10:00:48 EST 1994 --@ Tested by: none --@ Summary: Type inference fixes now prevent the duplicate importing. -- Command line: asharp -Mno-abbrev bug1.as -- Version: A# version 0.36.5 for AIX RS/6000 -- Original bug file name: bug1.as --+ "bug1.as", line 72: reduce(+,[a.i * b.i for i in 1..varmax],0); --+ ........^......^.^.^..^.........................^ --+ [L72 C9] #1 (Error) There are 2 meanings for `reduce' in this context. --+ The possible types were: --+ reduce: ((Integer, Integer) -> Integer, List(Integer), Integer) -> Integer from List(Integer) --+ reduce: ((Integer, Integer) -> Integer, List(Integer), Integer) -> Integer from List(Integer) --+ The context requires an expression of type ((Integer, Integer) -> Integer, List(Integer), Integer) -> Integer. --+ [L72 C16] #2 (Error) There are 2 meanings for `+' in this context. --+ The possible types were: --+ +: (Integer, Integer) -> Integer from Integer --+ +: (Integer, Integer) -> Integer from Integer --+ The context requires an expression of type (Integer, Integer) -> Integer. --+ [L72 C18] #3 (Error) There are 2 meanings for `bracket' in this context. --+ The possible types were: --+ bracket: Generator(Integer) -> List(Integer) from List(Integer) --+ bracket: Generator(Integer) -> List(Integer) from List(Integer) --+ The context requires an expression of type Generator(Integer) -> List(Integer). --+ [L72 C20] #5 (Error) There are 2 meanings for `apply' in this context. --+ The possible types were: --+ apply: (List(Integer), SingleInteger) -> Integer from List(Integer) --+ apply: (List(Integer), SingleInteger) -> Integer from List(Integer) --+ The context requires an expression of type (List(Integer), SingleInteger) -> Integer. --+ [L72 C23] #4 (Error) There are 2 meanings for `*' in this context. --+ The possible types were: --+ *: (Integer, Integer) -> Integer from Integer --+ *: (Integer, Integer) -> Integer from Integer --+ The context requires an expression of type (Integer, Integer) -> Integer. --+ [L72 C49] #6 (Error) There are 2 meanings for `0' in this context. --+ The possible types were: --+ 0: Integer from Integer --+ 0: Integer from Integer --+ The context requires an expression of type Integer. --+ --+ "bug1.as", line 73: deglist(z:DP):L I == [mydot(i,z) for i in w]; --+ .........................^ --+ [L73 C26] #7 (Error) There are 2 meanings for `bracket' in this context. --+ The possible types were: --+ bracket: Generator(Integer) -> List(Integer) from List(Integer) --+ bracket: Generator(Integer) -> List(Integer) from List(Integer) --+ The context requires an expression of type Generator(Integer) -> List(Integer). --+ --+ "bug1.as", line 89: p << rep(v).mo << " <" << rep(v).deg << "> "; --+ ...............................^ --+ [L89 C32] #8 (Error) There are 2 meanings for `<<' in this context. --+ The possible types were: --+ <<: (TextWriter, List(Integer)) -> TextWriter from List(Integer) --+ <<: (TextWriter, List(Integer)) -> TextWriter from List(Integer) --+ The context requires an expression of type (TextWriter, List(Integer)) -> TextWriter. --+ #include "aslib.as" macro SetCategory == BasicType; macro SI == SingleInteger; define DirectProductCategory(S:AbelianGroup): Category == AbelianGroup with { vector: Tuple S -> %; apply: (%, SI) -> S; map: (S->S, %) -> %; map: ((S,S)->S, %,%) -> %; } DirectProduct(dim:SI,S:AbelianGroup): DirectProductCategory S == add { Rep ==> Array S; import from Rep; map(f:S-> S, v: %):% == { vv:Rep := new(dim,0); for i:SI in 1..dim repeat vv.i := f v.i; per vv; } map(f:(S,S) -> S, v1:%, v2:%): % == { vv:Rep := new(dim,0); for i:SI in 1..dim repeat vv.i := f(v1.i, v2.i); per vv } vector(ts : Tuple S): % == { w := new(dim,0); for i in 1..min(length ts,dim) repeat w.i := element(ts, i); per w } 0: % == per new(dim,0$S); (v1: %) = (v2: %): Boolean == rep(v1) = rep(v2); (v1: %) + (v2: %): % == map(+, v1, v2); (v1: %) - (v2: %): % == map(-, v1, v2); -(v: %): % == map(-,v); apply(v:%, s:SI):S == rep(v).s; (p: TextWriter) << (v: %): TextWriter == { dim=0 => p << "()"; p << "(" << v.1; for i in 2..dim repeat p << "," << v.i; p << ")" } } macro { L == List ; I == Integer; } DP ==> DirectProduct(varmax,I); MyExponents(varmax:SingleInteger,w:L L I,hom:L I): DirectProductCategory(I) with { ecart : % -> I; coerce : DP -> %; -- subtractIfCan : (%,%) -> Partial %; } == add { Rep ==> Record(mo:DP,deg:L I); import from Rep; -- local mydot(a:L I,b:DP):I == reduce(+,[a.i * b.i for i in 1..varmax],0); deglist(z:DP):L I == [mydot(i,z) for i in w]; -- exports ecart(e:%):I == mydot(hom,rep(e).mo); coerce(a:DP):% == per [a, deglist a]; (v1:%) - (v2:%):% == (rep(v1).mo-rep(v2).mo)::%; (v1:%) + (v2:%):% == (rep(v1).mo+rep(v2).mo)::%; (v1:%) = (v2:%):Boolean == rep(v1).mo=rep(v2).mo; sample:% == 0; -(v1:%):% == (-rep(v1).mo)::%; 0:% == (0$DP)::%; (p:TextWriter) << (v:%):TextWriter == { p << rep(v).mo << " <" << rep(v).deg << "> "; } apply(v:%,i:SI):I == rep(v).mo.i; map(f:(I,I) -> I,v1:%,v2:%):% == map(f,rep(v1).mo,rep(v2).mo)::%; map(f:I -> I,v:%):% == map(f,rep(v).mo)::%; vector(z:Tuple I):% == (vector(z)$DP)::%; }