Prove:
m=0 ==> inv
as follows: assume m=0, then:
        inv
    ==  0<= m <= #t  /\  (!n<m . ~(t[n].key = k) )
    ==  0<= 0 <= #t  /\  (!n<0 . ~(t[n].key = k) )
    ==  true  /\  true
    ==  true
        
Prove:
inv /\ ~G ==> setm
as follows:
inv /\ ~G
== inv /\ ~(m<#t /\ ~(t[m].key = k))
== inv /\ (m>=#t \/ t[m].key = k)
== inv /\ (m>=#t \/ (m<#t /\ t[m].key = k))
==>(inv /\ m>=#t)
\/ (m<#t /\ t[m].key = k) (*)
Now
        inv  /\  m>=#t
    ==  0<= m <= #t  /\  (!n<m . ~(t[n].key = k) )   /\  m>=#t
    ==  m = #t  /\  (!n<m . ~(t[n].key = k) )   
    ==  m = #t  /\  (!n<#t . ~(t[n].key = k) )   
    ==> m = #t  /\  ~(k in (dom (abs t)))   
so
        (*)
    ==>  (m = #t  /\  ~(k in (dom (abs t))))  \/  m<#t /\ t[m].key = k 
    ==   setm
      
Prove:
m<#t /\ ~(t[m].key = k) /\ inv ==> inv[m\m+1]
as follows:
| m<#t /\ ~(t[m].key = k) /\ inv | |
| == |  m<#t   /\  ~(t[m].key = k)  /\ 
 0<= m <= #t   /\  (!n<m . ~(t[n].key = k) )     
 | 
| ==> | 0<= m<
#t  /\   ~(t[m].key = k)  /\  (!n<m
. ~(t[n].key = k) )        | 
| ==> |  0<= m< #t   /\  (!n<m+1 . ~(t[n].key = k) )    
  | 
| ==> | 0<= m+1<= #t /\ (!n<m+1 . ~(t[n].key = k) ) | 
Prove:
m<#t ==> 0 <= #t-(m+1) < #t-m
as follows:
| m<#t | |
| ==> | 0 <= #t-(m+1) | 
| ==> | 0 <= #t-(m+1)  /\ 
 (#t-m)-1  < #t-m | 
| ==> | 0 <= #t-(m+1) /\ #t-(m+1) < #t-m |