Mathlib v3 is deprecated. Go to Mathlib v4

Commit 2021-01-13 18:52 7ce47174

View on Github →

refactor(computability/reduce): define many-one degrees without parameter (#2630) The file reduce.lean defines many-one degrees for computable reductions. At the moment every primcodable type α has a separate type of degrees many_one_degree α. This is completely antithetical to the notion of degrees, which are introduced to classify problems up to many-one equivalence. This PR defines a single many_one_degree type that lives in Type 0. We use the ulower infrastructure from #2574 which shows that every type is computably equivalent to a subset of natural numbers. The function many_one_degree.of which assigns to every set of a primcodable type a degree is still universe polymorphic. In particular, we show that of p = of q ↔ many_one_equiv p q, etc. in maximal generality, where p and q are subsets of different types in different universes. See previous discussion at #1203.

Estimated changes

modified def equiv.computable
deleted def many_one_degree.add
deleted theorem many_one_degree.add_le'
deleted theorem many_one_degree.add_le
added theorem many_one_degree.add_of
deleted def many_one_degree.le
deleted theorem many_one_degree.le_refl
deleted theorem many_one_degree.le_trans
modified def many_one_degree.of
deleted theorem many_one_degree.of_le_of'
modified theorem many_one_degree.of_le_of
modified def many_one_degree
added theorem many_one_equiv_to_nat
added theorem many_one_equiv_up
modified theorem one_one_reducible.of_equiv
modified theorem reflexive_one_one_reducible
added def to_nat
added theorem to_nat_many_one_equiv
added theorem ulower.down_computable