The assertion doesn’t check for ‘a’ after ‘b’ is high, hence it passes
Your intention “when z is high, then a becomes high and keeps high until b becomes high.” doesn’t mention it as well
Check this_link
Try using
property pr1;
@(posedge clk)
$rose(z) |-> ##1 $rose(a) ##0 a[->1] ##0 $rose(b) ##1 $fell(a);
endproperty