The floor, once wet, remains wet.
Axiomatize how the floor can be wet in different situations. You can define whatever predicates you may need.
The tricky thing here is thinking about how the world works; what has to be true before and after the action. For example, the way the problem is stated, the bath fills if it is plugged and water is flowing in.
empty(bath,S) <- unplugged(bath,S). empty(bath,do(A,S)) <- poss(A,S) & empty(sink,S) & noflow(shower,do(A,S)). halffull(bath,do(A,S)) <- poss(A,S) & halffull(bath,S) & plugged(bath,do(A,S)) & noflow(shower,do(A,S)). halffull(bath,do(A,S)) <- poss(A,S) & plugged(bath,do(A,S)) & empty(bath,S) & flow(shower,do(A,S)). full(bath,do(A,S)) <- poss(A,S) & plugged(bath,do(A,S)) & full(bath,S). full(bath,do(A,S)) <- poss(A,S) & plugged(bath,do(A,S)) & halffull(bath,S) & flow(shower,do(A,S)). overflow(bath,do(A,S)) <- poss(A,S) & flow(shower,do(A,S)) & full(bath,S). empty(sink,S) <- unplugged(sink,S). empty(sink,do(A,S)) <- poss(A,S) & empty(sink,S) & noflow(sink,do(A,S)). full(sink,do(A,S)) <- poss(A,S) & plugged(sink,do(A,S)) & empty(sink,S) & flow(sink,do(A,S)). full(sink,do(A,S)) <- poss(A,S) & plugged(sink,do(A,S)) & full(sink,S). overflow(sink,do(A,S)) <- poss(A,S) & flow(sink,do(A,S)) & full(sink,S). wet(floor,S) <- overflow(bath,S). wet(floor,S) <- overflow(sink,S). wet(floor,do(A,S)) <- wet(floor,S) & poss(A,S).