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:
        for subitem in subtype:
            if item['name'] != subitem['name']:
                continue
            for key in (set(item.keys()) | set(subitem.keys())):
                if key in ('label', 'description'):
                    continue
                elif key == 'required':
                    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
