def validate_process_subtype(supertype_name, supertype, subtype_name, subtype):
    """Perform process subtype validation.

    :param supertype_name: Supertype name
    :param supertype: Supertype schema
    :param subtype_name: Subtype name
    :param subtype: Subtype schema
    :return: A list of validation error strings
    """
    errors = []
    for item in supertype:
        # Ensure that the item exists in subtype and has the same schema.
        for subitem in subtype:
            if item["name"] != subitem["name"]:
                continue

            for key in set(item.keys()) | set(subitem.keys()):
                if key in ("label", "description"):
                    # Label and description can differ.
                    continue
                elif key == "required":
                    # A non-required item can be made required in subtype, but not the
                    # other way around.
                    item_required = item.get("required", True)
                    subitem_required = subitem.get("required", False)

                    if item_required and not subitem_required:
                        errors.append(
                            "Field '{}' is marked as required in '{}' and optional in '{}'.".format(
                                item["name"], supertype_name, subtype_name
                            )
                        )
                elif item.get(key, None) != subitem.get(key, None):
                    errors.append(
                        "Schema for field '{}' in type '{}' does not match supertype '{}'.".format(
                            item["name"], subtype_name, supertype_name
                        )
                    )

            break
        else:
            errors.append(
                "Schema for type '{}' is missing supertype '{}' field '{}'.".format(
                    subtype_name, supertype_name, item["name"]
                )
            )

    return errors