lean4-htt/tests/elab/gring_11543.lean
Garmelon 08eb78a5b2
chore: switch to new test/bench suite (#12590)
This PR sets up the new integrated test/bench suite. It then migrates
all benchmarks and some related tests to the new suite. There's also
some documentation and some linting.

For now, a lot of the old tests are left alone so this PR doesn't become
even larger than it already is. Eventually, all tests should be migrated
to the new suite though so there isn't a confusing mix of two systems.
2026-02-25 13:51:53 +00:00

175 lines
4.3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

section Mathlib.Algebra.Group.Defs
class Monoid (M : Type u) extends Mul M where
class AddGroup (G : Type u) extends Add G, Neg G, Sub G where
theorem add_sub_assoc {G : Type} [AddGroup G] (a b c : G) : a + b - c = a + (b - c) := by
sorry
end Mathlib.Algebra.Group.Defs
abbrev Function.swap {φ : α → β → Sort u₃} (f : ∀ x y, φ x y) : ∀ y x, φ x y := fun y x => f x y
section Mathlib.Algebra.Group.Basic
@[simp]
theorem add_sub_cancel {G} [AddGroup G](a b : G) : a + (b - a) = b := by
sorry
end Mathlib.Algebra.Group.Basic
section Mathlib.Algebra.Order.Monoid.Unbundled.Defs
open Function
variable (M N : Type) (μ : M → N → N) (r : N → N → Prop)
def Covariant : Prop :=
∀ (m) {n₁ n₂}, r n₁ n₂ → r (μ m n₁) (μ m n₂)
class CovariantClass : Prop where
protected elim : Covariant M N μ r
abbrev AddLeftMono [Add M] [LE M] : Prop :=
CovariantClass M M (· + ·) (· ≤ ·)
abbrev AddRightMono [Add M] [LE M] : Prop :=
CovariantClass M M (swap (· + ·)) (· ≤ ·)
instance covariant_swap_add_of_covariant_add [Add N]
[CovariantClass N N (· + ·) r] : CovariantClass N N (swap (· + ·)) r where
elim := sorry
end Mathlib.Algebra.Order.Monoid.Unbundled.Defs
section Mathlib.Algebra.Order.Monoid.Unbundled.Basic
instance Int.instAddLeftMono : AddLeftMono Int where
elim := sorry
end Mathlib.Algebra.Order.Monoid.Unbundled.Basic
section Mathlib.Algebra.Order.Sub.Defs
class OrderedSub (α : Type) [LE α] [Add α] [Sub α] : Prop where
@[simp]
theorem tsub_le_iff_right {α : Type} [LE α] [Add α] [Sub α] [OrderedSub α] {a b c : α} :
a - b ≤ c ↔ a ≤ c + b := sorry
end Mathlib.Algebra.Order.Sub.Defs
section Mathlib.Algebra.Order.Monoid.Unbundled.Basic
instance AddGroup.toOrderedSub {α : Type} [AddGroup α] [LE α]
[AddRightMono α] : OrderedSub α := sorry
end Mathlib.Algebra.Order.Monoid.Unbundled.Basic
section Mathlib.Data.Nat.Cast.Defs
class AddMonoidWithOne (R : Type) extends NatCast R, Add R where
theorem Nat.cast_add [AddMonoidWithOne R] (m n : Nat) : ((m + n : Nat) : R) = m + n := sorry
end Mathlib.Data.Nat.Cast.Defs
section Mathlib.Data.Int.Cast.Defs
class AddGroupWithOne (R : Type) extends IntCast R, AddMonoidWithOne R, AddGroup R where
end Mathlib.Data.Int.Cast.Defs
section Mathlib.Data.Int.Cast.Basic
namespace Int
variable {R : Type} [AddGroupWithOne R]
@[norm_cast]
theorem cast_subNatNat (m n) : ((Int.subNatNat m n : Int) : R) = m - n := sorry
end Int
end Mathlib.Data.Int.Cast.Basic
section Mathlib.Algebra.Group.Int.Defs
namespace Int
instance instCommMonoid : Monoid Int where
instance instAddCommGroup : AddGroup Int where
instance instCommSemigroup : Mul Int := by infer_instance
end Int
end Mathlib.Algebra.Group.Int.Defs
section Mathlib.Algebra.Ring.Defs
class NonAssocSemiring (α : Type) extends Add α, Mul α, Zero α
class NonAssocRing (α : Type) extends AddGroup α, NonAssocSemiring α
class Ring (R : Type) extends NonAssocSemiring R, AddGroupWithOne R
section NonAssocRing
variable {α : Type} [NonAssocRing α]
theorem mul_sub_left_distrib (a b c : α) : a * (b - c) = a * b - a * c := sorry
end NonAssocRing
section Ring
variable {α : Type} [Ring α]
instance (priority := 100) Ring.toNonAssocRing : NonAssocRing α :=
{ Ring α with }
end Ring
class CommRing (α : Type) extends Ring α, Monoid α
end Mathlib.Algebra.Ring.Defs
section Mathlib.Algebra.Ring.Int.Defs
namespace Int
instance instCommRing : CommRing Int where
intCast := (·)
end Int
end Mathlib.Algebra.Ring.Int.Defs
example {a b : Nat}
(this : (b : Int) + ↑b * (↑a - ↑b) ≤ (↑b + (↑a - ↑b))) :
a * b ≤ a + b * b := by
simp [mul_sub_left_distrib, ← add_sub_assoc] at this
norm_cast at this
grind
/--
info: Try this:
[apply] simp only [mul_sub_left_distrib, ← add_sub_assoc, add_sub_cancel, tsub_le_iff_right] at this
-/
#guard_msgs in
example {a b : Nat}
(this : (b : Int) + ↑b * (↑a - ↑b) ≤ (↑b + (↑a - ↑b))) :
a * b ≤ a + b * b := by
simp? [mul_sub_left_distrib, ← add_sub_assoc] at this
norm_cast at this
grind
example {a b : Nat}
(this : (b : Int) + ↑b * (↑a - ↑b) ≤ (↑b + (↑a - ↑b))) :
a * b ≤ a + b * b := by
simp only [mul_sub_left_distrib, ← add_sub_assoc, add_sub_cancel, tsub_le_iff_right] at this
norm_cast at this
grind