Minecraft wiki entry for block_predicate, associated text:  type: The type of the block predicate. One of all_of, any_of, has_sturdy_face, inside_world_bounds, matching_block_tag, matching_blocks, matching_fluids, not, replaceable, solid, true or would_survive.
If type is all_of or any_of:
 predicates: The child predicates. If used with all_of, all the childs need to pass. If used with any_of, at least one of the childs needs to pass.
If type is has_sturdy_face, inside_world_bounds, matching_block_tag, matching_blocks, matching_fluids, or would_survive:
 offset: (optional) A list of 3 integers specifying an [X, Y, Z] block position offset to check.
: Must be between -16 and 16 (inclusive).
If type is has_sturdy_face:
 direction: The direction of the block to check if it is sturdy. With sturdy is meant that the block needs to provide full solid support on that face.
If type is matching_block_tag:
 tag: The block tag to check.
If type is matching_blocks:
 blocks: The list of blocks that will match.
: A block ID
If type is matching_fluids:
 fluids: The list of fluids that will match.
: A fluid ID
If type is not:
 predicate: The block predicate to invert.
If type is would_survive:
 state: The block state to use when testing if it would survive in the current position.
Block state[show]