# Regla principal
LEVEL = B_START + LEVEL_MIDDLE + B_END

# Bloques atomicos
B_START = "block_start"
B_END = "block_end"
B_ASCENDANT = ["block_ascendant1" | "block_ascendant2"]
B_DESCENDANT = ["block_descendant1" | "block_descendant2"]
B_CONSTANT = ["block_constant1" | "block_constant2"]
B_LAKE_DOWN = "block_lake_down"
B_LAKE = "block_lake"
B_LAKE_UP = "block_lake_up"

# Reglas secundarias
LEVEL_MIDDLE = M_HEIGHT_CHANGE + M_HEIGHT_CONSERVE + M_HEIGHT_CHANGE

M_HEIGHT_CHANGE = [M_UP | M_DOWN]
M_HEIGHT_CONSERVE = [B_CONSTANT | M_HEIGHT_CONSERVE + B_CONSTANT | M_LAKE]
M_LAKE_ = B_LAKE_DOWN + B_LAKE + B_LAKE_UP

M_UP = [M_UP + B_ASCENDANT | B_ASCENDANT | B_ASCENDANT + B_CONSTANT]
M_DOWN = [M_DOWN + B_DESCENDANT | B_DESCENDANT | B_DESCENDANT + B_CONSTANT]


