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.
175 lines
4.3 KiB
Text
175 lines
4.3 KiB
Text
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
|