Ejemplo n.º 1
0
        internal override bool match(ATerm pattern, ArrayList list)
        {
            if (this.equals(pattern))
            {
                return(true);
            }

            if (pattern.getType() == ATermType.PLACEHOLDER)
            {
                ATerm type = ((ATermPlaceholder)pattern).getPlaceholder();
                if (type.getType() == ATermType.APPL)
                {
                    ATermAppl appl = (ATermAppl)type;
                    AFun      afun = appl.getAFun();
                    if (afun.getName().Equals("blob") &&
                        afun.getArity() == 0 &&
                        !afun.isQuoted())
                    {
                        list.Add(data);
                        return(true);
                    }
                }
            }
            return(base.match(pattern, list));
        }
Ejemplo n.º 2
0
/*		public final static void main(String[] args) 
					 {
						 TestFib t = new TestFib(new PureFactory());

						 t.test1();
						 t.test2();
						 t.test3(15);
					 }
*/
		public TestFib(ATermFactory factory) 
		{
			this.factory = factory;

			zero = factory.makeAFun("zero", 0, false);
			suc = factory.makeAFun("suc", 1, false);
			plus = factory.makeAFun("plus", 2, false);
			fib = factory.makeAFun("fib", 1, false);
			tzero = factory.makeAppl(zero);
		}
Ejemplo n.º 3
0
/*		public final static void main(String[] args)
 *                                       {
 *                                               TestFib t = new TestFib(new PureFactory());
 *
 *                                               t.test1();
 *                                               t.test2();
 *                                               t.test3(15);
 *                                       }
 */
        public TestFib(ATermFactory factory)
        {
            this.factory = factory;

            zero  = factory.makeAFun("zero", 0, false);
            suc   = factory.makeAFun("suc", 1, false);
            plus  = factory.makeAFun("plus", 2, false);
            fib   = factory.makeAFun("fib", 1, false);
            tzero = factory.makeAppl(zero);
        }
Ejemplo n.º 4
0
        public virtual void TestFib3(int n)
        {
            ATermAppl N = tzero;

            for (int i = 0; i < n; i++)
            {
                N = factory.makeAppl(suc, N);
            }
            normalizeFib(factory.makeAppl(fib, N));
        }
Ejemplo n.º 5
0
        internal override bool match(ATerm pattern, ArrayList list)
        {
            if (pattern.getType() == ATermType.APPL)
            {
                ATermAppl appl = (ATermAppl)pattern;
                if (fun.equals(appl.getAFun()))
                {
                    return(matchArguments(appl.getArgumentArray(), list));
                }
                else
                {
                    return(false);
                }
            }

            if (pattern.getType() == ATermType.PLACEHOLDER)
            {
                ATerm type = ((ATermPlaceholder)pattern).getPlaceholder();
                if (type.getType() == ATermType.APPL)
                {
                    ATermAppl appl = (ATermAppl)type;
                    AFun      afun = appl.getAFun();
                    if (afun.getName().Equals("appl") && !afun.isQuoted())
                    {
                        list.Add(fun.getName());
                        return(matchArguments(appl.getArgumentArray(), list));
                    }
                    else if (afun.getName().Equals("str") && !afun.isQuoted())
                    {
                        if (fun.isQuoted())
                        {
                            list.Add(fun.getName());
                            return(matchArguments(appl.getArgumentArray(), list));
                        }
                    }
                    else if (afun.getName().Equals("fun") && !afun.isQuoted())
                    {
                        if (!fun.isQuoted())
                        {
                            list.Add(fun.getName());
                            return(matchArguments(appl.getArgumentArray(), list));
                        }
                    }
                    else if (afun.getName().Equals("id") && !afun.isQuoted())
                    {
                        if (!fun.isQuoted())
                        {
                            list.Add(fun.getName());
                            return(matchArguments(appl.getArgumentArray(), list));
                        }
                    }
                }
            }
            return(base.match(pattern, list));
        }
Ejemplo n.º 6
0
/*
 *      public final static void main(String[] args)
 *                                       {
 *                                               TestFibInterpreted t = new TestFibInterpreted(new PureFactory());
 *
 *                                               t.initRules();
 *                                               t.test1(5);
 *                                       }
 */

        public TestFibInterpreted(ATermFactory factory)
        {
            this.factory = factory;

            zero  = factory.makeAFun("zero", 0, false);
            suc   = factory.makeAFun("suc", 1, false);
            plus  = factory.makeAFun("plus", 2, false);
            fib   = factory.makeAFun("fib", 1, false);
            tzero = factory.makeAppl(zero);
            fail  = factory.parse("fail");
        }
Ejemplo n.º 7
0
/*
 * 		public final static void main(String[] args) 
					 {
						 TestFibInterpreted t = new TestFibInterpreted(new PureFactory());

						 t.initRules();
						 t.test1(5);
					 }
*/

		public TestFibInterpreted(ATermFactory factory) 
		{
			this.factory = factory;

			zero = factory.makeAFun("zero", 0, false);
			suc = factory.makeAFun("suc", 1, false);
			plus = factory.makeAFun("plus", 2, false);
			fib = factory.makeAFun("fib", 1, false);
			tzero = factory.makeAppl(zero);
			fail = factory.parse("fail");
		}
Ejemplo n.º 8
0
		protected override void SetUp()
		{
			base.SetUp();
			factory = Tester.theFactory;

			zero = factory.makeAFun("zero", 0, false);
			suc = factory.makeAFun("suc", 1, false);
			plus = factory.makeAFun("plus", 2, false);
			fib = factory.makeAFun("fib", 1, false);
			tzero = factory.makeAppl(zero);
			fail = factory.parse("fail");
		}
Ejemplo n.º 9
0
        protected override void SetUp()
        {
            base.SetUp();
            factory = Tester.theFactory;

            zero  = factory.makeAFun("zero", 0, false);
            suc   = factory.makeAFun("suc", 1, false);
            plus  = factory.makeAFun("plus", 2, false);
            fib   = factory.makeAFun("fib", 1, false);
            tzero = factory.makeAppl(zero);
            fail  = factory.parse("fail");
        }
Ejemplo n.º 10
0
        public void test1(int n)
        {
            ATermAppl N = tzero;

            for (int i = 0; i < n; i++)
            {
                N = factory.makeAppl(suc, N);
            }
            ATerm tfib = factory.makeAppl(fib, N);

            normalize(tfib);
        }
Ejemplo n.º 11
0
        internal override bool match(ATerm pattern, ArrayList list)
        {
            if (pattern.getType() == ATermType.LIST)
            {
                ATermList l = (ATermList)pattern;

                if (l.isEmpty())
                {
                    return(this.isEmpty());
                }

                if (l.getFirst().getType() == ATermType.PLACEHOLDER)
                {
                    ATerm ph_type = ((ATermPlaceholder)l.getFirst()).getPlaceholder();
                    if (ph_type.getType() == ATermType.APPL)
                    {
                        ATermAppl appl = (ATermAppl)ph_type;
                        if (appl.getName().Equals("list") && appl.getArguments().isEmpty())
                        {
                            list.Add(this);
                            return(true);
                        }
                    }
                }

                if (!isEmpty())
                {
                    ArrayList submatches = first.match(l.getFirst());
                    if (submatches == null)
                    {
                        return(false);
                    }

                    list.AddRange(submatches);

                    submatches = next.match(l.getNext());

                    if (submatches == null)
                    {
                        return(false);
                    }

                    list.AddRange(submatches);
                    return(true);
                }
                else
                {
                    return(l.isEmpty());
                }
            }

            return(base.match(pattern, list));
        }
Ejemplo n.º 12
0
        public virtual void TestFibInterpreted(int n)
        {
            initRules();
            ATermAppl N = tzero;

            for (int i = 0; i < n; i++)
            {
                N = factory.makeAppl(suc, N);
            }
            ATerm tfib = factory.makeAppl(fib, N);

            normalize(tfib);
        }
Ejemplo n.º 13
0
        public virtual void testMakeAppl()
        {
            factory = Tester.theFactory;

            AFun[]      symmies = new AFun[4];
            ATermAppl[] apples  = new ATermAppl[16];

            symmies[0] = factory.makeAFun("f0", 0, false);
            symmies[1] = factory.makeAFun("f1", 1, false);
            symmies[2] = factory.makeAFun("f6", 6, false);
            symmies[3] = factory.makeAFun("f10", 10, false);

            apples[0] = factory.makeAppl(symmies[0]);
            apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
            apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]);
            apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
            apples[4] = factory.makeAppl(symmies[2], new ATerm[] { (ATerm)apples[0],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1] });
            apples[5] = factory.makeAppl(symmies[3], new ATerm[] { (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1] });
            apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0);
            ATerm[] args = { apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1] };
            apples[7] = factory.makeAppl(symmies[3], args);

            AssertTrue(factory.makeAppl(symmies[0]) == apples[0]);
            AssertTrue(factory.makeAppl(symmies[1], (ATerm)apples[0]) == apples[1]);

            AssertTrue(apples[6].isEqual(apples[1]));
            AssertTrue(apples[1].isEqual(apples[3]));
            AssertTrue(!apples[2].isEqual(apples[1]));
            AssertTrue(!apples[2].isEqual(apples[6]));
            AssertTrue(!apples[1].isEqual(apples[2]));
            AssertTrue(!apples[2].isEqual(apples[3]));
            AssertTrue(!apples[0].isEqual(apples[1]));

            //			Console.Out.WriteLine("pass: testMakeAppl");
        }
Ejemplo n.º 14
0
		public virtual void testMakeAppl() 
		{
			factory = Tester.theFactory;

			AFun[] symmies = new AFun[4];
			ATermAppl[] apples = new ATermAppl[16];

			symmies[0] = factory.makeAFun("f0", 0, false);
			symmies[1] = factory.makeAFun("f1", 1, false);
			symmies[2] = factory.makeAFun("f6", 6, false);
			symmies[3] = factory.makeAFun("f10", 10, false);

			apples[0] = factory.makeAppl(symmies[0]);
			apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
			apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]);
			apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
			apples[4] = factory.makeAppl(symmies[2], new ATerm[] {(ATerm)apples[0],
																	 (ATerm)apples[0], 
																	 (ATerm)apples[1],
																	 (ATerm)apples[0], 
																	 (ATerm)apples[0],
																	 (ATerm)apples[1]});
			apples[5] = factory.makeAppl(symmies[3], new ATerm[] {(ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1]});
			apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0);
			ATerm[] args = { apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1] };
			apples[7] = factory.makeAppl(symmies[3], args);

			AssertTrue(factory.makeAppl(symmies[0]) == apples[0]);
			AssertTrue(factory.makeAppl(symmies[1], (ATerm) apples[0]) == apples[1]);

			AssertTrue(apples[6].isEqual(apples[1]));
			AssertTrue(apples[1].isEqual(apples[3]));
			AssertTrue(!apples[2].isEqual(apples[1]));
			AssertTrue(!apples[2].isEqual(apples[6]));
			AssertTrue(!apples[1].isEqual(apples[2]));
			AssertTrue(!apples[2].isEqual(apples[3]));
			AssertTrue(!apples[0].isEqual(apples[1]));

			//			Console.Out.WriteLine("pass: testMakeAppl");
		}
Ejemplo n.º 15
0
 private bool isListPlaceHolder(ATerm pattern)
 {
     if (pattern.getType() == ATermType.PLACEHOLDER)
     {
         ATerm type = ((ATermPlaceholder)pattern).getPlaceholder();
         if (type.getType() == ATermType.APPL)
         {
             ATermAppl appl = (ATermAppl)type;
             AFun      afun = appl.getAFun();
             if (afun.getName().Equals("list") && afun.getArity() == 0 && !afun.isQuoted())
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 16
0
 internal virtual bool match(ATerm pattern, ArrayList list)
 {
     if (pattern.getType() == ATermType.PLACEHOLDER)
     {
         ATerm type = ((ATermPlaceholder)pattern).getPlaceholder();
         if (type.getType() == ATermType.APPL)
         {
             ATermAppl appl = (ATermAppl)type;
             AFun      afun = appl.getAFun();
             if (afun.getName().Equals("term") && afun.getArity() == 0 && !afun.isQuoted())
             {
                 list.Add(this);
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 17
0
 public override bool equivalent(SharedObject obj)
 {
     if (base.equivalent(obj))
     {
         ATermAppl peer = (ATermAppl)obj;
         if (peer.getAFun().equals(fun))
         {
             for (int i = 0; i < args.Length; i++)
             {
                 if (!peer.getArgument(i).equals(args[i]))
                 {
                     return(false);
                 }
             }
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 18
0
        public virtual ATermAppl normalizeFib(ATermAppl t)
        {
            ATermAppl res = t;

            while (true)
            {
                // fib(0) = suc(0)
                ATermAppl v0 = (ATermAppl)res.getArgument(0);
                if (v0.getAFun() == zero)
                {
                    res = factory.makeAppl(suc, v0);
                    break;
                }
                // fib(suc(0)) => suc(0)
                if (v0.getAFun() == suc)
                {
                    ATermAppl v1 = (ATermAppl)v0.getArgument(0);
                    if (v1.getAFun() == zero)
                    {
                        res = v0;
                        break;
                    }
                }
                //  fib(s(s(x))) => plus(fib(x),fib(s(x)))
                //     v0 v1
                if (v0.getAFun() == suc)
                {
                    ATermAppl v1 = (ATermAppl)v0.getArgument(0);
                    if (v1.getAFun() == suc)
                    {
                        ATermAppl v2   = (ATermAppl)v1.getArgument(0);
                        ATermAppl fib1 = normalizeFib(factory.makeAppl(fib, v2));
                        ATermAppl fib2 = normalizeFib(factory.makeAppl(fib, v1));
                        //System.out.println("adding");
                        res = normalizePlus(factory.makeAppl(plus, fib1, fib2));
                        break;
                    }
                }
                break;
            }
            return(res);
        }
Ejemplo n.º 19
0
        public void testMakeAppl()
        {
            AFun[]      symmies = new AFun[4];
            ATermAppl[] apples  = new ATermAppl[16];

            symmies[0] = factory.makeAFun("f0", 0, false);
            symmies[1] = factory.makeAFun("f1", 1, false);
            symmies[2] = factory.makeAFun("f6", 6, false);
            symmies[3] = factory.makeAFun("f10", 10, false);

            apples[0] = factory.makeAppl(symmies[0]);
            apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
            apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]);
            apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
            apples[4] = factory.makeAppl(symmies[2], new ATerm[] { (ATerm)apples[0],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1] });
            apples[5] = factory.makeAppl(symmies[3], new ATerm[] { (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1],
                                                                   (ATerm)apples[0],
                                                                   (ATerm)apples[1] });
            apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0);

            assertTrue(apples[6].isEqual(apples[1]));
            assertTrue(apples[1].isEqual(apples[3]));
            assertTrue(!apples[2].isEqual(apples[1]));
            assertTrue(!apples[2].isEqual(apples[6]));
            assertTrue(!apples[1].isEqual(apples[2]));
            assertTrue(!apples[2].isEqual(apples[3]));
            assertTrue(!apples[0].isEqual(apples[1]));

            Console.Out.WriteLine("pass: testMakeAppl");
        }
Ejemplo n.º 20
0
        internal virtual bool matchArguments(ATerm[] pattern_args, ArrayList list)
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (i >= pattern_args.Length)
                {
                    return(false);
                }

                ATerm arg         = args[i];
                ATerm pattern_arg = pattern_args[i];

                if (pattern_arg.getType() == ATermType.PLACEHOLDER)
                {
                    ATerm ph_type = ((ATermPlaceholder)pattern_arg).getPlaceholder();
                    if (ph_type.getType() == ATermType.APPL)
                    {
                        ATermAppl appl = (ATermAppl)ph_type;
                        if (appl.getName().Equals("list") && appl.getArguments().isEmpty())
                        {
                            ATermList result = ((PureFactory)getFactory()).getEmpty();
                            for (int j = args.Length - 1; j >= i; j--)
                            {
                                result = result.insert(args[j]);
                            }
                            list.Add(result);
                            return(true);
                        }
                    }
                }

                ArrayList submatches = arg.match(pattern_arg);
                if (submatches == null)
                {
                    return(false);
                }
                list.AddRange(submatches);
            }

            return(args.Length == pattern_args.Length);
        }
Ejemplo n.º 21
0
        public override void visitAppl(ATermAppl appl)         // throws VisitFailure
        {
            AFun   fun  = appl.getAFun();
            string name = fun.ToString();

            stream.Write(name);
            position += name.Length;
            if (fun.getArity() > 0 || name.Equals(""))
            {
                stream.Write('(');
                position++;
                for (int i = 0; i < fun.getArity(); i++)
                {
                    if (i != 0)
                    {
                        stream.Write(',');
                        position++;
                    }
                    visitChild(appl.getArgument(i));
                }
                stream.Write(')');
                position++;
            }
        }
Ejemplo n.º 22
0
 public virtual void visitAppl(ATermAppl arg)         // throws VisitFailure
 {
     visitATerm(arg);
 }
Ejemplo n.º 23
0
		public override void visitAppl(ATermAppl a ) {}
Ejemplo n.º 24
0
		public virtual void visitAppl(ATermAppl arg) // throws VisitFailure 
		{
			visitATerm(arg);
		}
Ejemplo n.º 25
0
		public void testMakeAppl() 
		{
			AFun[] symmies = new AFun[4];
				ATermAppl[] apples = new ATermAppl[16];

					symmies[0] = factory.makeAFun("f0", 0, false);
			symmies[1] = factory.makeAFun("f1", 1, false);
			symmies[2] = factory.makeAFun("f6", 6, false);
			symmies[3] = factory.makeAFun("f10", 10, false);

			apples[0] = factory.makeAppl(symmies[0]);
			apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
			apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]);
			apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]);
			apples[4] = factory.makeAppl(symmies[2], new ATerm[] {(ATerm)apples[0],
																	 (ATerm)apples[0], 
																	 (ATerm)apples[1],
																	 (ATerm)apples[0], 
																	 (ATerm)apples[0],
																	 (ATerm)apples[1]});
			apples[5] = factory.makeAppl(symmies[3], new ATerm[] {(ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1],
																	 (ATerm)apples[0],
																	 (ATerm)apples[1]});
			apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0);

			assertTrue(apples[6].isEqual(apples[1]));
			assertTrue(apples[1].isEqual(apples[3]));
			assertTrue(!apples[2].isEqual(apples[1]));
			assertTrue(!apples[2].isEqual(apples[6]));
			assertTrue(!apples[1].isEqual(apples[2]));
			assertTrue(!apples[2].isEqual(apples[3]));
			assertTrue(!apples[0].isEqual(apples[1]));

			Console.Out.WriteLine("pass: testMakeAppl");
		}
Ejemplo n.º 26
0
 public override void visitAppl(ATermAppl a)
 {
 }
Ejemplo n.º 27
0
		public ATermAppl normalizePlus(ATermAppl t) 
		{
			ATermAppl res = t;
			while (true) 
			{
				ATermAppl v0 = (ATermAppl) res.getArgument(0);

				// plus(s(s(s(s(s(x))))),y) => plus(x,s(s(s(s(s(y))))))
				if (v0.getAFun() == suc) 
				{
					ATermAppl v1 = (ATermAppl) v0.getArgument(0);
					if (v1.getAFun() == suc) 
					{
						ATermAppl v2 = (ATermAppl) v1.getArgument(0);
						if (v2.getAFun() == suc) 
						{
							ATermAppl v3 = (ATermAppl) v2.getArgument(0);
							if (v3.getAFun() == suc) 
							{
								ATermAppl v4 = (ATermAppl) v3.getArgument(0);
								if (v4.getAFun() == suc) 
								{
									res =
										factory.makeAppl(
										plus,
										v4.getArgument(0),
										factory.makeAppl(
										suc,
										factory.makeAppl(
										suc,
										factory.makeAppl(
										suc,
										factory.makeAppl(
										suc,
										factory.makeAppl(
										suc,
										res.getArgument(1)))))));
									continue;
								}
							}
						}
					}
				}

				// plus(0,x) = x
				if (v0.getAFun() == zero) 
				{
					res = (ATermAppl) res.getArgument(1);
					break;
				}

				// plus(s(x),y) => plus(x,s(y))
				if (v0.getAFun() == suc) 
				{
					res =
						factory.makeAppl(
						plus,
						v0.getArgument(0),
						factory.makeAppl(suc, res.getArgument(1)));
					continue;
				}
				break;
			}
			return res;
		}
Ejemplo n.º 28
0
		public ATermAppl normalizeFib(ATermAppl t) 
		{

			ATermAppl res = t;
			while (true) 
			{
				// fib(0) = suc(0)
				ATermAppl v0 = (ATermAppl) res.getArgument(0);
				if (v0.getAFun() == zero) 
				{
					res = factory.makeAppl(suc, v0);
					break;
				}
				// fib(suc(0)) => suc(0)
				if (v0.getAFun() == suc) 
				{
					ATermAppl v1 = (ATermAppl) v0.getArgument(0);
					if (v1.getAFun() == zero) 
					{
						res = v0;
						break;
					}
				}
				//  fib(s(s(x))) => plus(fib(x),fib(s(x)))
				//     v0 v1
				if (v0.getAFun() == suc) 
				{
					ATermAppl v1 = (ATermAppl) v0.getArgument(0);
					if (v1.getAFun() == suc) 
					{
						ATermAppl v2 = (ATermAppl) v1.getArgument(0);
						ATermAppl fib1 = normalizeFib(factory.makeAppl(fib, v2));
						ATermAppl fib2 = normalizeFib(factory.makeAppl(fib, v1));
						//System.out.println("adding");
						res = normalizePlus(factory.makeAppl(plus, fib1, fib2));
						break;
					}
				}
				break;
			}
			return res;
		}
Ejemplo n.º 29
0
		public override void visitAppl(ATermAppl appl) // throws VisitFailure 
		{
			AFun fun = appl.getAFun();
			string name = fun.ToString();
			stream.Write(name);
			position += name.Length;
			if (fun.getArity() > 0 || name.Equals("")) 
			{
				stream.Write('(');
				position++;
				for (int i = 0; i < fun.getArity(); i++) 
				{
					if (i != 0) 
					{
						stream.Write(',');
						position++;
					}
					visitChild(appl.getArgument(i));
				}
				stream.Write(')');
				position++;
			}
		}
Ejemplo n.º 30
0
        public virtual ATermAppl normalizePlus(ATermAppl t)
        {
            ATermAppl res = t;

            while (true)
            {
                ATermAppl v0 = (ATermAppl)res.getArgument(0);

                // plus(s(s(s(s(s(x))))),y) => plus(x,s(s(s(s(s(y))))))
                if (v0.getAFun() == suc)
                {
                    ATermAppl v1 = (ATermAppl)v0.getArgument(0);
                    if (v1.getAFun() == suc)
                    {
                        ATermAppl v2 = (ATermAppl)v1.getArgument(0);
                        if (v2.getAFun() == suc)
                        {
                            ATermAppl v3 = (ATermAppl)v2.getArgument(0);
                            if (v3.getAFun() == suc)
                            {
                                ATermAppl v4 = (ATermAppl)v3.getArgument(0);
                                if (v4.getAFun() == suc)
                                {
                                    res =
                                        factory.makeAppl(
                                            plus,
                                            v4.getArgument(0),
                                            factory.makeAppl(
                                                suc,
                                                factory.makeAppl(
                                                    suc,
                                                    factory.makeAppl(
                                                        suc,
                                                        factory.makeAppl(
                                                            suc,
                                                            factory.makeAppl(
                                                                suc,
                                                                res.getArgument(1)))))));
                                    continue;
                                }
                            }
                        }
                    }
                }

                // plus(0,x) = x
                if (v0.getAFun() == zero)
                {
                    res = (ATermAppl)res.getArgument(1);
                    break;
                }

                // plus(s(x),y) => plus(x,s(y))
                if (v0.getAFun() == suc)
                {
                    res =
                        factory.makeAppl(
                            plus,
                            v0.getArgument(0),
                            factory.makeAppl(suc, res.getArgument(1)));
                    continue;
                }
                break;
            }
            return(res);
        }