imo.imo2019_q2Archive.Imo.Imo2019Q2

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -222,7 +222,7 @@ theorem QP_parallel_BA : line[ℝ, cfg.q, cfg.P] ∥ line[ℝ, cfg.b, cfg.A] :=
 theorem a_ne_a₁ : cfg.A ≠ cfg.a₁ := by
   intro h
   have h' := cfg.not_collinear_ABC
-  rw [h, Set.insert_comm] at h' 
+  rw [h, Set.insert_comm] at h'
   exact h' cfg.wbtw_B_A₁_C.collinear
 #align imo2019_q2.imo2019q2_cfg.A_ne_A₁ Imo2019Q2.Imo2019q2Cfg.a_ne_a₁
 
@@ -238,9 +238,9 @@ theorem collinear_PAA₁A₂ : Collinear ℝ ({cfg.P, cfg.A, cfg.a₁, cfg.a₂}
 theorem a₁_ne_c : cfg.a₁ ≠ cfg.C := by
   intro h
   have hsbtw := cfg.sbtw_Q_A₁_Q₁
-  rw [h] at hsbtw 
+  rw [h] at hsbtw
   have ha := hsbtw.angle₂₃₁_eq_zero
-  rw [angle_CQ₁Q_eq_angle_CBA, angle_comm] at ha 
+  rw [angle_CQ₁Q_eq_angle_CBA, angle_comm] at ha
   exact (angle_ne_zero_of_not_collinear cfg.not_collinear_ABC) ha
 #align imo2019_q2.imo2019q2_cfg.A₁_ne_C Imo2019Q2.Imo2019q2Cfg.a₁_ne_c
 
@@ -255,7 +255,7 @@ theorem q_not_mem_CB : cfg.q ∉ line[ℝ, cfg.C, cfg.b] :=
     affineSpan_pair_le_of_mem_of_mem hQ cfg.wbtw_B_A₁_C.symm.mem_affine_span
   have hQ₁ : cfg.Q₁ ∈ line[ℝ, cfg.C, cfg.B] :=
     by
-    rw [AffineSubspace.le_def'] at hQA₁ 
+    rw [AffineSubspace.le_def'] at hQA₁
     exact hQA₁ _ cfg.sbtw_Q_A₁_Q₁.right_mem_affine_span
   have hc : Collinear ℝ ({cfg.C, cfg.Q₁, cfg.Q} : Set Pt) :=
     haveI hc' : Collinear ℝ ({cfg.B, cfg.C, cfg.Q₁, cfg.Q} : Set Pt) :=
@@ -265,14 +265,14 @@ theorem q_not_mem_CB : cfg.q ∉ line[ℝ, cfg.C, cfg.b] :=
       exact collinear_insert_insert_of_mem_affineSpan_pair hQ₁ hQ
     hc'.subset (Set.subset_insert _ _)
   rw [collinear_iff_eq_or_eq_or_angle_eq_zero_or_angle_eq_pi, cfg.angle_CQ₁Q_eq_angle_CBA,
-    or_iff_right cfg.C_ne_Q₁, or_iff_right cfg.sbtw_Q_A₁_Q₁.left_ne_right, angle_comm] at hc 
+    or_iff_right cfg.C_ne_Q₁, or_iff_right cfg.sbtw_Q_A₁_Q₁.left_ne_right, angle_comm] at hc
   exact cfg.not_collinear_ABC (hc.elim collinear_of_angle_eq_zero collinear_of_angle_eq_pi)
 #align imo2019_q2.imo2019q2_cfg.Q_not_mem_CB Imo2019Q2.Imo2019q2Cfg.q_not_mem_CB
 
 theorem q_ne_b : cfg.q ≠ cfg.b := by
   intro h
   have h' := cfg.Q_not_mem_CB
-  rw [h] at h' 
+  rw [h] at h'
   exact h' (right_mem_affineSpan_pair _ _ _)
 #align imo2019_q2.imo2019q2_cfg.Q_ne_B Imo2019Q2.Imo2019q2Cfg.q_ne_b
 
@@ -311,7 +311,7 @@ end Oriented
 theorem a₁_ne_b : cfg.a₁ ≠ cfg.b := by
   intro h
   have hwbtw := cfg.wbtw_A_P_A₁
-  rw [h] at hwbtw 
+  rw [h] at hwbtw
   have hPQ : line[ℝ, cfg.P, cfg.Q] = line[ℝ, cfg.A, cfg.B] :=
     by
     rw [AffineSubspace.eq_iff_direction_eq_of_mem (left_mem_affineSpan_pair _ _ _)
@@ -340,7 +340,7 @@ theorem a₁_ne_b : cfg.a₁ ≠ cfg.b := by
       (Set.mem_insert_of_mem _
         (Set.mem_insert_of_mem _ (Set.mem_insert_of_mem _ (Set.mem_singleton _))))
       hBQ₁ cfg.Q_ne_B.symm hQQ₁.symm
-  rw [affineIndependent_iff_not_collinear_set] at hBQ₁Q 
+  rw [affineIndependent_iff_not_collinear_set] at hBQ₁Q
   refine' hBQ₁Q _
   rw [← h, Set.pair_comm, Set.insert_comm]
   exact cfg.sbtw_Q_A₁_Q₁.wbtw.collinear
@@ -377,7 +377,7 @@ theorem a₂_ne_p : cfg.a₂ ≠ cfg.P :=
 theorem a₂_ne_b : cfg.a₂ ≠ cfg.b := by
   intro h
   have h₁ := cfg.sbtw_A_A₁_A₂
-  rw [h] at h₁ 
+  rw [h] at h₁
   refine' cfg.not_collinear_ABC _
   have hc : Collinear ℝ ({cfg.A, cfg.C, cfg.B, cfg.A₁} : Set Pt) :=
     collinear_insert_insert_of_mem_affineSpan_pair h₁.left_mem_affine_span
@@ -390,7 +390,7 @@ theorem a₂_ne_b : cfg.a₂ ≠ cfg.b := by
 theorem a₂_ne_c : cfg.a₂ ≠ cfg.C := by
   intro h
   have h₁ := cfg.sbtw_A_A₁_A₂
-  rw [h] at h₁ 
+  rw [h] at h₁
   refine' cfg.not_collinear_ABC _
   have hc : Collinear ℝ ({cfg.A, cfg.B, cfg.C, cfg.A₁} : Set Pt) :=
     collinear_insert_insert_of_mem_affineSpan_pair h₁.left_mem_affine_span
@@ -466,14 +466,14 @@ theorem not_collinear_QPA₂ : ¬Collinear ℝ ({cfg.q, cfg.P, cfg.a₂} : Set P
 theorem q₁_ne_a₂ : cfg.q₁ ≠ cfg.a₂ := by
   intro h
   have h₁ := cfg.sbtw_Q_A₁_Q₁
-  rw [h] at h₁ 
+  rw [h] at h₁
   refine' cfg.not_collinear_QPA₂ _
   have hA₂ := cfg.sbtw_A_A₁_A₂.right_mem_affine_span
   have hA₂A₁ : line[ℝ, cfg.A₂, cfg.A₁] ≤ line[ℝ, cfg.A, cfg.A₁] :=
     affineSpan_pair_le_of_left_mem hA₂
   have hQ : cfg.Q ∈ line[ℝ, cfg.A, cfg.A₁] :=
     by
-    rw [AffineSubspace.le_def'] at hA₂A₁ 
+    rw [AffineSubspace.le_def'] at hA₂A₁
     exact hA₂A₁ _ h₁.left_mem_affine_span
   exact collinear_triple_of_mem_affineSpan_pair hQ cfg.wbtw_A_P_A₁.mem_affine_span hA₂
 #align imo2019_q2.imo2019q2_cfg.Q₁_ne_A₂ Imo2019Q2.Imo2019q2Cfg.q₁_ne_a₂
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 -/
-import Mathbin.Geometry.Euclidean.Angle.Sphere
-import Mathbin.Geometry.Euclidean.Sphere.SecondInter
+import Geometry.Euclidean.Angle.Sphere
+import Geometry.Euclidean.Sphere.SecondInter
 
 #align_import imo.imo2019_q2 from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module imo.imo2019_q2
-! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Geometry.Euclidean.Angle.Sphere
 import Mathbin.Geometry.Euclidean.Sphere.SecondInter
 
+#align_import imo.imo2019_q2 from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
+
 /-!
 # IMO 2019 Q2
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
 
 ! This file was ported from Lean 3 source module imo.imo2019_q2
-! leanprover-community/mathlib commit 308826471968962c6b59c7ff82a22757386603e3
+! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Geometry.Euclidean.Sphere.SecondInter
 /-!
 # IMO 2019 Q2
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In triangle `ABC`, point `A₁` lies on side `BC` and point `B₁` lies on side `AC`. Let `P` and
 `Q` be points on segments `AA₁` and `BB₁`, respectively, such that `PQ` is parallel to `AB`.
 Let `P₁` be a point on line `PB₁`, such that `B₁` lies strictly between `P` and `P₁`, and
Diff
@@ -458,7 +458,7 @@ theorem not_collinear_QPA₂ : ¬Collinear ℝ ({cfg.q, cfg.P, cfg.a₂} : Set P
   have h : cospherical ({cfg.B, cfg.A, cfg.A₂} : Set Pt) :=
     by
     refine' cfg.triangle_ABC.circumsphere.cospherical.subset _
-    simp [Set.insert_subset, cfg.A_mem_circumsphere, cfg.B_mem_circumsphere,
+    simp [Set.insert_subset_iff, cfg.A_mem_circumsphere, cfg.B_mem_circumsphere,
       cfg.A₂_mem_circumsphere]
   exact h.affine_independent_of_ne cfg.A_ne_B.symm cfg.A₂_ne_B.symm cfg.A₂_ne_A.symm
 #align imo2019_q2.imo2019q2_cfg.not_collinear_QPA₂ Imo2019Q2.Imo2019q2Cfg.not_collinear_QPA₂
@@ -656,7 +656,7 @@ theorem result : Concyclic ({cfg.P, cfg.q, cfg.p₁, cfg.q₁} : Set Pt) :=
   refine' ⟨_, coplanar_of_fact_finrank_eq_two _⟩
   rw [cospherical_iff_exists_sphere]
   refine' ⟨cfg.ω, _⟩
-  simp only [Set.insert_subset, Set.singleton_subset_iff]
+  simp only [Set.insert_subset_iff, Set.singleton_subset_iff]
   exact ⟨cfg.P_mem_ω, cfg.Q_mem_ω, cfg.P₁_mem_ω, cfg.Q₁_mem_ω⟩
 #align imo2019_q2.imo2019q2_cfg.result Imo2019Q2.Imo2019q2Cfg.result
 
Diff
@@ -74,8 +74,6 @@ variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace Pt]
 
 variable [NormedAddTorsor V Pt] [hd2 : Fact (finrank ℝ V = 2)]
 
-include hd2
-
 namespace imo2019_q2
 
 noncomputable section
Diff
@@ -534,7 +534,6 @@ theorem two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂ :
         cfg.b₂_ne_a₂)
     _ = (2 : ℤ) • ∡ cfg.q cfg.b₂ cfg.a₂ := by
       rw [cfg.wbtw_B_Q_B₂.symm.oangle_eq_left cfg.B₂_ne_Q.symm]
-    
 #align imo2019_q2.imo2019q2_cfg.two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂ Imo2019Q2.Imo2019q2Cfg.two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_QB₂A₂
 
 end Oriented
@@ -583,7 +582,6 @@ theorem two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA :
       Sphere.two_zsmul_oangle_eq cfg.c_mem_circumsphere cfg.a₂_mem_circumsphere
         cfg.b_mem_circumsphere cfg.a_mem_circumsphere cfg.a₂_ne_c cfg.a₂_ne_a cfg.b_ne_c
         cfg.a_ne_b.symm
-    
 #align imo2019_q2.imo2019q2_cfg.two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA Imo2019Q2.Imo2019q2Cfg.two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA
 
 theorem two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁ :
@@ -593,7 +591,6 @@ theorem two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁ :
       cfg.two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CBA
     _ = (2 : ℤ) • ∡ cfg.C cfg.q₁ cfg.q := by rw [oangle_CQ₁Q_eq_oangle_CBA]
     _ = (2 : ℤ) • ∡ cfg.C cfg.q₁ cfg.a₁ := by rw [cfg.sbtw_Q_A₁_Q₁.symm.oangle_eq_right]
-    
 #align imo2019_q2.imo2019q2_cfg.two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁ Imo2019Q2.Imo2019q2Cfg.two_zsmul_oangle_CA₂A₁_eq_two_zsmul_oangle_CQ₁A₁
 
 end Oriented
@@ -640,7 +637,6 @@ theorem two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂ :
         cfg.a_mem_circumsphere cfg.a₂_mem_circumsphere cfg.b_ne_c.symm cfg.a₂_ne_c.symm cfg.a_ne_b
         cfg.a₂_ne_a.symm)
     _ = (2 : ℤ) • ∡ cfg.q cfg.P cfg.a₂ := cfg.two_zsmul_oangle_QPA₂_eq_two_zsmul_oangle_BAA₂.symm
-    
 #align imo2019_q2.imo2019q2_cfg.two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂ Imo2019Q2.Imo2019q2Cfg.two_zsmul_oangle_QQ₁A₂_eq_two_zsmul_oangle_QPA₂
 
 end Oriented

Changes in mathlib4

mathlib3
mathlib4
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -68,9 +68,7 @@ set_option linter.uppercaseLean3 false
 attribute [local instance] FiniteDimensional.of_fact_finrank_eq_two
 
 variable (V : Type*) (Pt : Type*)
-
 variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace Pt]
-
 variable [NormedAddTorsor V Pt] [hd2 : Fact (finrank ℝ V = 2)]
 
 namespace Imo2019Q2
Add Commute.orderOf_mul_pow_eq_lcm (#11235)

We add Commute.orderOf_mul_pow_eq_lcm: if two commuting elements x and y of a monoid have order n and m, there is an element of order lcm n m. The result actually gives an explicit (computable) element, written as the product of a power of x and a power of y.

Co-authored-by: Junyan Xu <[junyanxu.math@gmail.com](mailto:junyanxu.math@gmail.com)>

Diff
@@ -32,7 +32,7 @@ angle chase / concyclicity argument, where an informal solution doesn't discuss
 at all. Also note that (as described in `Geometry.Euclidean.Angle.Oriented.Basic`) the oriented
 angles used are modulo `2 * π`, so parts of the angle chase that are only valid for angles modulo
 `π` (as used in the informal solution) are represented as equalities of twice angles, which we write
-as `(2 : ℤ) • ∡ _ _ _ = (2 : ℤ) • _ _ _`.
+as `(2 : ℤ) • ∡ _ _ _ = (2 : ℤ) • ∡ _ _ _`.
 -/
 
 
chore(FiniteDimensional): rename lemmas (#10188)

Rename lemmas to enable new-style dot notation or drop repeating FiniteDimensional.finiteDimensional_*. Restore old names as deprecated aliases.

Diff
@@ -65,7 +65,7 @@ open scoped Affine EuclideanGeometry Real
 
 set_option linter.uppercaseLean3 false
 
-attribute [local instance] FiniteDimensional.finiteDimensional_of_fact_finrank_eq_two
+attribute [local instance] FiniteDimensional.of_fact_finrank_eq_two
 
 variable (V : Type*) (Pt : Type*)
 
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -442,7 +442,7 @@ theorem not_collinear_QPA₂ : ¬Collinear ℝ ({cfg.Q, cfg.P, cfg.A₂} : Set P
   have h : Cospherical ({cfg.B, cfg.A, cfg.A₂} : Set Pt) := by
     refine' cfg.triangleABC.circumsphere.cospherical.subset _
     simp only [Set.insert_subset_iff, cfg.A_mem_circumsphere, cfg.B_mem_circumsphere,
-      cfg.A₂_mem_circumsphere, Sphere.mem_coe, Set.singleton_subset_iff]
+      cfg.A₂_mem_circumsphere, Sphere.mem_coe, Set.singleton_subset_iff, and_true]
   exact h.affineIndependent_of_ne cfg.A_ne_B.symm cfg.A₂_ne_B.symm cfg.A₂_ne_A.symm
 #align imo2019_q2.imo2019q2_cfg.not_collinear_QPA₂ Imo2019Q2.Imo2019q2Cfg.not_collinear_QPA₂
 
feat: vertex replacement (#6808)

cliqueFree_of_replaceVertex_cliqueFree is still quite long.

Diff
@@ -67,7 +67,7 @@ set_option linter.uppercaseLean3 false
 
 attribute [local instance] FiniteDimensional.finiteDimensional_of_fact_finrank_eq_two
 
-variable (V : Type _) (Pt : Type _)
+variable (V : Type*) (Pt : Type*)
 
 variable [NormedAddCommGroup V] [InnerProductSpace ℝ V] [MetricSpace Pt]
 
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,15 +2,12 @@
 Copyright (c) 2022 Joseph Myers. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module imo.imo2019_q2
-! leanprover-community/mathlib commit 308826471968962c6b59c7ff82a22757386603e3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Geometry.Euclidean.Angle.Sphere
 import Mathlib.Geometry.Euclidean.Sphere.SecondInter
 
+#align_import imo.imo2019_q2 from "leanprover-community/mathlib"@"308826471968962c6b59c7ff82a22757386603e3"
+
 /-!
 # IMO 2019 Q2
 
feat: actions of DomMulAct on A →[N] B and A →+[N] B (#5378)

Refs #5379

Dependencies 12 + 1003

1004 files ported (98.8%)
440333 lines ported (98.7%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file