In reply to megamind:
b[=m] // is equivalent to
( b [->m] ##1 !b [*0:$] ) // Thus,
b[=1] //is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$]
b[=2] // is equivalent to:
!b[*0:$] ##1 b ##1 !b[*0:$] ##1 b ##1 !b[*0:$]
//--------------
a[=3] ##1 b; //3 non consecutive/consecutive a and then b anytime after last a
// [Ben] Not quite true
a[=3] ##1 b; //3 non consecutive/consecutive a and then !a until b
// Between the last "a" and "b" a==0
//
// [quote]If above understanding is correct , then can we use ##5 instead of ##1 in the first case?
// [Ben] Using a repeat of 2 for simplicity
a[=2] ##5 b; // is same as
!a[*0:$] ##1 a ##1 !a[*0:$] ##1 a ##1 !a[*0:$] (##5 b)
// Between the last a and the b there could be 5 cycles where a==1
// Consider this sequence
a 0 0 1 0 1 0 1 1 1 1 1 // 2 non-consecutive "a"s followed by the sequence (##5 b)
b 0 0 0 0 0 0 (0 0 0 0 1) // While (##5 b) "a" can have any value.
b 0 0 0 0 0 0 (X X X X 1) // While (##5 b) "b" can be x .
b 0 0 0 0 0 (X X X X 1) // While (##5 b) "b" can be x .
// [quote] if we use ##1 then b should happen just after a clock cycle
// and not anytime after a,
// basically what is the use of ##1 in the first case where b don't care about it
// [Ben] Not true on the statement "b should happen just after a clock cycle"
// TRUE for "b can happen just after a clock cycle, but if it happen later, then a==0 until b==1"