Representing and reasoning upon contexts in artificial systems