<?php

// your code goes here

trait BoxedValue {
	private $boxed_value;
	public function __construct($value) { $this->boxed_value = $value; }
	public function value() { return $this->boxed_value; }
}

trait MyBool {
	abstract public function isTrue() : bool;
	public function isFalse() : bool { return !$this->isTrue(); }
}

trait Num {
	abstract public function plus($num);
	abstract public function negate($num);
	public function minus($num) { return $this->plus($num->negate()); }
}

class BoolNum {
	use BoxedValue, MyBool, Num;
	
	public function isTrue() : bool {
		return $this->value() != 0;	
	}
	
	public function plus($num) {
		return new BoolNum($this->value() + $num->value());
	}
	
	public function negate() {
		return new BoolNum(- $this->value());
	}

}

$a = new BoolNum(-5);
$b = new BoolNum(10);
$c = new BoolNum(0);


var_dump($a->isTrue());
var_dump($b->isFalse());
var_dump($c->isTrue());
var_dump($c->isFalse());


var_dump($a->plus($b));
var_dump($a->minus($b));
