l3lab/ntp-mathlib huggingface dataset:
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · 

Proof state:
case mpr
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
⊢ multiplicity a x ≤ 1 ∨ IsUnit a

Next tactic:
rw [or_iff_not_imp_right]
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    

Proof state:
case mpr
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
⊢ ¬IsUnit a → multiplicity a x ≤ 1

Next tactic:
intro hu
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    

Proof state:
case mpr
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
⊢ multiplicity a x ≤ 1

Next tactic:
by_cases h0 : a = 0
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · 

Proof state:
case pos
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
h0 : a = 0
⊢ multiplicity a x ≤ 1

Next tactic:
simp [h0, x0]
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · simp [h0, x0]
    

Proof state:
case neg
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
h0 : ¬a = 0
⊢ multiplicity a x ≤ 1

Next tactic:
rcases WfDvdMonoid.exists_irreducible_factor hu h0 with ⟨b, hib, hdvd⟩
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · simp [h0, x0]
    rcases WfDvdMonoid.exists_irreducible_factor hu h0 with ⟨b, hib, hdvd⟩
    

Proof state:
case neg.intro.intro
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
h0 : ¬a = 0
b : R
hib : Irreducible b
hdvd : b ∣ a
⊢ multiplicity a x ≤ 1

Next tactic:
apply le_trans (multiplicity.multiplicity_le_multiplicity_of_dvd_left hdvd)
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · simp [h0, x0]
    rcases WfDvdMonoid.exists_irreducible_factor hu h0 with ⟨b, hib, hdvd⟩
    apply le_trans (multiplicity.multiplicity_le_multiplicity_of_dvd_left hdvd)
    

Proof state:
case neg.intro.intro
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
h0 : ¬a = 0
b : R
hib : Irreducible b
hdvd : b ∣ a
⊢ multiplicity b x ≤ 1

Next tactic:
rw [multiplicity_eq_count_normalizedFactors hib x0]
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · simp [h0, x0]
    rcases WfDvdMonoid.exists_irreducible_factor hu h0 with ⟨b, hib, hdvd⟩
    apply le_trans (multiplicity.multiplicity_le_multiplicity_of_dvd_left hdvd)
    rw [multiplicity_eq_count_normalizedFactors hib x0]
    

Proof state:
case neg.intro.intro
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
h : ∀ (a : R), Multiset.count a (normalizedFactors x) ≤ 1
a : R
hu : ¬IsUnit a
h0 : ¬a = 0
b : R
hib : Irreducible b
hdvd : b ∣ a
⊢ ↑(Multiset.count (normalize b) (normalizedFactors x)) ≤ 1

Next tactic:
specialize h (normalize b)
theorem squarefree_iff_nodup_normalizedFactors [NormalizationMonoid R] [DecidableEq R] {x : R}
    (x0 : x ≠ 0) : Squarefree x ↔ Multiset.Nodup (normalizedFactors x) := by
  have drel : DecidableRel (Dvd.dvd : R → R → Prop) := by classical infer_instance
  rw [multiplicity.squarefree_iff_multiplicity_le_one, Multiset.nodup_iff_count_le_one]
  haveI := nontrivial_of_ne x 0 x0
  constructor <;> intro h a
  · by_cases hmem : a ∈ normalizedFactors x
    · have ha := irreducible_of_normalized_factor _ hmem
      rcases h a with (h | h)
      · rw [← normalize_normalized_factor _ hmem]
        rw [multiplicity_eq_count_normalizedFactors ha x0] at h
        assumption_mod_cast
      · have := ha.1
        contradiction
    · simp [Multiset.count_eq_zero_of_not_mem hmem]
  · rw [or_iff_not_imp_right]
    intro hu
    by_cases h0 : a = 0
    · simp [h0, x0]
    rcases WfDvdMonoid.exists_irreducible_factor hu h0 with ⟨b, hib, hdvd⟩
    apply le_trans (multiplicity.multiplicity_le_multiplicity_of_dvd_left hdvd)
    rw [multiplicity_eq_count_normalizedFactors hib x0]
    specialize h (normalize b)
    

Proof state:
case neg.intro.intro
R : Type u_1
inst✝³ : CancelCommMonoidWithZero R
inst✝² : UniqueFactorizationMonoid R
inst✝¹ : NormalizationMonoid R
inst✝ : DecidableEq R
x : R
x0 : x ≠ 0
drel : DecidableRel Dvd.dvd
this : Nontrivial R
a : R
hu : ¬IsUnit a
h0 : ¬a = 0
b : R
hib : Irreducible b
hdvd : b ∣ a
h : Multiset.count (normalize b) (normalizedFactors x) ≤ 1
⊢ ↑(Multiset.count (normalize b) (normalizedFactors x)) ≤ 1

Next tactic:
assumption_mod_cast
theorem dvd_pow_iff_dvd_of_squarefree {x y : R} {n : ℕ} (hsq : Squarefree x) (h0 : n ≠ 0) :
    x ∣ y ^ n ↔ x ∣ y := by
  

Proof state:
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
inst✝ : UniqueFactorizationMonoid R
x y : R
n : ℕ
hsq : Squarefree x
h0 : n ≠ 0
⊢ x ∣ y ^ n ↔ x ∣ y

Next tactic:
classical
    haveI := UniqueFactorizationMonoid.toGCDMonoid R
    exact ⟨hsq.isRadical n y, fun h => h.pow h0⟩
theorem dvd_pow_iff_dvd_of_squarefree {x y : R} {n : ℕ} (hsq : Squarefree x) (h0 : n ≠ 0) :
    x ∣ y ^ n ↔ x ∣ y := by
  classical
    

Proof state:
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
inst✝ : UniqueFactorizationMonoid R
x y : R
n : ℕ
hsq : Squarefree x
h0 : n ≠ 0
⊢ x ∣ y ^ n ↔ x ∣ y

Next tactic:
haveI := UniqueFactorizationMonoid.toGCDMonoid R
theorem dvd_pow_iff_dvd_of_squarefree {x y : R} {n : ℕ} (hsq : Squarefree x) (h0 : n ≠ 0) :
    x ∣ y ^ n ↔ x ∣ y := by
  classical
    haveI := UniqueFactorizationMonoid.toGCDMonoid R
    

Proof state:
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
inst✝ : UniqueFactorizationMonoid R
x y : R
n : ℕ
hsq : Squarefree x
h0 : n ≠ 0
this : GCDMonoid R
⊢ x ∣ y ^ n ↔ x ∣ y

Next tactic:
exact ⟨hsq.isRadical n y, fun h => h.pow h0⟩
@[simp]
theorem squarefree_natAbs {n : ℤ} : Squarefree n.natAbs ↔ Squarefree n := by
  

Proof state:
R : Type u_1
n : ℤ
⊢ Squarefree (natAbs n) ↔ Squarefree n

Next tactic:
simp_rw [Squarefree, natAbs_surjective.forall, ← natAbs_mul, natAbs_dvd_natAbs,
    isUnit_iff_natAbs_eq, Nat.isUnit_iff]
@[simp]
theorem squarefree_coe_nat {n : ℕ} : Squarefree (n : ℤ) ↔ Squarefree n := by
  

Proof state:
R : Type u_1
n : ℕ
⊢ Squarefree ↑n ↔ Squarefree n

Next tactic:
rw [← squarefree_natAbs, natAbs_ofNat]
/-- The `eval` map is surjective at `x`. -/
lemma smoothSheaf.eval_surjective (x : M) : Function.Surjective (smoothSheaf.eval IM I N x) := by
  

Proof state:
𝕜 : Type u_1
inst✝¹⁹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝¹⁸ : NormedAddCommGroup EM
inst✝¹⁷ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁶ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹³ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹² : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹¹ : TopologicalSpace M
inst✝¹⁰ : ChartedSpace HM M
N G A A' R : Type u
inst✝⁹ : TopologicalSpace N
inst✝⁸ : ChartedSpace H N
inst✝⁷ : TopologicalSpace G
inst✝⁶ : ChartedSpace H G
inst✝⁵ : TopologicalSpace A
inst✝⁴ : ChartedSpace H A
inst✝³ : TopologicalSpace A'
inst✝² : ChartedSpace H' A'
inst✝¹ : TopologicalSpace R
inst✝ : ChartedSpace H R
x : M
⊢ Function.Surjective (eval IM I N x)

Next tactic:
apply TopCat.stalkToFiber_surjective
/-- The `eval` map is surjective at `x`. -/
lemma smoothSheaf.eval_surjective (x : M) : Function.Surjective (smoothSheaf.eval IM I N x) := by
  apply TopCat.stalkToFiber_surjective
  

Proof state:
case w
𝕜 : Type u_1
inst✝¹⁹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝¹⁸ : NormedAddCommGroup EM
inst✝¹⁷ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁶ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹³ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹² : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹¹ : TopologicalSpace M
inst✝¹⁰ : ChartedSpace HM M
N G A A' R : Type u
inst✝⁹ : TopologicalSpace N
inst✝⁸ : ChartedSpace H N
inst✝⁷ : TopologicalSpace G
inst✝⁶ : ChartedSpace H G
inst✝⁵ : TopologicalSpace A
inst✝⁴ : ChartedSpace H A
inst✝³ : TopologicalSpace A'
inst✝² : ChartedSpace H' A'
inst✝¹ : TopologicalSpace R
inst✝ : ChartedSpace H R
x : M
⊢ ∀ (t : N),
    ∃ U f,
      ∃ (_ :
        TopCat.PrelocalPredicate.pred
          (StructureGroupoid.LocalInvariantProp.localPredicate M N
              (_ :
                StructureGroupoid.LocalInvariantProp (contDiffGroupoid ⊤ IM) (contDiffGroupoid ⊤ I)
                  (ContDiffWithinAtProp IM I ⊤))).toPrelocalPredicate
          f),
        f { val := x, property := (_ : x ∈ U.obj) } = t

Next tactic:
intro n
/-- The `eval` map is surjective at `x`. -/
lemma smoothSheaf.eval_surjective (x : M) : Function.Surjective (smoothSheaf.eval IM I N x) := by
  apply TopCat.stalkToFiber_surjective
  intro n
  

Proof state:
case w
𝕜 : Type u_1
inst✝¹⁹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝¹⁸ : NormedAddCommGroup EM
inst✝¹⁷ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁶ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁵ : NormedAddCommGroup E
inst✝¹⁴ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹³ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹² : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹¹ : TopologicalSpace M
inst✝¹⁰ : ChartedSpace HM M
N G A A' R : Type u
inst✝⁹ : TopologicalSpace N
inst✝⁸ : ChartedSpace H N
inst✝⁷ : TopologicalSpace G
inst✝⁶ : ChartedSpace H G
inst✝⁵ : TopologicalSpace A
inst✝⁴ : ChartedSpace H A
inst✝³ : TopologicalSpace A'
inst✝² : ChartedSpace H' A'
inst✝¹ : TopologicalSpace R
inst✝ : ChartedSpace H R
x : M
n : N
⊢ ∃ U f,
    ∃ (_ :
      TopCat.PrelocalPredicate.pred
        (StructureGroupoid.LocalInvariantProp.localPredicate M N
            (_ :
              StructureGroupoid.LocalInvariantProp (contDiffGroupoid ⊤ IM) (contDiffGroupoid ⊤ I)
                (ContDiffWithinAtProp IM I ⊤))).toPrelocalPredicate
        f),
      f { val := x, property := (_ : x ∈ U.obj) } = n

Next tactic:
exact ⟨⊤, fun _ ↦ n, smooth_const, rfl⟩
/-- The sheaf of smooth functions from `M` to `G`, for `G` a Lie group, as a sheaf of
groups. -/
@[to_additive "The sheaf of smooth functions from `M` to `G`, for `G` an additive Lie group, as a
sheaf of additive groups."]
noncomputable def smoothSheafGroup : TopCat.Sheaf GroupCat.{u} (TopCat.of M) :=
  { val := smoothPresheafGroup IM I M G
    cond := by
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : Group G
inst✝ : LieGroup I G
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M)) (smoothPresheafGroup IM I M G)

Next tactic:
rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _ (CategoryTheory.forget GroupCat)]
/-- The sheaf of smooth functions from `M` to `G`, for `G` a Lie group, as a sheaf of
groups. -/
@[to_additive "The sheaf of smooth functions from `M` to `G`, for `G` an additive Lie group, as a
sheaf of additive groups."]
noncomputable def smoothSheafGroup : TopCat.Sheaf GroupCat.{u} (TopCat.of M) :=
  { val := smoothPresheafGroup IM I M G
    cond := by
      rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _ (CategoryTheory.forget GroupCat)]
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : Group G
inst✝ : LieGroup I G
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M))
    (CategoryTheory.Functor.comp (smoothPresheafGroup IM I M G) (CategoryTheory.forget GroupCat))

Next tactic:
exact CategoryTheory.Sheaf.cond (smoothSheaf IM I M G)
/-- The sheaf of smooth functions from `M` to `A`, for `A` an abelian Lie group, as a
sheaf of abelian groups. -/
@[to_additive "The sheaf of smooth functions from `M` to
`A`, for `A` an abelian additive Lie group, as a sheaf of abelian additive groups."]
noncomputable def smoothSheafCommGroup : TopCat.Sheaf CommGroupCat.{u} (TopCat.of M) :=
  { val := smoothPresheafCommGroup IM I M A
    cond := by
      

Proof state:
𝕜 : Type u_1
inst✝²³ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²² : NormedAddCommGroup EM
inst✝²¹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝²⁰ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁹ : NormedAddCommGroup E
inst✝¹⁸ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹⁵ : TopologicalSpace M
inst✝¹⁴ : ChartedSpace HM M
N G A A' R : Type u
inst✝¹³ : TopologicalSpace N
inst✝¹² : ChartedSpace H N
inst✝¹¹ : TopologicalSpace G
inst✝¹⁰ : ChartedSpace H G
inst✝⁹ : TopologicalSpace A
inst✝⁸ : ChartedSpace H A
inst✝⁷ : TopologicalSpace A'
inst✝⁶ : ChartedSpace H' A'
inst✝⁵ : TopologicalSpace R
inst✝⁴ : ChartedSpace H R
inst✝³ : CommGroup A
inst✝² : CommGroup A'
inst✝¹ : LieGroup I A
inst✝ : LieGroup I' A'
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M)) (smoothPresheafCommGroup IM I M A)

Next tactic:
rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _
        (CategoryTheory.forget CommGroupCat)]
/-- The sheaf of smooth functions from `M` to `A`, for `A` an abelian Lie group, as a
sheaf of abelian groups. -/
@[to_additive "The sheaf of smooth functions from `M` to
`A`, for `A` an abelian additive Lie group, as a sheaf of abelian additive groups."]
noncomputable def smoothSheafCommGroup : TopCat.Sheaf CommGroupCat.{u} (TopCat.of M) :=
  { val := smoothPresheafCommGroup IM I M A
    cond := by
      rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _
        (CategoryTheory.forget CommGroupCat)]
      

Proof state:
𝕜 : Type u_1
inst✝²³ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²² : NormedAddCommGroup EM
inst✝²¹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝²⁰ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁹ : NormedAddCommGroup E
inst✝¹⁸ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁷ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹⁵ : TopologicalSpace M
inst✝¹⁴ : ChartedSpace HM M
N G A A' R : Type u
inst✝¹³ : TopologicalSpace N
inst✝¹² : ChartedSpace H N
inst✝¹¹ : TopologicalSpace G
inst✝¹⁰ : ChartedSpace H G
inst✝⁹ : TopologicalSpace A
inst✝⁸ : ChartedSpace H A
inst✝⁷ : TopologicalSpace A'
inst✝⁶ : ChartedSpace H' A'
inst✝⁵ : TopologicalSpace R
inst✝⁴ : ChartedSpace H R
inst✝³ : CommGroup A
inst✝² : CommGroup A'
inst✝¹ : LieGroup I A
inst✝ : LieGroup I' A'
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M))
    (CategoryTheory.Functor.comp (smoothPresheafCommGroup IM I M A) (CategoryTheory.forget CommGroupCat))

Next tactic:
exact CategoryTheory.Sheaf.cond (smoothSheaf IM I M A)