types
	Queue, Integer, Boolean

var
	q, x:xq : Queue;
	i 	: Integer;

operations
	empty 	: --> Queue
	add 	: Queue x Integer --> Queue
	front 	: Queue --> Integer
	remove 	: Queue --> Queue
	isEmpty : Queue --> Boolean
	
preconditions
	pre-remove(q)       = not isEmpty(q)
	pre-front(q) 	    = not isEmpty(q)	

axioms
	isEmpty(empty())    = true
	isEmpty(add(q,i))   = false
	remove(add(x:xq,i)) = xq:i
	front(add(x:xq,i))  = x	