Slide 80
Slide 80 text
࣍ VeriFast ֓આ VeriFast ೖ جຊ෦ͷఆٛ ओఆཧͷূ໌ ࢀর
͜Ε·Ͱఆ͖ٛͯͨؔ͠ΛΈ߹Θ࣮ͤͯͰ͖Δɻ
remove_lst ͷ࣮
struct list_list_t *
remove_lst (struct list_list_t * lst , int i, int j)
/*@ requires list_list_p(lst , ?lst0)
&*& 0 <= i &*& i < length(lst0)
&*& 0 <= j &*& j < length(nth(i,lst0 )); @*/
/*@ ensures list_list_p(lst , lst0)
&*& list_list_p(result , ?lst1)
&*& remove_lst_p(lst0 , i, j) == some(lst1 ); @*/
{ //@ open list_list_p(lst , lst0 );
if (i == 0) {
list_t * rst = remove(lst ->list , j);
list_list_t * next = dup_list_list_t (lst ->next );
return cons_list(rst , next );
} else {
list_list_t * rest = remove_lst(lst ->next , i-1, j);
return cons_list(dup_list_t(lst ->list), rest );
}
}
2016/11/19 VeriFast Introduction 62 / 77