Intersección de intervalos cerrados
Los intervalos cerrados se pueden representar mediante una lista de dos números (el primero es el extremo inferior del intervalo y el segundo el superior).
Definir la función
| 1 |    interseccion :: Ord a => [a] -> [a] -> [a] | 
tal que (interseccion i1 i2) es la intersección de los intervalos i1 e i2. Por ejemplo,
| 1 2 3 4 5 6 7 8 |    interseccion [] [3,5]     ==  []    interseccion [3,5] []     ==  []    interseccion [2,4] [6,9]  ==  []    interseccion [2,6] [6,9]  ==  [6,6]    interseccion [2,6] [0,9]  ==  [2,6]    interseccion [2,6] [0,4]  ==  [2,4]    interseccion [4,6] [0,4]  ==  [4,4]    interseccion [5,6] [0,4]  ==  [] | 
Comprobar con QuickCheck que la intersección de intervalos es conmutativa.
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import Test.QuickCheck interseccion :: Ord a => [a] -> [a] -> [a] interseccion [] _ = [] interseccion _ [] = [] interseccion [a1,b1] [a2,b2]     | a <= b    = [a,b]     | otherwise = []     where a = max a1 a2           b = min b1 b2 -- La propiedad es prop_interseccion :: Int -> Int -> Int -> Int -> Property prop_interseccion a1 b1 a2 b2 =   a1 <= b1 && a2 <= b2 ==>   interseccion [a1,b1] [a2,b2] == interseccion [a2,b2] [a1,b1] -- La comprobación es --    λ> quickCheck prop_interseccion --    +++ OK, passed 100 tests; 263 discarded. | 
El código se encuentra en GitHub.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from hypothesis import given, assume, strategies as st Rectangulo = list[float] def interseccion(i1: Rectangulo,                  i2: Rectangulo) -> Rectangulo:     if i1 and i2:         [a1, b1] = i1         [a2, b2] = i2         a = max(a1, a2)         b = min(b1, b2)         if a <= b:             return [a, b]         return []     return [] # La propiedad es @given(st.floats(), st.floats(), st.floats(), st.floats()) def test_prop_raices(a1, b1, a2, b2):     assume(a1 <= b1 and a2 <= b2)     assert interseccion([a1, b1], [a2, b2]) == interseccion([a2, b2], [a1, b1]) # La comprobación es #    src> poetry run pytest -q interseccion_de_intervalos_cerrados.py #    1 passed in 0.64s | 
El código se encuentra en GitHub.