module admitting_and_shutting_out depends on unobstructing_and_obstructing sort declarations admit :: unobstruct shut_out :: obstruct function declarations fluents basic shut_out_of : tangible_entity * tangible_entity -> booleans is_inside : spatial_entity * spatial_entity -> booleans defined is_shut_out : tangible_entity -> booleans axioms is_shut_out(X) if shut_out_of(X, Y). is_obstructed(X) if is_shut_out(X). -is_obstructed(X) if -is_shut_out(X). false if instance(X, admit), object(X, O), -instance(X, tangible_entity). false if instance(X, admit), -defined_base(X). false if instance(X, admit), base(X, B), -instance(B, tangible_entity). false if instance(X, shut_out), object(X, O), -instance(X, tangible_entity). false if instance(X, shut_out), -defined_base(X). false if instance(X, shut_out), base(X, B), -instance(B, tangible_entity). occurs(X) causes -shut_out_of(O, B) if instance(X, admit), object(X, O), base(X, B). occurs(X) causes shut_out_of(O, B) if instance(X, shut_out), object(X, O), base(X, B). impossible occurs(X) if instance(X, admit), object(X, O), base(X, B), -is_inside(O, B). impossible occurs(X) if instance(X, admit), object(X, O), base(X, B), -shut_out_of(O, B). impossible occurs(X) if instance(X, shut_out), object(X, O), base(X, B), -is_inside(O, B). impossible occurs(X) if instance(X, shut_out), object(X, O), base(X, B), shut_out_of(O, B).