module releasing_and_confining depends on unobstructing_and_obstructing sort declarations release :: unobstruct confine :: obstruct function declarations fluents basic is_confined : tangible_entity -> booleans confined_to : tangible_entity * tangible_entity -> booleans is_inside : spatial_entity * spatial_entity -> booleans axioms is_confined(X) if confined_to(X, Y). -confined_to(X, Y) if -is_confined(X). is_obstructed(X) if is_confined(X). -is_obstructed(X) if -is_confined(X). false if instance(X, release), object(X, O), -instance(X, tangible_entity). false if instance(X, release), -defined_base(X). false if instance(X, release), base(X, B), -instance(B, tangible_entity). false if instance(X, confine), object(X, O), -instance(X, tangible_entity). false if instance(X, confine), -defined_base(X). false if instance(X, confine), base(X, B), -instance(B, tangible_entity). occurs(X) causes -confined_to(O, B) if instance(X, release), object(X, O), base(X, B). occurs(X) causes -is_confined(O) if instance(X, release), object(X, O), -defined_base(X). occurs(X) causes confined_to(O, B) if instance(X, confine), object(X, O), base(X, B). occurs(X) causes is_confined(O) if instance(X, confine), object(X, O), -defined_base(X). impossible occurs(X) if instance(X, release), object(X, O), base(X, B), -is_inside(O, B). impossible occurs(X) if instance(X, release), object(X, O), base(X, B), -confined(O, B). impossible occurs(X) if instance(X, release), object(X, O), -defined_base(X), -is_confined(O). impossible occurs(X) if instance(X, confine), object(X, O), base(X, B), -is_inside(O, B). impossible occurs(X) if instance(X, confine), object(X, O), base(X, B), confined_to(O, B). impossible occurs(X) if instance(X, confine), object(X, O), -defined_base(X), is_confined(O).