Ты не до конца понял смысл and. Он разграничивает выражения, в твоём случае это выглядит как (a > 0 | a) – интерпретатор не понимает что это относится к первому выражению и исполняет их по очереди сначала а > 0 а потом просто а. Надо явно объяснить интрпритатору a > 0 and a > a, and это как точка, как завершение и начало нового выражения, он не связывает а разграничивает.