Solution
Push the num
variable to Slot #1
in the implementation contract
Dumb solution (but also works)
contract Implementationv2 { uint public num1; uint public num;
function setNum(uint _num) public { num = _num * 2; }}
Better solution
contract Implementationv2 { uint public num1; address public _owner;
function setNum(uint _num) public { num = _num * 2; }}