Yes, there are versions of lambda calculus that have a flexible type system, in which expressions can be assigned to multiple types, or in which the type of an expression can change dynamically during the course of a computation. These versions of lambda calculus are known as polymorphic or multi-typed lambda calculi.
Polymorphic lambda calculus was first introduced by John C. Reynolds in the 1970s as a way to formalize the concept of type polymorphism in programming languages. In polymorphic lambda calculus, expressions can be assigned to multiple types, or to a type that is determined dynamically during the course of a computation. This allows for greater flexibility and expressiveness than a traditional typed lambda calculus, while still providing some of the benefits of a type system, such as improved organization and clarity.
Multi-typed lambda calculus is a similar concept, in which the type of an expression can change during the course of a computation. This can be thought of as a more dynamic version of polymorphic lambda calculus, in which the types of expressions are not fixed, but can evolve and adapt as the computation progresses.
Overall, polymorphic and multi-typed lambda calculi provide a middle ground between Church’s typed and untyped lambda calculus, combining some of the benefits of both. They allow for greater flexibility and expressiveness than a traditional typed lambda calculus, while still providing some of the benefits of a type system.