diff --git a/pyrsistent/_checked_types.py b/pyrsistent/_checked_types.py
index 492a862..8c768aa 100644
--- a/pyrsistent/_checked_types.py
+++ b/pyrsistent/_checked_types.py
@@ -83,15 +83,36 @@ def wrap_invariant(invariant):
     return f
 
 
+def _all_dicts(bases, seen=None):
+    """
+    Yield each class in ``bases`` and each of their base classes.
+    """
+    if seen is None:
+        seen = set()
+    for cls in bases:
+        if cls in seen:
+            continue
+        seen.add(cls)
+        yield cls.__dict__
+        for b in _all_dicts(cls.__bases__, seen):
+            yield b
+
+
 def store_invariants(dct, bases, destination_name, source_name):
     # Invariants are inherited
-    invariants = [dct[source_name]] if source_name in dct else []
-    invariants += [b.__dict__[source_name] for b in bases if source_name in b.__dict__]
+    invariants = []
+    for ns in [dct] + list(_all_dicts(bases)):
+        try:
+            invariant = ns[source_name]
+        except KeyError:
+            continue
+        invariants.append(invariant)
+
     if not all(callable(invariant) for invariant in invariants):
         raise TypeError('Invariants must be callable')
-
     dct[destination_name] = tuple(wrap_invariant(inv) for inv in invariants)
 
+
 class _CheckedTypeMeta(type):
     def __new__(mcs, name, bases, dct):
         _store_types(dct, bases, '_checked_types', '__type__')

Not all inherited `__invariant__` definitions are discovered by PClassMeta / store_invariants
Consider this class hierarchy:

```
from pyrsistent import PClass

class W(object):
    def __invariant__(self):
        return [(False, "W")]

class Y(W, PClass):
    pass
```

Attempting to instantiate this `Y` results in a failure as expected (at least by me):

```
pyrsistent._checked_types.InvariantException: 
    Global invariant failed, invariant_errors=[('W',)], missing_fields=[]
```

Now compare to this class hierarchy:

```
from pyrsistent import PClass

class W(object):
    def __invariant__(self):
        return [(False, "W")]

class X(W):
    pass

class Y(X, PClass):
    pass
```

Attempting to instantiate *this* `Y` succeeds.
diff --git a/tests/class_test.py b/tests/class_test.py
index d029e38..8320e97 100644
--- a/tests/class_test.py
+++ b/tests/class_test.py
@@ -283,6 +283,49 @@ def test_multiple_global_invariants():
         assert e.invariant_errors == (('x', 'y'),)
 
 
+def test_inherited_global_invariants():
+    class Distant(object):
+        def __invariant__(self):
+            return [(self.distant, "distant")]
+
+    class Nearby(Distant):
+        def __invariant__(self):
+            return [(self.nearby, "nearby")]
+
+    class MultipleInvariantGlobal(Nearby, PClass):
+        distant = field()
+        nearby = field()
+
+    try:
+        MultipleInvariantGlobal(distant=False, nearby=False)
+        assert False
+    except InvariantException as e:
+        assert e.invariant_errors == (("nearby",), ("distant",),)
+
+
+def test_diamond_inherited_global_invariants():
+    counter = []
+    class Base(object):
+        def __invariant__(self):
+            counter.append(None)
+            return [(False, "base")]
+
+    class Left(Base):
+        pass
+
+    class Right(Base):
+        pass
+
+    class SingleInvariantGlobal(Left, Right, PClass):
+        pass
+
+    try:
+        SingleInvariantGlobal()
+        assert False
+    except InvariantException as e:
+        assert e.invariant_errors == (("base",),)
+        assert counter == [None]
+
 def test_supports_weakref():
     import weakref
     weakref.ref(Point(x=1, y=2))
@@ -357,4 +400,4 @@ def test_enum_key_type():
     class MyClass2(PClass):
         f = pmap_field(key_type=(Foo,), value_type=int)
 
-    MyClass2()
\ No newline at end of file
+    MyClass2()

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
babel==2.17.0
cachetools==5.5.2
certifi==2025.1.31
chardet==5.2.0
charset-normalizer==3.4.1
colorama==0.4.6
coverage==7.8.0
distlib==0.3.9
docutils==0.21.2
exceptiongroup==1.2.2
filelock==3.18.0
hypothesis==2.0.0
idna==3.10
imagesize==1.4.1
importlib_metadata==8.6.1
iniconfig==2.1.0
Jinja2==3.1.6
MarkupSafe==3.0.2
memory_profiler==0.31
packaging==24.2
platformdirs==4.3.7
pluggy==1.5.0
psutil==2.1.1
py==1.11.0
Pygments==2.19.1
pyperform==1.86
pyproject-api==1.9.0
-e git+https://github.com/tobgu/pyrsistent.git@decc5bbb11a3c795ad7553760f1bfc29f370162e#egg=pyrsistent
pytest==8.3.5
pytest-cov==6.0.0
requests==2.32.3
six==1.17.0
snowballstemmer==2.2.0
Sphinx==7.4.7
sphinx_rtd_theme==0.1.5
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
tomli==2.2.1
tox==4.25.0
typing_extensions==4.13.0
urllib3==2.3.0
virtualenv==20.29.3
zipp==3.21.0

name: pyrsistent
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - babel==2.17.0
      - cachetools==5.5.2
      - certifi==2025.1.31
      - chardet==5.2.0
      - charset-normalizer==3.4.1
      - colorama==0.4.6
      - coverage==7.8.0
      - distlib==0.3.9
      - docutils==0.21.2
      - exceptiongroup==1.2.2
      - filelock==3.18.0
      - hypothesis==2.0.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - markupsafe==3.0.2
      - memory-profiler==0.31
      - packaging==24.2
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - psutil==2.1.1
      - py==1.11.0
      - pygments==2.19.1
      - pyperform==1.86
      - pyproject-api==1.9.0
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - requests==2.32.3
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==7.4.7
      - sphinx-rtd-theme==0.1.5
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - tomli==2.2.1
      - tox==4.25.0
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - virtualenv==20.29.3
      - zipp==3.21.0
prefix: /opt/conda/envs/pyrsistent

tests/class_test.py::test_inherited_global_invariants tests/class_test.py::test_diamond_inherited_global_invariants
tests/class_test.py::test_evolve_pclass_instance tests/class_test.py::test_direct_assignment_not_possible tests/class_test.py::test_direct_delete_not_possible tests/class_test.py::test_cannot_construct_with_undeclared_fields tests/class_test.py::test_cannot_construct_with_wrong_type tests/class_test.py::test_cannot_construct_without_mandatory_fields tests/class_test.py::test_field_invariant_must_hold tests/class_test.py::test_initial_value_set_when_not_present_in_arguments tests/class_test.py::test_can_create_nested_structures_from_dict_and_serialize_back_to_dict tests/class_test.py::test_can_serialize_with_custom_serializer tests/class_test.py::test_implements_proper_equality_based_on_equality_of_fields tests/class_test.py::test_is_hashable tests/class_test.py::test_supports_nested_transformation tests/class_test.py::test_repr tests/class_test.py::test_global_invariant_check tests/class_test.py::test_supports_pickling tests/class_test.py::test_supports_pickling_with_typed_container_fields tests/class_test.py::test_can_remove_optional_member tests/class_test.py::test_cannot_remove_mandatory_member tests/class_test.py::test_cannot_remove_non_existing_member tests/class_test.py::test_evolver_without_evolution_returns_original_instance tests/class_test.py::test_evolver_with_evolution_to_same_element_returns_original_instance tests/class_test.py::test_evolver_supports_chained_set_and_remove tests/class_test.py::test_evolver_supports_dot_notation_for_setting_and_getting_elements tests/class_test.py::test_string_as_type_specifier tests/class_test.py::test_multiple_invariants_on_field tests/class_test.py::test_multiple_global_invariants tests/class_test.py::test_supports_weakref tests/class_test.py::test_supports_weakref_with_multi_level_inheritance tests/class_test.py::test_supports_lazy_initial_value_for_field tests/class_test.py::test_type_checks_lazy_initial_value_for_field tests/class_test.py::test_invariant_checks_lazy_initial_value_for_field tests/class_test.py::test_invariant_checks_static_initial_value tests/class_test.py::test_lazy_invariant_message
pyrsistent/_checked_types.py
pyrsistent/_checked_types.py