class B{ boolean b; B(boolean a){ b = a; } boolean toBool(){ return b; } B and(B a){ return new B(b && a.toBool()); } B or(B a){ return new B(if(b) then true else if(a.toBool()) then true else false); } B not(){ return new B(if(b) then false else true); } } class I{ int i; I(int j){ i = j; } int toInt(){ return i; } I incr(){ return this.add(new I(1)); } I add(I j){ return new I(i+j.toInt()); } B less(I j){ return new B(i < j.toInt()); } B equal(I j){ return new B(if (i < j.toInt()) then false else if(j.toInt() < i) then false else true); } } class F{ F(){ } int fact(int i){ return if (i < 2) then 1 else i * this.fact(i + -1); } } //((((new I(5).add(new I(14))).sub(new I(6))).less(new I(15))).not()).toBool() //((new I(4).equal(new I(4).incr())).or(new I(14).less(new I(13).incr()))).toBool() new F().fact(7)