Setting min_samples_split=1 in DecisionTreeClassifier does not raise exception

### Describe the bug

If `min_samples_split` is set to 1, an exception should be raised according to the paramter's constraints:

https://github.com/scikit-learn/scikit-learn/blob/e2e705021eb6c9f23f0972f119b56e37cd7567ef/sklearn/tree/_classes.py#L100-L103

However, `DecisionTreeClassifier` accepts `min_samples_split=1` without complaining.

With scikit-survival 1.0, this raises an exception as expected:
```
ValueError: min_samples_split == 1, must be >= 2.
```

I suspect that this has to do with the Intervals of the constraints overlapping. `min_samples_split=1` satisfies the `Real` constraint, whereas the `Integral` constraint should have precedence.

### Steps/Code to Reproduce

```python
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
t = DecisionTreeClassifier(min_samples_split=1)
t.fit(X, y)
```

### Expected Results

```
sklearn.utils._param_validation.InvalidParameterError: The 'min_samples_split' parameter of DecisionTreeClassifier must be an int in the range [2, inf) or a float in the range (0.0, 1.0]. Got 1 instead.
```

### Actual Results

No exception is raised.

### Versions

```shell
System:
    python: 3.10.8 | packaged by conda-forge | (main, Nov 22 2022, 08:26:04) [GCC 10.4.0]
executable: /…/bin/python
   machine: Linux-6.1.6-100.fc36.x86_64-x86_64-with-glibc2.35

Python dependencies:
      sklearn: 1.3.dev0
          pip: 22.2.2
   setuptools: 63.2.0
        numpy: 1.24.1
        scipy: 1.10.0
       Cython: None
       pandas: None
   matplotlib: None
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
         prefix: libgomp
       filepath: /…/lib/libgomp.so.1.0.0
        version: None
    num_threads: 16

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /…/lib/python3.10/site-packages/numpy.libs/libopenblas64_p-r0-15028c96.3.21.so
        version: 0.3.21
threading_layer: pthreads
   architecture: Zen
    num_threads: 16

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /…/lib/python3.10/site-packages/scipy.libs/libopenblasp-r0-41284840.3.18.so
        version: 0.3.18
threading_layer: pthreads
   architecture: Zen
    num_threads: 16
```

COMMENT:
Reading the docstring, I agree it is strange to interpret the integer `1` as 100%:

https://github.com/scikit-learn/scikit-learn/blob/baefe83933df9abecc2c16769d42e52b2694a9c8/sklearn/tree/_classes.py#L635-L638

From the docstring, `min_samples_split=1` is interpreted as 1 sample, which does not make any sense. 

I think we should be able to specify "1.0" but not "1" in our parameter validation framework. @jeremiedbb What do you think of having a way to reject `Integral`, such as:

```python
Interval(Real, 0.0, 1.0, closed="right", invalid_type=Integral),
```

If we have a way to specify a `invalid_type`, then I prefer to reject `min_samples_split=1` as we did in previous versions.

Labels: Bug, module:tree