model_theory.finitely_generatedMathlib.ModelTheory.FinitelyGenerated

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -120,7 +120,7 @@ theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [← h, map_closure, embedding.coe_to_hom, image_preimage_eq_of_subset]
   intro x hx
   have h' := subset_closure hx
-  rw [h] at h' 
+  rw [h] at h'
   exact hom.map_le_range h'
 #align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embedding
 -/
@@ -218,7 +218,7 @@ theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [← h2, map_closure, embedding.coe_to_hom, image_preimage_eq_of_subset]
   intro x hx
   have h' := subset_closure hx
-  rw [h2] at h' 
+  rw [h2] at h'
   exact hom.map_le_range h'
 #align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embedding
 -/
@@ -282,7 +282,7 @@ theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.
 theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : FG L N :=
   by
-  rw [← hom.range_eq_top] at hs 
+  rw [← hom.range_eq_top] at hs
   rw [fg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjective
@@ -313,7 +313,7 @@ theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.
 theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : CG L N :=
   by
-  rw [← hom.range_eq_top] at hs 
+  rw [← hom.range_eq_top] at hs
   rw [cg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjective
@@ -355,7 +355,7 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
   · rw [← hom.range_eq_map, range_subtype]
     exact h
   · have h := h.map S.subtype.to_hom
-    rw [← hom.range_eq_map, range_subtype] at h 
+    rw [← hom.range_eq_map, range_subtype] at h
     exact h
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 -/
@@ -376,7 +376,7 @@ theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Struc
   · rw [← hom.range_eq_map, range_subtype]
     exact h
   · have h := h.map S.subtype.to_hom
-    rw [← hom.range_eq_map, range_subtype] at h 
+    rw [← hom.range_eq_map, range_subtype] at h
     exact h
 #align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cg
 -/
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2022 Aaron Anderson. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Aaron Anderson
 -/
-import Mathbin.ModelTheory.Substructures
+import ModelTheory.Substructures
 
 #align_import model_theory.finitely_generated from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
 
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2022 Aaron Anderson. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Aaron Anderson
-
-! This file was ported from Lean 3 source module model_theory.finitely_generated
-! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.ModelTheory.Substructures
 
+#align_import model_theory.finitely_generated from "leanprover-community/mathlib"@"dbdf71cee7bb20367cb7e37279c08b0c218cf967"
+
 /-!
 # Finitely Generated First-Order Structures
 
Diff
@@ -53,6 +53,7 @@ def FG (N : L.Substructure M) : Prop :=
 #align first_order.language.substructure.fg FirstOrder.Language.Substructure.FG
 -/
 
+#print FirstOrder.Language.Substructure.fg_def /-
 theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ closure L S = N :=
   ⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
     by
@@ -60,7 +61,9 @@ theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ clo
     rcases finite.exists_finset_coe h with ⟨t, rfl⟩
     exact ⟨t, rfl⟩⟩
 #align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_def
+-/
 
+#print FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family /-
 theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
     N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), closure L (range s) = N :=
   by
@@ -72,31 +75,43 @@ theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
   · rintro ⟨n, s, hs⟩
     refine' ⟨range s, finite_range s, hs⟩
 #align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family
+-/
 
+#print FirstOrder.Language.Substructure.fg_bot /-
 theorem fg_bot : (⊥ : L.Substructure M).FG :=
   ⟨∅, by rw [Finset.coe_empty, closure_empty]⟩
 #align first_order.language.substructure.fg_bot FirstOrder.Language.Substructure.fg_bot
+-/
 
+#print FirstOrder.Language.Substructure.fg_closure /-
 theorem fg_closure {s : Set M} (hs : s.Finite) : FG (closure L s) :=
   ⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
 #align first_order.language.substructure.fg_closure FirstOrder.Language.Substructure.fg_closure
+-/
 
+#print FirstOrder.Language.Substructure.fg_closure_singleton /-
 theorem fg_closure_singleton (x : M) : FG (closure L ({x} : Set M)) :=
   fg_closure (finite_singleton x)
 #align first_order.language.substructure.fg_closure_singleton FirstOrder.Language.Substructure.fg_closure_singleton
+-/
 
+#print FirstOrder.Language.Substructure.FG.sup /-
 theorem FG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
   let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
   fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.sup
+-/
 
+#print FirstOrder.Language.Substructure.FG.map /-
 theorem FG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
     (s.map f).FG :=
   let ⟨t, ht⟩ := fg_def.1 hs
   fg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.map
+-/
 
+#print FirstOrder.Language.Substructure.FG.of_map_embedding /-
 theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).FG) : s.FG :=
   by
@@ -111,6 +126,7 @@ theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [h] at h' 
   exact hom.map_le_range h'
 #align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embedding
+-/
 
 #print FirstOrder.Language.Substructure.CG /-
 /-- A substructure of `M` is countably generated if it is the closure of a countable subset of `M`.
@@ -120,16 +136,21 @@ def CG (N : L.Substructure M) : Prop :=
 #align first_order.language.substructure.cg FirstOrder.Language.Substructure.CG
 -/
 
+#print FirstOrder.Language.Substructure.cg_def /-
 theorem cg_def {N : L.Substructure M} : N.CG ↔ ∃ S : Set M, S.Countable ∧ closure L S = N :=
   Iff.refl _
 #align first_order.language.substructure.cg_def FirstOrder.Language.Substructure.cg_def
+-/
 
+#print FirstOrder.Language.Substructure.FG.cg /-
 theorem FG.cg {N : L.Substructure M} (h : N.FG) : N.CG :=
   by
   obtain ⟨s, hf, rfl⟩ := fg_def.1 h
   refine' ⟨s, hf.countable, rfl⟩
 #align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cg
+-/
 
+#print FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family /-
 theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
     N.CG ↔ ↑N = (∅ : Set M) ∨ ∃ s : ℕ → M, closure L (range s) = N :=
   by
@@ -152,31 +173,43 @@ theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
     · obtain ⟨f, rfl⟩ := h
       exact ⟨range f, countable_range _, rfl⟩
 #align first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family
+-/
 
+#print FirstOrder.Language.Substructure.cg_bot /-
 theorem cg_bot : (⊥ : L.Substructure M).CG :=
   fg_bot.CG
 #align first_order.language.substructure.cg_bot FirstOrder.Language.Substructure.cg_bot
+-/
 
+#print FirstOrder.Language.Substructure.cg_closure /-
 theorem cg_closure {s : Set M} (hs : s.Countable) : CG (closure L s) :=
   ⟨s, hs, rfl⟩
 #align first_order.language.substructure.cg_closure FirstOrder.Language.Substructure.cg_closure
+-/
 
+#print FirstOrder.Language.Substructure.cg_closure_singleton /-
 theorem cg_closure_singleton (x : M) : CG (closure L ({x} : Set M)) :=
   (fg_closure_singleton x).CG
 #align first_order.language.substructure.cg_closure_singleton FirstOrder.Language.Substructure.cg_closure_singleton
+-/
 
+#print FirstOrder.Language.Substructure.CG.sup /-
 theorem CG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.CG) (hN₂ : N₂.CG) : (N₁ ⊔ N₂).CG :=
   let ⟨t₁, ht₁⟩ := cg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := cg_def.1 hN₂
   cg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.sup
+-/
 
+#print FirstOrder.Language.Substructure.CG.map /-
 theorem CG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
     (s.map f).CG :=
   let ⟨t, ht⟩ := cg_def.1 hs
   cg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.map
+-/
 
+#print FirstOrder.Language.Substructure.CG.of_map_embedding /-
 theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).CG) : s.CG :=
   by
@@ -191,7 +224,9 @@ theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [h2] at h' 
   exact hom.map_le_range h'
 #align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embedding
+-/
 
+#print FirstOrder.Language.Substructure.cg_iff_countable /-
 theorem cg_iff_countable [Countable (Σ l, L.Functions l)] {s : L.Substructure M} :
     s.CG ↔ Countable s :=
   by
@@ -199,6 +234,7 @@ theorem cg_iff_countable [Countable (Σ l, L.Functions l)] {s : L.Substructure M
   rintro ⟨s, h, rfl⟩
   exact h.substructure_closure L
 #align first_order.language.substructure.cg_iff_countable FirstOrder.Language.Substructure.cg_iff_countable
+-/
 
 end Substructure
 
@@ -224,21 +260,28 @@ class CG : Prop where
 
 variable {L M}
 
+#print FirstOrder.Language.Structure.fg_def /-
 theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_def
+-/
 
+#print FirstOrder.Language.Structure.fg_iff /-
 /-- An equivalent expression of `Structure.fg` in terms of `set.finite` instead of `finset`. -/
 theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [fg_def, substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
+-/
 
+#print FirstOrder.Language.Structure.FG.range /-
 theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG :=
   by
   rw [hom.range_eq_map]
   exact (fg_def.1 h).map f
 #align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.range
+-/
 
+#print FirstOrder.Language.Structure.FG.map_of_surjective /-
 theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : FG L N :=
   by
@@ -246,22 +289,30 @@ theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M 
   rw [fg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjective
+-/
 
+#print FirstOrder.Language.Structure.cg_def /-
 theorem cg_def : CG L M ↔ (⊤ : L.Substructure M).CG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.cg_def FirstOrder.Language.Structure.cg_def
+-/
 
+#print FirstOrder.Language.Structure.cg_iff /-
 /-- An equivalent expression of `Structure.cg`. -/
 theorem cg_iff : CG L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [cg_def, substructure.cg_def]
 #align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iff
+-/
 
+#print FirstOrder.Language.Structure.CG.range /-
 theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG :=
   by
   rw [hom.range_eq_map]
   exact (cg_def.1 h).map f
 #align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.range
+-/
 
+#print FirstOrder.Language.Structure.CG.map_of_surjective /-
 theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : CG L N :=
   by
@@ -269,14 +320,19 @@ theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M 
   rw [cg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjective
+-/
 
+#print FirstOrder.Language.Structure.cg_iff_countable /-
 theorem cg_iff_countable [Countable (Σ l, L.Functions l)] : CG L M ↔ Countable M := by
   rw [cg_def, cg_iff_countable, top_equiv.to_equiv.countable_iff]
 #align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countable
+-/
 
+#print FirstOrder.Language.Structure.FG.cg /-
 theorem FG.cg (h : FG L M) : CG L M :=
   cg_def.2 (fg_def.1 h).CG
 #align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.FG.cg
+-/
 
 #print FirstOrder.Language.Structure.cg_of_fg /-
 instance (priority := 100) cg_of_fg [h : FG L M] : CG L M :=
@@ -286,12 +342,15 @@ instance (priority := 100) cg_of_fg [h : FG L M] : CG L M :=
 
 end Structure
 
+#print FirstOrder.Language.Equiv.fg_iff /-
 theorem Equiv.fg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
     Structure.FG L M ↔ Structure.FG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.fg_iff FirstOrder.Language.Equiv.fg_iff
+-/
 
+#print FirstOrder.Language.Substructure.fg_iff_structure_fg /-
 theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Structure.FG L S :=
   by
   rw [Structure.fg_def]
@@ -302,13 +361,17 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
     rw [← hom.range_eq_map, range_subtype] at h 
     exact h
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
+-/
 
+#print FirstOrder.Language.Equiv.cg_iff /-
 theorem Equiv.cg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
     Structure.CG L M ↔ Structure.CG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.cg_iff FirstOrder.Language.Equiv.cg_iff
+-/
 
+#print FirstOrder.Language.Substructure.cg_iff_structure_cg /-
 theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Structure.CG L S :=
   by
   rw [Structure.cg_def]
@@ -319,6 +382,7 @@ theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Struc
     rw [← hom.range_eq_map, range_subtype] at h 
     exact h
 #align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cg
+-/
 
 end Language
 
Diff
@@ -62,7 +62,7 @@ theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ clo
 #align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_def
 
 theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
-    N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), closure L (range s) = N :=
+    N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), closure L (range s) = N :=
   by
   rw [fg_def]
   constructor
@@ -108,7 +108,7 @@ theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [← h, map_closure, embedding.coe_to_hom, image_preimage_eq_of_subset]
   intro x hx
   have h' := subset_closure hx
-  rw [h] at h'
+  rw [h] at h' 
   exact hom.map_le_range h'
 #align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embedding
 
@@ -188,11 +188,11 @@ theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   rw [← h2, map_closure, embedding.coe_to_hom, image_preimage_eq_of_subset]
   intro x hx
   have h' := subset_closure hx
-  rw [h2] at h'
+  rw [h2] at h' 
   exact hom.map_le_range h'
 #align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embedding
 
-theorem cg_iff_countable [Countable (Σl, L.Functions l)] {s : L.Substructure M} :
+theorem cg_iff_countable [Countable (Σ l, L.Functions l)] {s : L.Substructure M} :
     s.CG ↔ Countable s :=
   by
   refine' ⟨_, fun h => ⟨s, h.to_set, s.closure_eq⟩⟩
@@ -242,7 +242,7 @@ theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.
 theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : FG L N :=
   by
-  rw [← hom.range_eq_top] at hs
+  rw [← hom.range_eq_top] at hs 
   rw [fg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjective
@@ -265,12 +265,12 @@ theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.
 theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : CG L N :=
   by
-  rw [← hom.range_eq_top] at hs
+  rw [← hom.range_eq_top] at hs 
   rw [cg_def, ← hs]
   exact h.range f
 #align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjective
 
-theorem cg_iff_countable [Countable (Σl, L.Functions l)] : CG L M ↔ Countable M := by
+theorem cg_iff_countable [Countable (Σ l, L.Functions l)] : CG L M ↔ Countable M := by
   rw [cg_def, cg_iff_countable, top_equiv.to_equiv.countable_iff]
 #align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countable
 
@@ -299,7 +299,7 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
   · rw [← hom.range_eq_map, range_subtype]
     exact h
   · have h := h.map S.subtype.to_hom
-    rw [← hom.range_eq_map, range_subtype] at h
+    rw [← hom.range_eq_map, range_subtype] at h 
     exact h
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 
@@ -316,7 +316,7 @@ theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Struc
   · rw [← hom.range_eq_map, range_subtype]
     exact h
   · have h := h.map S.subtype.to_hom
-    rw [← hom.range_eq_map, range_subtype] at h
+    rw [← hom.range_eq_map, range_subtype] at h 
     exact h
 #align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cg
 
Diff
@@ -32,7 +32,7 @@ this definition of finite generation to define the others.
 -/
 
 
-open FirstOrder
+open scoped FirstOrder
 
 open Set
 
Diff
@@ -53,12 +53,6 @@ def FG (N : L.Substructure M) : Prop :=
 #align first_order.language.substructure.fg FirstOrder.Language.Substructure.FG
 -/
 
-/- warning: first_order.language.substructure.fg_def -> FirstOrder.Language.Substructure.fg_def is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Finite.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) N)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) N)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_defₓ'. -/
 theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ closure L S = N :=
   ⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
     by
@@ -67,12 +61,6 @@ theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ clo
     exact ⟨t, rfl⟩⟩
 #align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_def
 
-/- warning: first_order.language.substructure.fg_iff_exists_fin_generating_family -> FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u3} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Set.range.{u3, 1} M (Fin n) s)) N)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Set.range.{u1, 1} M (Fin n) s)) N)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_familyₓ'. -/
 theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
     N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), closure L (range s) = N :=
   by
@@ -85,66 +73,30 @@ theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
     refine' ⟨range s, finite_range s, hs⟩
 #align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family
 
-/- warning: first_order.language.substructure.fg_bot -> FirstOrder.Language.Substructure.fg_bot is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Bot.bot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toHasBot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Bot.bot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toBot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_bot FirstOrder.Language.Substructure.fg_botₓ'. -/
 theorem fg_bot : (⊥ : L.Substructure M).FG :=
   ⟨∅, by rw [Finset.coe_empty, closure_empty]⟩
 #align first_order.language.substructure.fg_bot FirstOrder.Language.Substructure.fg_bot
 
-/- warning: first_order.language.substructure.fg_closure -> FirstOrder.Language.Substructure.fg_closure is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {s : Set.{u3} M}, (Set.Finite.{u3} M s) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) s))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u2, u1}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u2, u1, u3} L M] {s : Set.{u3} M}, (Set.Finite.{u3} M s) -> (FirstOrder.Language.Substructure.FG.{u2, u1, u3} L M _inst_1 (LowerAdjoint.toFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.instCompleteBooleanAlgebraSet.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u2, u1, u3} L M _inst_1)))) (SetLike.coe.{u3, u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u2, u1, u3} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u2, u1, u3} L M _inst_1) s))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_closure FirstOrder.Language.Substructure.fg_closureₓ'. -/
 theorem fg_closure {s : Set M} (hs : s.Finite) : FG (closure L s) :=
   ⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
 #align first_order.language.substructure.fg_closure FirstOrder.Language.Substructure.fg_closure
 
-/- warning: first_order.language.substructure.fg_closure_singleton -> FirstOrder.Language.Substructure.fg_closure_singleton is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (x : M), FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Singleton.singleton.{u3, u3} M (Set.{u3} M) (Set.hasSingleton.{u3} M) x))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (x : M), FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_closure_singleton FirstOrder.Language.Substructure.fg_closure_singletonₓ'. -/
 theorem fg_closure_singleton (x : M) : FG (closure L ({x} : Set M)) :=
   fg_closure (finite_singleton x)
 #align first_order.language.substructure.fg_closure_singleton FirstOrder.Language.Substructure.fg_closure_singleton
 
-/- warning: first_order.language.substructure.fg.sup -> FirstOrder.Language.Substructure.FG.sup is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N₁ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Sup.sup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SemilatticeSup.toHasSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Lattice.toSemilatticeSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1))))) N₁ N₂))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N₁ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Sup.sup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SemilatticeSup.toSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (Lattice.toSemilatticeSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1))))) N₁ N₂))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.supₓ'. -/
 theorem FG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
   let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
   fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.sup
 
-/- warning: first_order.language.substructure.fg.map -> FirstOrder.Language.Substructure.FG.map is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 s) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f s))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 s) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f s))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.mapₓ'. -/
 theorem FG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
     (s.map f).FG :=
   let ⟨t, ht⟩ := fg_def.1 hs
   fg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.map
 
-/- warning: first_order.language.substructure.fg.of_map_embedding -> FirstOrder.Language.Substructure.FG.of_map_embedding is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 s)
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embeddingₓ'. -/
 theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).FG) : s.FG :=
   by
@@ -168,34 +120,16 @@ def CG (N : L.Substructure M) : Prop :=
 #align first_order.language.substructure.cg FirstOrder.Language.Substructure.CG
 -/
 
-/- warning: first_order.language.substructure.cg_def -> FirstOrder.Language.Substructure.cg_def is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Countable.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) N)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Countable.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) N)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_def FirstOrder.Language.Substructure.cg_defₓ'. -/
 theorem cg_def {N : L.Substructure M} : N.CG ↔ ∃ S : Set M, S.Countable ∧ closure L S = N :=
   Iff.refl _
 #align first_order.language.substructure.cg_def FirstOrder.Language.Substructure.cg_def
 
-/- warning: first_order.language.substructure.fg.cg -> FirstOrder.Language.Substructure.FG.cg is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N)
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N)
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cgₓ'. -/
 theorem FG.cg {N : L.Substructure M} (h : N.FG) : N.CG :=
   by
   obtain ⟨s, hf, rfl⟩ := fg_def.1 h
   refine' ⟨s, hf.countable, rfl⟩
 #align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cg
 
-/- warning: first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family -> FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N) (Or (Eq.{succ u3} (Set.{u3} M) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))) N) (EmptyCollection.emptyCollection.{u3} (Set.{u3} M) (Set.hasEmptyc.{u3} M))) (Exists.{succ u3} (Nat -> M) (fun (s : Nat -> M) => Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Set.range.{u3, 1} M Nat s)) N)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N) (Or (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1) N) (EmptyCollection.emptyCollection.{u1} (Set.{u1} M) (Set.instEmptyCollectionSet.{u1} M))) (Exists.{succ u1} (Nat -> M) (fun (s : Nat -> M) => Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Set.range.{u1, 1} M Nat s)) N)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_familyₓ'. -/
 theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
     N.CG ↔ ↑N = (∅ : Set M) ∨ ∃ s : ℕ → M, closure L (range s) = N :=
   by
@@ -219,66 +153,30 @@ theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
       exact ⟨range f, countable_range _, rfl⟩
 #align first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family
 
-/- warning: first_order.language.substructure.cg_bot -> FirstOrder.Language.Substructure.cg_bot is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Bot.bot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toHasBot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Bot.bot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toBot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_bot FirstOrder.Language.Substructure.cg_botₓ'. -/
 theorem cg_bot : (⊥ : L.Substructure M).CG :=
   fg_bot.CG
 #align first_order.language.substructure.cg_bot FirstOrder.Language.Substructure.cg_bot
 
-/- warning: first_order.language.substructure.cg_closure -> FirstOrder.Language.Substructure.cg_closure is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {s : Set.{u3} M}, (Set.Countable.{u3} M s) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) s))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u2, u1}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u2, u1, u3} L M] {s : Set.{u3} M}, (Set.Countable.{u3} M s) -> (FirstOrder.Language.Substructure.CG.{u2, u1, u3} L M _inst_1 (LowerAdjoint.toFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.instCompleteBooleanAlgebraSet.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u2, u1, u3} L M _inst_1)))) (SetLike.coe.{u3, u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u2, u1, u3} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u2, u1, u3} L M _inst_1) s))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_closure FirstOrder.Language.Substructure.cg_closureₓ'. -/
 theorem cg_closure {s : Set M} (hs : s.Countable) : CG (closure L s) :=
   ⟨s, hs, rfl⟩
 #align first_order.language.substructure.cg_closure FirstOrder.Language.Substructure.cg_closure
 
-/- warning: first_order.language.substructure.cg_closure_singleton -> FirstOrder.Language.Substructure.cg_closure_singleton is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (x : M), FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Singleton.singleton.{u3, u3} M (Set.{u3} M) (Set.hasSingleton.{u3} M) x))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (x : M), FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_closure_singleton FirstOrder.Language.Substructure.cg_closure_singletonₓ'. -/
 theorem cg_closure_singleton (x : M) : CG (closure L ({x} : Set M)) :=
   (fg_closure_singleton x).CG
 #align first_order.language.substructure.cg_closure_singleton FirstOrder.Language.Substructure.cg_closure_singleton
 
-/- warning: first_order.language.substructure.cg.sup -> FirstOrder.Language.Substructure.CG.sup is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N₁ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Sup.sup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SemilatticeSup.toHasSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Lattice.toSemilatticeSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1))))) N₁ N₂))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N₁ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Sup.sup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SemilatticeSup.toSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (Lattice.toSemilatticeSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1))))) N₁ N₂))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.supₓ'. -/
 theorem CG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.CG) (hN₂ : N₂.CG) : (N₁ ⊔ N₂).CG :=
   let ⟨t₁, ht₁⟩ := cg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := cg_def.1 hN₂
   cg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.sup
 
-/- warning: first_order.language.substructure.cg.map -> FirstOrder.Language.Substructure.CG.map is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f s))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f s))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.mapₓ'. -/
 theorem CG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
     (s.map f).CG :=
   let ⟨t, ht⟩ := cg_def.1 hs
   cg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.map
 
-/- warning: first_order.language.substructure.cg.of_map_embedding -> FirstOrder.Language.Substructure.CG.of_map_embedding is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s)
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s)
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embeddingₓ'. -/
 theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).CG) : s.CG :=
   by
@@ -294,12 +192,6 @@ theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   exact hom.map_le_range h'
 #align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embedding
 
-/- warning: first_order.language.substructure.cg_iff_countable -> FirstOrder.Language.Substructure.cg_iff_countable is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] [_inst_2 : Countable.{succ u1} (Sigma.{0, u1} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u1, u2} L l))] {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s) (Countable.{succ u3} (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) s))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] [_inst_2 : Countable.{succ u3} (Sigma.{0, u3} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u3, u2} L l))] {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s) (Countable.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x s)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_countable FirstOrder.Language.Substructure.cg_iff_countableₓ'. -/
 theorem cg_iff_countable [Countable (Σl, L.Functions l)] {s : L.Substructure M} :
     s.CG ↔ Countable s :=
   by
@@ -332,45 +224,21 @@ class CG : Prop where
 
 variable {L M}
 
-/- warning: first_order.language.Structure.fg_def -> FirstOrder.Language.Structure.fg_def is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_defₓ'. -/
 theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_def
 
-/- warning: first_order.language.Structure.fg_iff -> FirstOrder.Language.Structure.fg_iff is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Finite.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iffₓ'. -/
 /-- An equivalent expression of `Structure.fg` in terms of `set.finite` instead of `finset`. -/
 theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [fg_def, substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
 
-/- warning: first_order.language.Structure.fg.range -> FirstOrder.Language.Structure.FG.range is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.rangeₓ'. -/
 theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG :=
   by
   rw [hom.range_eq_map]
   exact (fg_def.1 h).map f
 #align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.range
 
-/- warning: first_order.language.Structure.fg.map_of_surjective -> FirstOrder.Language.Structure.FG.map_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) (fun (_x : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) => M -> N) (FirstOrder.Language.Hom.hasCoeToFun.{u1, u2, u3, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.FG.{u1, u2, u4} L N _inst_2))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u1, succ u4} M N (FunLike.coe.{max (succ u1) (succ u4), succ u1, succ u4} (FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) M (fun (_x : M) => (fun (a._@.Mathlib.ModelTheory.Basic._hyg.5742 : M) => N) _x) (FirstOrder.Language.Hom.funLike.{u3, u2, u1, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.FG.{u3, u2, u4} L N _inst_2))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjectiveₓ'. -/
 theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : FG L N :=
   by
@@ -379,45 +247,21 @@ theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M 
   exact h.range f
 #align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjective
 
-/- warning: first_order.language.Structure.cg_def -> FirstOrder.Language.Structure.cg_def is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_def FirstOrder.Language.Structure.cg_defₓ'. -/
 theorem cg_def : CG L M ↔ (⊤ : L.Substructure M).CG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.cg_def FirstOrder.Language.Structure.cg_def
 
-/- warning: first_order.language.Structure.cg_iff -> FirstOrder.Language.Structure.cg_iff is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Countable.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Countable.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iffₓ'. -/
 /-- An equivalent expression of `Structure.cg`. -/
 theorem cg_iff : CG L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [cg_def, substructure.cg_def]
 #align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iff
 
-/- warning: first_order.language.Structure.cg.range -> FirstOrder.Language.Structure.CG.range is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.rangeₓ'. -/
 theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG :=
   by
   rw [hom.range_eq_map]
   exact (cg_def.1 h).map f
 #align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.range
 
-/- warning: first_order.language.Structure.cg.map_of_surjective -> FirstOrder.Language.Structure.CG.map_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) (fun (_x : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) => M -> N) (FirstOrder.Language.Hom.hasCoeToFun.{u1, u2, u3, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.CG.{u1, u2, u4} L N _inst_2))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u1, succ u4} M N (FunLike.coe.{max (succ u1) (succ u4), succ u1, succ u4} (FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) M (fun (_x : M) => (fun (a._@.Mathlib.ModelTheory.Basic._hyg.5742 : M) => N) _x) (FirstOrder.Language.Hom.funLike.{u3, u2, u1, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.CG.{u3, u2, u4} L N _inst_2))
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjectiveₓ'. -/
 theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : CG L N :=
   by
@@ -426,22 +270,10 @@ theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M 
   exact h.range f
 #align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjective
 
-/- warning: first_order.language.Structure.cg_iff_countable -> FirstOrder.Language.Structure.cg_iff_countable is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] [_inst_2 : Countable.{succ u1} (Sigma.{0, u1} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u1, u2} L l))], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (Countable.{succ u3} M)
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] [_inst_2 : Countable.{succ u3} (Sigma.{0, u3} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u3, u2} L l))], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (Countable.{succ u1} M)
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countableₓ'. -/
 theorem cg_iff_countable [Countable (Σl, L.Functions l)] : CG L M ↔ Countable M := by
   rw [cg_def, cg_iff_countable, top_equiv.to_equiv.countable_iff]
 #align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countable
 
-/- warning: first_order.language.Structure.fg.cg -> FirstOrder.Language.Structure.FG.cg is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1)
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1)
-Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.FG.cgₓ'. -/
 theorem FG.cg (h : FG L M) : CG L M :=
   cg_def.2 (fg_def.1 h).CG
 #align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.FG.cg
@@ -454,24 +286,12 @@ instance (priority := 100) cg_of_fg [h : FG L M] : CG L M :=
 
 end Structure
 
-/- warning: first_order.language.equiv.fg_iff -> FirstOrder.Language.Equiv.fg_iff is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Equiv.{u1, u2, u3, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Structure.FG.{u1, u2, u4} L N _inst_2))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Equiv.{u3, u2, u1, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Structure.FG.{u3, u2, u4} L N _inst_2))
-Case conversion may be inaccurate. Consider using '#align first_order.language.equiv.fg_iff FirstOrder.Language.Equiv.fg_iffₓ'. -/
 theorem Equiv.fg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
     Structure.FG L M ↔ Structure.FG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.fg_iff FirstOrder.Language.Equiv.fg_iff
 
-/- warning: first_order.language.substructure.fg_iff_Structure_fg -> FirstOrder.Language.Substructure.fg_iff_structure_fg is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (S : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1), Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 S) (FirstOrder.Language.Structure.FG.{u1, u2, u3} L (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) S) (FirstOrder.Language.Substructure.inducedStructure.{u1, u2, u3} L M _inst_1 S))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (S : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1), Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 S) (FirstOrder.Language.Structure.FG.{u3, u2, u1} L (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x S)) (FirstOrder.Language.Substructure.inducedStructure.{u3, u2, u1} L M _inst_1 S))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fgₓ'. -/
 theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Structure.FG L S :=
   by
   rw [Structure.fg_def]
@@ -483,24 +303,12 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
     exact h
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 
-/- warning: first_order.language.equiv.cg_iff -> FirstOrder.Language.Equiv.cg_iff is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Equiv.{u1, u2, u3, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Structure.CG.{u1, u2, u4} L N _inst_2))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Equiv.{u3, u2, u1, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Structure.CG.{u3, u2, u4} L N _inst_2))
-Case conversion may be inaccurate. Consider using '#align first_order.language.equiv.cg_iff FirstOrder.Language.Equiv.cg_iffₓ'. -/
 theorem Equiv.cg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
     Structure.CG L M ↔ Structure.CG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.cg_iff FirstOrder.Language.Equiv.cg_iff
 
-/- warning: first_order.language.substructure.cg_iff_Structure_cg -> FirstOrder.Language.Substructure.cg_iff_structure_cg is a dubious translation:
-lean 3 declaration is
-  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (S : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1), Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 S) (FirstOrder.Language.Structure.CG.{u1, u2, u3} L (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) S) (FirstOrder.Language.Substructure.inducedStructure.{u1, u2, u3} L M _inst_1 S))
-but is expected to have type
-  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (S : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1), Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 S) (FirstOrder.Language.Structure.CG.{u3, u2, u1} L (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x S)) (FirstOrder.Language.Substructure.inducedStructure.{u3, u2, u1} L M _inst_1 S))
-Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cgₓ'. -/
 theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Structure.CG L S :=
   by
   rw [Structure.cg_def]
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Aaron Anderson
 
 ! This file was ported from Lean 3 source module model_theory.finitely_generated
-! leanprover-community/mathlib commit 0602c59878ff3d5f71dea69c2d32ccf2e93e5398
+! leanprover-community/mathlib commit dbdf71cee7bb20367cb7e37279c08b0c218cf967
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -12,6 +12,9 @@ import Mathbin.ModelTheory.Substructures
 
 /-!
 # Finitely Generated First-Order Structures
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
 This file defines what it means for a first-order (sub)structure to be finitely or countably
 generated, similarly to other finitely-generated objects in the algebra library.
 
Diff
@@ -43,12 +43,20 @@ variable {L : Language} {M : Type _} [L.Structure M]
 
 namespace Substructure
 
+#print FirstOrder.Language.Substructure.FG /-
 /-- A substructure of `M` is finitely generated if it is the closure of a finite subset of `M`. -/
-def Fg (N : L.Substructure M) : Prop :=
+def FG (N : L.Substructure M) : Prop :=
   ∃ S : Finset M, closure L ↑S = N
-#align first_order.language.substructure.fg FirstOrder.Language.Substructure.Fg
+#align first_order.language.substructure.fg FirstOrder.Language.Substructure.FG
+-/
 
-theorem fg_def {N : L.Substructure M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ closure L S = N :=
+/- warning: first_order.language.substructure.fg_def -> FirstOrder.Language.Substructure.fg_def is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Finite.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) N)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) N)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_defₓ'. -/
+theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ closure L S = N :=
   ⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
     by
     rintro ⟨t', h, rfl⟩
@@ -56,8 +64,14 @@ theorem fg_def {N : L.Substructure M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ clo
     exact ⟨t, rfl⟩⟩
 #align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_def
 
+/- warning: first_order.language.substructure.fg_iff_exists_fin_generating_family -> FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u3} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Set.range.{u3, 1} M (Fin n) s)) N)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Set.range.{u1, 1} M (Fin n) s)) N)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_familyₓ'. -/
 theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
-    N.Fg ↔ ∃ (n : ℕ)(s : Fin n → M), closure L (range s) = N :=
+    N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), closure L (range s) = N :=
   by
   rw [fg_def]
   constructor
@@ -68,32 +82,68 @@ theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
     refine' ⟨range s, finite_range s, hs⟩
 #align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family
 
-theorem fg_bot : (⊥ : L.Substructure M).Fg :=
+/- warning: first_order.language.substructure.fg_bot -> FirstOrder.Language.Substructure.fg_bot is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Bot.bot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toHasBot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Bot.bot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toBot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_bot FirstOrder.Language.Substructure.fg_botₓ'. -/
+theorem fg_bot : (⊥ : L.Substructure M).FG :=
   ⟨∅, by rw [Finset.coe_empty, closure_empty]⟩
 #align first_order.language.substructure.fg_bot FirstOrder.Language.Substructure.fg_bot
 
-theorem fg_closure {s : Set M} (hs : s.Finite) : Fg (closure L s) :=
+/- warning: first_order.language.substructure.fg_closure -> FirstOrder.Language.Substructure.fg_closure is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {s : Set.{u3} M}, (Set.Finite.{u3} M s) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) s))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u2, u1}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u2, u1, u3} L M] {s : Set.{u3} M}, (Set.Finite.{u3} M s) -> (FirstOrder.Language.Substructure.FG.{u2, u1, u3} L M _inst_1 (LowerAdjoint.toFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.instCompleteBooleanAlgebraSet.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u2, u1, u3} L M _inst_1)))) (SetLike.coe.{u3, u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u2, u1, u3} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u2, u1, u3} L M _inst_1) s))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_closure FirstOrder.Language.Substructure.fg_closureₓ'. -/
+theorem fg_closure {s : Set M} (hs : s.Finite) : FG (closure L s) :=
   ⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
 #align first_order.language.substructure.fg_closure FirstOrder.Language.Substructure.fg_closure
 
-theorem fg_closure_singleton (x : M) : Fg (closure L ({x} : Set M)) :=
+/- warning: first_order.language.substructure.fg_closure_singleton -> FirstOrder.Language.Substructure.fg_closure_singleton is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (x : M), FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Singleton.singleton.{u3, u3} M (Set.{u3} M) (Set.hasSingleton.{u3} M) x))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (x : M), FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_closure_singleton FirstOrder.Language.Substructure.fg_closure_singletonₓ'. -/
+theorem fg_closure_singleton (x : M) : FG (closure L ({x} : Set M)) :=
   fg_closure (finite_singleton x)
 #align first_order.language.substructure.fg_closure_singleton FirstOrder.Language.Substructure.fg_closure_singleton
 
-theorem Fg.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.Fg) (hN₂ : N₂.Fg) : (N₁ ⊔ N₂).Fg :=
+/- warning: first_order.language.substructure.fg.sup -> FirstOrder.Language.Substructure.FG.sup is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N₁ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Sup.sup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SemilatticeSup.toHasSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Lattice.toSemilatticeSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1))))) N₁ N₂))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N₁ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Sup.sup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SemilatticeSup.toSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (Lattice.toSemilatticeSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1))))) N₁ N₂))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.supₓ'. -/
+theorem FG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
   let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
   fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
-#align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.Fg.sup
-
-theorem Fg.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.Fg) :
-    (s.map f).Fg :=
+#align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.sup
+
+/- warning: first_order.language.substructure.fg.map -> FirstOrder.Language.Substructure.FG.map is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 s) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f s))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 s) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f s))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.mapₓ'. -/
+theorem FG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
+    (s.map f).FG :=
   let ⟨t, ht⟩ := fg_def.1 hs
   fg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
-#align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.Fg.map
-
-theorem Fg.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
-    (hs : (s.map f.toHom).Fg) : s.Fg :=
+#align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.map
+
+/- warning: first_order.language.substructure.fg.of_map_embedding -> FirstOrder.Language.Substructure.FG.of_map_embedding is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 s)
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 s)
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embeddingₓ'. -/
+theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
+    (hs : (s.map f.toHom).FG) : s.FG :=
   by
   rcases hs with ⟨t, h⟩
   rw [fg_def]
@@ -105,26 +155,46 @@ theorem Fg.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   have h' := subset_closure hx
   rw [h] at h'
   exact hom.map_le_range h'
-#align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.Fg.of_map_embedding
+#align first_order.language.substructure.fg.of_map_embedding FirstOrder.Language.Substructure.FG.of_map_embedding
 
+#print FirstOrder.Language.Substructure.CG /-
 /-- A substructure of `M` is countably generated if it is the closure of a countable subset of `M`.
 -/
-def Cg (N : L.Substructure M) : Prop :=
+def CG (N : L.Substructure M) : Prop :=
   ∃ S : Set M, S.Countable ∧ closure L S = N
-#align first_order.language.substructure.cg FirstOrder.Language.Substructure.Cg
+#align first_order.language.substructure.cg FirstOrder.Language.Substructure.CG
+-/
 
-theorem cg_def {N : L.Substructure M} : N.Cg ↔ ∃ S : Set M, S.Countable ∧ closure L S = N :=
+/- warning: first_order.language.substructure.cg_def -> FirstOrder.Language.Substructure.cg_def is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Countable.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) N)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Countable.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) N)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_def FirstOrder.Language.Substructure.cg_defₓ'. -/
+theorem cg_def {N : L.Substructure M} : N.CG ↔ ∃ S : Set M, S.Countable ∧ closure L S = N :=
   Iff.refl _
 #align first_order.language.substructure.cg_def FirstOrder.Language.Substructure.cg_def
 
-theorem Fg.cg {N : L.Substructure M} (h : N.Fg) : N.Cg :=
+/- warning: first_order.language.substructure.fg.cg -> FirstOrder.Language.Substructure.FG.cg is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 N) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N)
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 N) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N)
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cgₓ'. -/
+theorem FG.cg {N : L.Substructure M} (h : N.FG) : N.CG :=
   by
   obtain ⟨s, hf, rfl⟩ := fg_def.1 h
   refine' ⟨s, hf.countable, rfl⟩
-#align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.Fg.cg
-
+#align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cg
+
+/- warning: first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family -> FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N) (Or (Eq.{succ u3} (Set.{u3} M) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))) N) (EmptyCollection.emptyCollection.{u3} (Set.{u3} M) (Set.hasEmptyc.{u3} M))) (Exists.{succ u3} (Nat -> M) (fun (s : Nat -> M) => Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Set.range.{u3, 1} M Nat s)) N)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N) (Or (Eq.{succ u1} (Set.{u1} M) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1) N) (EmptyCollection.emptyCollection.{u1} (Set.{u1} M) (Set.instEmptyCollectionSet.{u1} M))) (Exists.{succ u1} (Nat -> M) (fun (s : Nat -> M) => Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Set.range.{u1, 1} M Nat s)) N)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_familyₓ'. -/
 theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
-    N.Cg ↔ ↑N = (∅ : Set M) ∨ ∃ s : ℕ → M, closure L (range s) = N :=
+    N.CG ↔ ↑N = (∅ : Set M) ∨ ∃ s : ℕ → M, closure L (range s) = N :=
   by
   rw [cg_def]
   constructor
@@ -146,32 +216,68 @@ theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
       exact ⟨range f, countable_range _, rfl⟩
 #align first_order.language.substructure.cg_iff_empty_or_exists_nat_generating_family FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family
 
-theorem cg_bot : (⊥ : L.Substructure M).Cg :=
-  fg_bot.Cg
+/- warning: first_order.language.substructure.cg_bot -> FirstOrder.Language.Substructure.cg_bot is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Bot.bot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toHasBot.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Bot.bot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toBot.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_bot FirstOrder.Language.Substructure.cg_botₓ'. -/
+theorem cg_bot : (⊥ : L.Substructure M).CG :=
+  fg_bot.CG
 #align first_order.language.substructure.cg_bot FirstOrder.Language.Substructure.cg_bot
 
-theorem cg_closure {s : Set M} (hs : s.Countable) : Cg (closure L s) :=
+/- warning: first_order.language.substructure.cg_closure -> FirstOrder.Language.Substructure.cg_closure is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {s : Set.{u3} M}, (Set.Countable.{u3} M s) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) s))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u2, u1}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u2, u1, u3} L M] {s : Set.{u3} M}, (Set.Countable.{u3} M s) -> (FirstOrder.Language.Substructure.CG.{u2, u1, u3} L M _inst_1 (LowerAdjoint.toFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.instCompleteBooleanAlgebraSet.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u2, u1, u3} L M _inst_1)))) (SetLike.coe.{u3, u3} (FirstOrder.Language.Substructure.{u2, u1, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u2, u1, u3} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u2, u1, u3} L M _inst_1) s))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_closure FirstOrder.Language.Substructure.cg_closureₓ'. -/
+theorem cg_closure {s : Set M} (hs : s.Countable) : CG (closure L s) :=
   ⟨s, hs, rfl⟩
 #align first_order.language.substructure.cg_closure FirstOrder.Language.Substructure.cg_closure
 
-theorem cg_closure_singleton (x : M) : Cg (closure L ({x} : Set M)) :=
-  (fg_closure_singleton x).Cg
+/- warning: first_order.language.substructure.cg_closure_singleton -> FirstOrder.Language.Substructure.cg_closure_singleton is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (x : M), FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) (Singleton.singleton.{u3, u3} M (Set.{u3} M) (Set.hasSingleton.{u3} M) x))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (x : M), FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_closure_singleton FirstOrder.Language.Substructure.cg_closure_singletonₓ'. -/
+theorem cg_closure_singleton (x : M) : CG (closure L ({x} : Set M)) :=
+  (fg_closure_singleton x).CG
 #align first_order.language.substructure.cg_closure_singleton FirstOrder.Language.Substructure.cg_closure_singleton
 
-theorem Cg.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.Cg) (hN₂ : N₂.Cg) : (N₁ ⊔ N₂).Cg :=
+/- warning: first_order.language.substructure.cg.sup -> FirstOrder.Language.Substructure.CG.sup is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N₁ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Sup.sup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SemilatticeSup.toHasSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Lattice.toSemilatticeSup.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u1, u2, u3} L M _inst_1))))) N₁ N₂))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N₁ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1} {N₂ : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N₁) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 N₂) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Sup.sup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SemilatticeSup.toSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (Lattice.toSemilatticeSup.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (ConditionallyCompleteLattice.toLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toConditionallyCompleteLattice.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1))))) N₁ N₂))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.supₓ'. -/
+theorem CG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.CG) (hN₂ : N₂.CG) : (N₁ ⊔ N₂).CG :=
   let ⟨t₁, ht₁⟩ := cg_def.1 hN₁
   let ⟨t₂, ht₂⟩ := cg_def.1 hN₂
   cg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
-#align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.Cg.sup
-
-theorem Cg.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.Cg) :
-    (s.map f).Cg :=
+#align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.sup
+
+/- warning: first_order.language.substructure.cg.map -> FirstOrder.Language.Substructure.CG.map is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f s))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f s))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.mapₓ'. -/
+theorem CG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
+    (s.map f).CG :=
   let ⟨t, ht⟩ := cg_def.1 hs
   cg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
-#align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.Cg.map
-
-theorem Cg.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
-    (hs : (s.map f.toHom).Cg) : s.Cg :=
+#align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.map
+
+/- warning: first_order.language.substructure.cg.of_map_embedding -> FirstOrder.Language.Substructure.CG.of_map_embedding is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u1, u2, u3, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u1, u2, u3, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s)
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N] (f : FirstOrder.Language.Embedding.{u3, u2, u1, u4} L M N _inst_1 _inst_2) {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, (FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Substructure.map.{u3, u2, u1, u4} L M N _inst_1 _inst_2 (FirstOrder.Language.Embedding.toHom.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f) s)) -> (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s)
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embeddingₓ'. -/
+theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
+    (hs : (s.map f.toHom).CG) : s.CG :=
   by
   rcases hs with ⟨t, h1, h2⟩
   rw [cg_def]
@@ -183,10 +289,16 @@ theorem Cg.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L
   have h' := subset_closure hx
   rw [h2] at h'
   exact hom.map_le_range h'
-#align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.Cg.of_map_embedding
-
+#align first_order.language.substructure.cg.of_map_embedding FirstOrder.Language.Substructure.CG.of_map_embedding
+
+/- warning: first_order.language.substructure.cg_iff_countable -> FirstOrder.Language.Substructure.cg_iff_countable is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] [_inst_2 : Countable.{succ u1} (Sigma.{0, u1} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u1, u2} L l))] {s : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 s) (Countable.{succ u3} (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) s))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] [_inst_2 : Countable.{succ u3} (Sigma.{0, u3} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u3, u2} L l))] {s : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1}, Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 s) (Countable.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x s)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_countable FirstOrder.Language.Substructure.cg_iff_countableₓ'. -/
 theorem cg_iff_countable [Countable (Σl, L.Functions l)] {s : L.Substructure M} :
-    s.Cg ↔ Countable s :=
+    s.CG ↔ Countable s :=
   by
   refine' ⟨_, fun h => ⟨s, h.to_set, s.closure_eq⟩⟩
   rintro ⟨s, h, rfl⟩
@@ -201,85 +313,163 @@ namespace Structure
 
 variable (L) (M)
 
+#print FirstOrder.Language.Structure.FG /-
 /-- A structure is finitely generated if it is the closure of a finite subset. -/
-class Fg : Prop where
-  out : (⊤ : L.Substructure M).Fg
-#align first_order.language.Structure.fg FirstOrder.Language.Structure.Fg
+class FG : Prop where
+  out : (⊤ : L.Substructure M).FG
+#align first_order.language.Structure.fg FirstOrder.Language.Structure.FG
+-/
 
+#print FirstOrder.Language.Structure.CG /-
 /-- A structure is countably generated if it is the closure of a countable subset. -/
-class Cg : Prop where
-  out : (⊤ : L.Substructure M).Cg
-#align first_order.language.Structure.cg FirstOrder.Language.Structure.Cg
+class CG : Prop where
+  out : (⊤ : L.Substructure M).CG
+#align first_order.language.Structure.cg FirstOrder.Language.Structure.CG
+-/
 
 variable {L M}
 
-theorem fg_def : Fg L M ↔ (⊤ : L.Substructure M).Fg :=
+/- warning: first_order.language.Structure.fg_def -> FirstOrder.Language.Structure.fg_def is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_defₓ'. -/
+theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_def
 
+/- warning: first_order.language.Structure.fg_iff -> FirstOrder.Language.Structure.fg_iff is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Finite.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iffₓ'. -/
 /-- An equivalent expression of `Structure.fg` in terms of `set.finite` instead of `finset`. -/
-theorem fg_iff : Fg L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
+theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [fg_def, substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
 
-theorem Fg.range {N : Type _} [L.Structure N] (h : Fg L M) (f : M →[L] N) : f.range.Fg :=
+/- warning: first_order.language.Structure.fg.range -> FirstOrder.Language.Structure.FG.range is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.FG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.FG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.rangeₓ'. -/
+theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG :=
   by
   rw [hom.range_eq_map]
   exact (fg_def.1 h).map f
-#align first_order.language.Structure.fg.range FirstOrder.Language.Structure.Fg.range
-
-theorem Fg.map_of_surjective {N : Type _} [L.Structure N] (h : Fg L M) (f : M →[L] N)
-    (hs : Function.Surjective f) : Fg L N :=
+#align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.range
+
+/- warning: first_order.language.Structure.fg.map_of_surjective -> FirstOrder.Language.Structure.FG.map_of_surjective is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) (fun (_x : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) => M -> N) (FirstOrder.Language.Hom.hasCoeToFun.{u1, u2, u3, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.FG.{u1, u2, u4} L N _inst_2))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u1, succ u4} M N (FunLike.coe.{max (succ u1) (succ u4), succ u1, succ u4} (FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) M (fun (_x : M) => (fun (a._@.Mathlib.ModelTheory.Basic._hyg.5742 : M) => N) _x) (FirstOrder.Language.Hom.funLike.{u3, u2, u1, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.FG.{u3, u2, u4} L N _inst_2))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjectiveₓ'. -/
+theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
+    (hs : Function.Surjective f) : FG L N :=
   by
   rw [← hom.range_eq_top] at hs
   rw [fg_def, ← hs]
   exact h.range f
-#align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.Fg.map_of_surjective
-
-theorem cg_def : Cg L M ↔ (⊤ : L.Substructure M).Cg :=
+#align first_order.language.Structure.fg.map_of_surjective FirstOrder.Language.Structure.FG.map_of_surjective
+
+/- warning: first_order.language.Structure.cg_def -> FirstOrder.Language.Structure.cg_def is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_def FirstOrder.Language.Structure.cg_defₓ'. -/
+theorem cg_def : CG L M ↔ (⊤ : L.Substructure M).CG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.cg_def FirstOrder.Language.Structure.cg_def
 
+/- warning: first_order.language.Structure.cg_iff -> FirstOrder.Language.Structure.cg_iff is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (Exists.{succ u3} (Set.{u3} M) (fun (S : Set.{u3} M) => And (Set.Countable.{u3} M S) (Eq.{succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (coeFn.{succ u3, succ u3} (LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (fun (_x : LowerAdjoint.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) => (Set.{u3} M) -> (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1)) (LowerAdjoint.hasCoeToFun.{u3, u3} (Set.{u3} M) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (PartialOrder.toPreorder.{u3} (Set.{u3} M) (CompleteSemilatticeInf.toPartialOrder.{u3} (Set.{u3} M) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Set.{u3} M) (Order.Coframe.toCompleteLattice.{u3} (Set.{u3} M) (CompleteDistribLattice.toCoframe.{u3} (Set.{u3} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u3} (Set.{u3} M) (Set.completeBooleanAlgebra.{u3} M))))))) (PartialOrder.toPreorder.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (SetLike.partialOrder.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (HasLiftT.mk.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (CoeTCₓ.coe.{succ u3, succ u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (Set.{u3} M) (SetLike.Set.hasCoeT.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)))))) (FirstOrder.Language.Substructure.closure.{u1, u2, u3} L M _inst_1) S) (Top.top.{u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u1, u2, u3} L M _inst_1)))))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Countable.{u1} M S) (Eq.{succ u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (LowerAdjoint.toFun.{u1, u1} (Set.{u1} M) (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (PartialOrder.toPreorder.{u1} (Set.{u1} M) (CompleteSemilatticeInf.toPartialOrder.{u1} (Set.{u1} M) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Set.{u1} M) (Order.Coframe.toCompleteLattice.{u1} (Set.{u1} M) (CompleteDistribLattice.toCoframe.{u1} (Set.{u1} M) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u1} (Set.{u1} M) (Set.instCompleteBooleanAlgebraSet.{u1} M))))))) (PartialOrder.toPreorder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instCompleteLattice.{u3, u2, u1} L M _inst_1)))) (SetLike.coe.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) (FirstOrder.Language.Substructure.closure.{u3, u2, u1} L M _inst_1) S) (Top.top.{u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Substructure.instTop.{u3, u2, u1} L M _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iffₓ'. -/
 /-- An equivalent expression of `Structure.cg`. -/
-theorem cg_iff : Cg L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ : L.Substructure M) := by
+theorem cg_iff : CG L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [cg_def, substructure.cg_def]
 #align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iff
 
-theorem Cg.range {N : Type _} [L.Structure N] (h : Cg L M) (f : M →[L] N) : f.range.Cg :=
+/- warning: first_order.language.Structure.cg.range -> FirstOrder.Language.Structure.CG.range is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.CG.{u1, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u1, u2, u3, u4} L M N _inst_1 _inst_2 f))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), FirstOrder.Language.Substructure.CG.{u3, u2, u4} L N _inst_2 (FirstOrder.Language.Hom.range.{u3, u2, u1, u4} L M N _inst_1 _inst_2 f))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.rangeₓ'. -/
+theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG :=
   by
   rw [hom.range_eq_map]
   exact (cg_def.1 h).map f
-#align first_order.language.Structure.cg.range FirstOrder.Language.Structure.Cg.range
-
-theorem Cg.map_of_surjective {N : Type _} [L.Structure N] (h : Cg L M) (f : M →[L] N)
-    (hs : Function.Surjective f) : Cg L N :=
+#align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.range
+
+/- warning: first_order.language.Structure.cg.map_of_surjective -> FirstOrder.Language.Structure.CG.map_of_surjective is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u3, succ u4} M N (coeFn.{max (succ u3) (succ u4), max (succ u3) (succ u4)} (FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) (fun (_x : FirstOrder.Language.Hom.{u1, u2, u3, u4} L M N _inst_1 _inst_2) => M -> N) (FirstOrder.Language.Hom.hasCoeToFun.{u1, u2, u3, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.CG.{u1, u2, u4} L N _inst_2))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) -> (forall (f : FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2), (Function.Surjective.{succ u1, succ u4} M N (FunLike.coe.{max (succ u1) (succ u4), succ u1, succ u4} (FirstOrder.Language.Hom.{u3, u2, u1, u4} L M N _inst_1 _inst_2) M (fun (_x : M) => (fun (a._@.Mathlib.ModelTheory.Basic._hyg.5742 : M) => N) _x) (FirstOrder.Language.Hom.funLike.{u3, u2, u1, u4} L M N _inst_1 _inst_2) f)) -> (FirstOrder.Language.Structure.CG.{u3, u2, u4} L N _inst_2))
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjectiveₓ'. -/
+theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
+    (hs : Function.Surjective f) : CG L N :=
   by
   rw [← hom.range_eq_top] at hs
   rw [cg_def, ← hs]
   exact h.range f
-#align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.Cg.map_of_surjective
-
-theorem cg_iff_countable [Countable (Σl, L.Functions l)] : Cg L M ↔ Countable M := by
+#align first_order.language.Structure.cg.map_of_surjective FirstOrder.Language.Structure.CG.map_of_surjective
+
+/- warning: first_order.language.Structure.cg_iff_countable -> FirstOrder.Language.Structure.cg_iff_countable is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] [_inst_2 : Countable.{succ u1} (Sigma.{0, u1} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u1, u2} L l))], Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (Countable.{succ u3} M)
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] [_inst_2 : Countable.{succ u3} (Sigma.{0, u3} Nat (fun (l : Nat) => FirstOrder.Language.Functions.{u3, u2} L l))], Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (Countable.{succ u1} M)
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countableₓ'. -/
+theorem cg_iff_countable [Countable (Σl, L.Functions l)] : CG L M ↔ Countable M := by
   rw [cg_def, cg_iff_countable, top_equiv.to_equiv.countable_iff]
 #align first_order.language.Structure.cg_iff_countable FirstOrder.Language.Structure.cg_iff_countable
 
-theorem Fg.cg (h : Fg L M) : Cg L M :=
-  cg_def.2 (fg_def.1 h).Cg
-#align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.Fg.cg
-
-instance (priority := 100) cg_of_fg [h : Fg L M] : Cg L M :=
-  h.Cg
+/- warning: first_order.language.Structure.fg.cg -> FirstOrder.Language.Structure.FG.cg is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M], (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) -> (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1)
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M], (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) -> (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1)
+Case conversion may be inaccurate. Consider using '#align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.FG.cgₓ'. -/
+theorem FG.cg (h : FG L M) : CG L M :=
+  cg_def.2 (fg_def.1 h).CG
+#align first_order.language.Structure.fg.cg FirstOrder.Language.Structure.FG.cg
+
+#print FirstOrder.Language.Structure.cg_of_fg /-
+instance (priority := 100) cg_of_fg [h : FG L M] : CG L M :=
+  h.CG
 #align first_order.language.Structure.cg_of_fg FirstOrder.Language.Structure.cg_of_fg
+-/
 
 end Structure
 
+/- warning: first_order.language.equiv.fg_iff -> FirstOrder.Language.Equiv.fg_iff is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Equiv.{u1, u2, u3, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.FG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Structure.FG.{u1, u2, u4} L N _inst_2))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Equiv.{u3, u2, u1, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.FG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Structure.FG.{u3, u2, u4} L N _inst_2))
+Case conversion may be inaccurate. Consider using '#align first_order.language.equiv.fg_iff FirstOrder.Language.Equiv.fg_iffₓ'. -/
 theorem Equiv.fg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
-    Structure.Fg L M ↔ Structure.Fg L N :=
+    Structure.FG L M ↔ Structure.FG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.fg_iff FirstOrder.Language.Equiv.fg_iff
 
-theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.Fg ↔ Structure.Fg L S :=
+/- warning: first_order.language.substructure.fg_iff_Structure_fg -> FirstOrder.Language.Substructure.fg_iff_structure_fg is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (S : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1), Iff (FirstOrder.Language.Substructure.FG.{u1, u2, u3} L M _inst_1 S) (FirstOrder.Language.Structure.FG.{u1, u2, u3} L (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) S) (FirstOrder.Language.Substructure.inducedStructure.{u1, u2, u3} L M _inst_1 S))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (S : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1), Iff (FirstOrder.Language.Substructure.FG.{u3, u2, u1} L M _inst_1 S) (FirstOrder.Language.Structure.FG.{u3, u2, u1} L (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x S)) (FirstOrder.Language.Substructure.inducedStructure.{u3, u2, u1} L M _inst_1 S))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fgₓ'. -/
+theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Structure.FG L S :=
   by
   rw [Structure.fg_def]
   refine' ⟨fun h => fg.of_map_embedding S.subtype _, fun h => _⟩
@@ -290,13 +480,25 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.Fg ↔ Struc
     exact h
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 
+/- warning: first_order.language.equiv.cg_iff -> FirstOrder.Language.Equiv.cg_iff is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u1, u2, u4} L N], (FirstOrder.Language.Equiv.{u1, u2, u3, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.CG.{u1, u2, u3} L M _inst_1) (FirstOrder.Language.Structure.CG.{u1, u2, u4} L N _inst_2))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] {N : Type.{u4}} [_inst_2 : FirstOrder.Language.Structure.{u3, u2, u4} L N], (FirstOrder.Language.Equiv.{u3, u2, u1, u4} L M N _inst_1 _inst_2) -> (Iff (FirstOrder.Language.Structure.CG.{u3, u2, u1} L M _inst_1) (FirstOrder.Language.Structure.CG.{u3, u2, u4} L N _inst_2))
+Case conversion may be inaccurate. Consider using '#align first_order.language.equiv.cg_iff FirstOrder.Language.Equiv.cg_iffₓ'. -/
 theorem Equiv.cg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
-    Structure.Cg L M ↔ Structure.Cg L N :=
+    Structure.CG L M ↔ Structure.CG L N :=
   ⟨fun h => h.mapOfSurjective f.toHom f.toEquiv.Surjective, fun h =>
     h.mapOfSurjective f.symm.toHom f.toEquiv.symm.Surjective⟩
 #align first_order.language.equiv.cg_iff FirstOrder.Language.Equiv.cg_iff
 
-theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.Cg ↔ Structure.Cg L S :=
+/- warning: first_order.language.substructure.cg_iff_Structure_cg -> FirstOrder.Language.Substructure.cg_iff_structure_cg is a dubious translation:
+lean 3 declaration is
+  forall {L : FirstOrder.Language.{u1, u2}} {M : Type.{u3}} [_inst_1 : FirstOrder.Language.Structure.{u1, u2, u3} L M] (S : FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1), Iff (FirstOrder.Language.Substructure.CG.{u1, u2, u3} L M _inst_1 S) (FirstOrder.Language.Structure.CG.{u1, u2, u3} L (coeSort.{succ u3, succ (succ u3)} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (FirstOrder.Language.Substructure.{u1, u2, u3} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u1, u2, u3} L M _inst_1)) S) (FirstOrder.Language.Substructure.inducedStructure.{u1, u2, u3} L M _inst_1 S))
+but is expected to have type
+  forall {L : FirstOrder.Language.{u3, u2}} {M : Type.{u1}} [_inst_1 : FirstOrder.Language.Structure.{u3, u2, u1} L M] (S : FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1), Iff (FirstOrder.Language.Substructure.CG.{u3, u2, u1} L M _inst_1 S) (FirstOrder.Language.Structure.CG.{u3, u2, u1} L (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) (SetLike.instMembership.{u1, u1} (FirstOrder.Language.Substructure.{u3, u2, u1} L M _inst_1) M (FirstOrder.Language.Substructure.instSetLike.{u3, u2, u1} L M _inst_1)) x S)) (FirstOrder.Language.Substructure.inducedStructure.{u3, u2, u1} L M _inst_1 S))
+Case conversion may be inaccurate. Consider using '#align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cgₓ'. -/
+theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Structure.CG L S :=
   by
   rw [Structure.cg_def]
   refine' ⟨fun h => cg.of_map_embedding S.subtype _, fun h => _⟩

Changes in mathlib4

mathlib3
mathlib4
chore: remove terminal, terminal refines (#10762)

I replaced a few "terminal" refine/refine's with exact.

The strategy was very simple-minded: essentially any refine whose following line had smaller indentation got replaced by exact and then I cleaned up the mess.

This PR certainly leaves some further terminal refines, but maybe the current change is beneficial.

Diff
@@ -57,7 +57,7 @@ theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
     obtain ⟨n, f, rfl⟩ := Sfin.fin_embedding
     exact ⟨n, f, hS⟩
   · rintro ⟨n, s, hs⟩
-    refine' ⟨range s, finite_range s, hs⟩
+    exact ⟨range s, finite_range s, hs⟩
 #align first_order.language.substructure.fg_iff_exists_fin_generating_family FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family
 
 theorem fg_bot : (⊥ : L.Substructure M).FG :=
@@ -110,7 +110,7 @@ theorem cg_def {N : L.Substructure M} : N.CG ↔ ∃ S : Set M, S.Countable ∧
 
 theorem FG.cg {N : L.Substructure M} (h : N.FG) : N.CG := by
   obtain ⟨s, hf, rfl⟩ := fg_def.1 h
-  refine' ⟨s, hf.countable, rfl⟩
+  exact ⟨s, hf.countable, rfl⟩
 #align first_order.language.substructure.fg.cg FirstOrder.Language.Substructure.FG.cg
 
 theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
chore: remove uses of cases' (#9171)

I literally went through and regex'd some uses of cases', replacing them with rcases; this is meant to be a low effort PR as I hope that tools can do this in the future.

rcases is an easier replacement than cases, though with better tools we could in future do a second pass converting simple rcases added here (and existing ones) to cases.

Diff
@@ -118,7 +118,7 @@ theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
   rw [cg_def]
   constructor
   · rintro ⟨S, Scount, hS⟩
-    cases' eq_empty_or_nonempty (N : Set M) with h h
+    rcases eq_empty_or_nonempty (N : Set M) with h | h
     · exact Or.intro_left _ h
     obtain ⟨f, h'⟩ :=
       (Scount.union (Set.countable_singleton h.some)).exists_eq_range
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -33,7 +33,7 @@ namespace Language
 
 open Structure
 
-variable {L : Language} {M : Type _} [L.Structure M]
+variable {L : Language} {M : Type*} [L.Structure M]
 
 namespace Substructure
 
@@ -78,13 +78,13 @@ theorem FG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.FG) (hN₂ : N₂.FG
   fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.fg.sup FirstOrder.Language.Substructure.FG.sup
 
-theorem FG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
+theorem FG.map {N : Type*} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
     (s.map f).FG :=
   let ⟨t, ht⟩ := fg_def.1 hs
   fg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.fg.map FirstOrder.Language.Substructure.FG.map
 
-theorem FG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
+theorem FG.of_map_embedding {N : Type*} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).FG) : s.FG := by
   rcases hs with ⟨t, h⟩
   rw [fg_def]
@@ -153,13 +153,13 @@ theorem CG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.CG) (hN₂ : N₂.CG
   cg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [closure_union, ht₁.2, ht₂.2]⟩
 #align first_order.language.substructure.cg.sup FirstOrder.Language.Substructure.CG.sup
 
-theorem CG.map {N : Type _} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
+theorem CG.map {N : Type*} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
     (s.map f).CG :=
   let ⟨t, ht⟩ := cg_def.1 hs
   cg_def.2 ⟨f '' t, ht.1.image _, by rw [closure_image, ht.2]⟩
 #align first_order.language.substructure.cg.map FirstOrder.Language.Substructure.CG.map
 
-theorem CG.of_map_embedding {N : Type _} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
+theorem CG.of_map_embedding {N : Type*} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
     (hs : (s.map f.toHom).CG) : s.CG := by
   rcases hs with ⟨t, h1, h2⟩
   rw [cg_def]
@@ -211,12 +211,12 @@ theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.S
   rw [fg_def, Substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
 
-theorem FG.range {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG := by
+theorem FG.range {N : Type*} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG := by
   rw [Hom.range_eq_map]
   exact (fg_def.1 h).map f
 #align first_order.language.Structure.fg.range FirstOrder.Language.Structure.FG.range
 
-theorem FG.map_of_surjective {N : Type _} [L.Structure N] (h : FG L M) (f : M →[L] N)
+theorem FG.map_of_surjective {N : Type*} [L.Structure N] (h : FG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : FG L N := by
   rw [← Hom.range_eq_top] at hs
   rw [fg_def, ← hs]
@@ -232,12 +232,12 @@ theorem cg_iff : CG L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ :
   rw [cg_def, Substructure.cg_def]
 #align first_order.language.Structure.cg_iff FirstOrder.Language.Structure.cg_iff
 
-theorem CG.range {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG := by
+theorem CG.range {N : Type*} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG := by
   rw [Hom.range_eq_map]
   exact (cg_def.1 h).map f
 #align first_order.language.Structure.cg.range FirstOrder.Language.Structure.CG.range
 
-theorem CG.map_of_surjective {N : Type _} [L.Structure N] (h : CG L M) (f : M →[L] N)
+theorem CG.map_of_surjective {N : Type*} [L.Structure N] (h : CG L M) (f : M →[L] N)
     (hs : Function.Surjective f) : CG L N := by
   rw [← Hom.range_eq_top] at hs
   rw [cg_def, ← hs]
@@ -258,7 +258,7 @@ instance (priority := 100) cg_of_fg [h : FG L M] : CG L M :=
 
 end Structure
 
-theorem Equiv.fg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
+theorem Equiv.fg_iff {N : Type*} [L.Structure N] (f : M ≃[L] N) :
     Structure.FG L M ↔ Structure.FG L N :=
   ⟨fun h => h.map_of_surjective f.toHom f.toEquiv.surjective, fun h =>
     h.map_of_surjective f.symm.toHom f.toEquiv.symm.surjective⟩
@@ -275,7 +275,7 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
 set_option linter.uppercaseLean3 false in
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 
-theorem Equiv.cg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
+theorem Equiv.cg_iff {N : Type*} [L.Structure N] (f : M ≃[L] N) :
     Structure.CG L M ↔ Structure.CG L N :=
   ⟨fun h => h.map_of_surjective f.toHom f.toEquiv.surjective, fun h =>
     h.map_of_surjective f.symm.toHom f.toEquiv.symm.surjective⟩
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2022 Aaron Anderson. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Aaron Anderson
-
-! This file was ported from Lean 3 source module model_theory.finitely_generated
-! leanprover-community/mathlib commit 0602c59878ff3d5f71dea69c2d32ccf2e93e5398
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.ModelTheory.Substructures
 
+#align_import model_theory.finitely_generated from "leanprover-community/mathlib"@"0602c59878ff3d5f71dea69c2d32ccf2e93e5398"
+
 /-!
 # Finitely Generated First-Order Structures
 This file defines what it means for a first-order (sub)structure to be finitely or countably
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -53,7 +53,7 @@ theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ clo
 #align first_order.language.substructure.fg_def FirstOrder.Language.Substructure.fg_def
 
 theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
-    N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), closure L (range s) = N := by
+    N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), closure L (range s) = N := by
   rw [fg_def]
   constructor
   · rintro ⟨S, Sfin, hS⟩
chore: tidy various files (#4003)
Diff
@@ -28,12 +28,7 @@ this definition of finite generation to define the others.
 
 -/
 
-
-set_option linter.uppercaseLean3 false
-
-open FirstOrder
-
-open Set
+open FirstOrder Set
 
 namespace FirstOrder
 
@@ -194,6 +189,8 @@ open Substructure
 
 namespace Structure
 
+set_option linter.uppercaseLean3 false
+
 variable (L) (M)
 
 /-- A structure is finitely generated if it is the closure of a finite subset. -/
@@ -212,7 +209,7 @@ theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_def
 
-/-- An equivalent expression of `Structure.fg` in terms of `Set.Finite` instead of `Finset`. -/
+/-- An equivalent expression of `Structure.FG` in terms of `Set.Finite` instead of `Finset`. -/
 theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [fg_def, Substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
@@ -278,6 +275,7 @@ theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Struc
   · have h := h.map S.subtype.toHom
     rw [← Hom.range_eq_map, range_subtype] at h
     exact h
+set_option linter.uppercaseLean3 false in
 #align first_order.language.substructure.fg_iff_Structure_fg FirstOrder.Language.Substructure.fg_iff_structure_fg
 
 theorem Equiv.cg_iff {N : Type _} [L.Structure N] (f : M ≃[L] N) :
@@ -294,6 +292,7 @@ theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Struc
   · have h := h.map S.subtype.toHom
     rw [← Hom.range_eq_map, range_subtype] at h
     exact h
+set_option linter.uppercaseLean3 false in
 #align first_order.language.substructure.cg_iff_Structure_cg FirstOrder.Language.Substructure.cg_iff_structure_cg
 
 end Language
doc: fix the docs on ModelTheory/* (#3968)
Diff
@@ -16,10 +16,10 @@ This file defines what it means for a first-order (sub)structure to be finitely
 generated, similarly to other finitely-generated objects in the algebra library.
 
 ## Main Definitions
-* `first_order.language.substructure.FG` indicates that a substructure is finitely generated.
-* `first_order.language.Structure.FG` indicates that a structure is finitely generated.
-* `first_order.language.substructure.CG` indicates that a substructure is countably generated.
-* `first_order.language.Structure.CG` indicates that a structure is countably generated.
+* `FirstOrder.Language.Substructure.FG` indicates that a substructure is finitely generated.
+* `FirstOrder.Language.Structure.FG` indicates that a structure is finitely generated.
+* `FirstOrder.Language.Substructure.CG` indicates that a substructure is countably generated.
+* `FirstOrder.Language.Structure.CG` indicates that a structure is countably generated.
 
 
 ## TODO
@@ -212,7 +212,7 @@ theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG :=
   ⟨fun h => h.1, fun h => ⟨h⟩⟩
 #align first_order.language.Structure.fg_def FirstOrder.Language.Structure.fg_def
 
-/-- An equivalent expression of `Structure.fg` in terms of `set.finite` instead of `finset`. -/
+/-- An equivalent expression of `Structure.fg` in terms of `Set.Finite` instead of `Finset`. -/
 theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) := by
   rw [fg_def, Substructure.fg_def]
 #align first_order.language.Structure.fg_iff FirstOrder.Language.Structure.fg_iff
feat: port ModelTheory.FinitelyGenerated (#3927)

Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Dependencies 8 + 363

364 files ported (97.8%)
150833 lines ported (98.0%)
Show graph

The unported dependencies are