internlm/Lean-Github huggingface dataset:
Theorem: GroupRing.first_arg_invariant
Proof state before:
case cons.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
rel' : ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂) := cons a x s₁ s₂ r
prev : mul ((a, x) :: s₁) tail' ≈ mul ((a, x) :: s₂) tail' :=
  first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel'
pl : coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀ := congrFun prev x₀
⊢ monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₁) tail') x₀ =
    monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
Tactic:
rw [pl]
Proof state after:
case cons.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
rel' : ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂) := cons a x s₁ s₂ r
prev : mul ((a, x) :: s₁) tail' ≈ mul ((a, x) :: s₂) tail' :=
  first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel'
pl : coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀ := congrFun prev x₀
⊢ monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ =
    monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case cons.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
rel' : ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂) := cons a x s₁ s₂ r
prev : mul ((a, x) :: s₁) tail' ≈ mul ((a, x) :: s₂) tail' :=
  first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel'
pl : coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀ := congrFun prev x₀
⊢ monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ =
    monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
Tactic:
let ps := mul_monom_invariant b h x₀ s₁ s₂ r
Proof state after:
case cons.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
rel' : ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂) := cons a x s₁ s₂ r
prev : mul ((a, x) :: s₁) tail' ≈ mul ((a, x) :: s₂) tail' :=
  first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel'
pl : coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀ := congrFun prev x₀
ps : coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀ := mul_monom_invariant b h x₀ s₁ s₂ r
⊢ monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ =
    monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case cons.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
rel' : ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂) := cons a x s₁ s₂ r
prev : mul ((a, x) :: s₁) tail' ≈ mul ((a, x) :: s₂) tail' :=
  first_arg_invariant ((a, x) :: s₁) ((a, x) :: s₂) tail' rel'
pl : coords (mul ((a, x) :: s₁) tail') x₀ = coords (mul ((a, x) :: s₂) tail') x₀ := congrFun prev x₀
ps : coords (mulMonom b h s₁) x₀ = coords (mulMonom b h s₂) x₀ := mul_monom_invariant b h x₀ s₁ s₂ r
⊢ monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₁) x₀ + coords (mul ((a, x) :: s₂) tail') x₀ =
    monomCoeff R G x₀ (a * b, x * h) + coords (mulMonom b h s₂) x₀ + coords (mul ((a, x) :: s₂) tail') x₀
Tactic:
rw [ps]
Proof state after:
no goals
Theorem: GroupRing.first_arg_invariant
Proof state before:
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
⊢ ElementaryMove R G ((a, x) :: s₁) ((a, x) :: s₂)
Tactic:
apply ElementaryMove.cons
Proof state after:
case a
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
⊢ ElementaryMove R G s₁ s₂
Theorem: GroupRing.first_arg_invariant
Proof state before:
case a
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁✝ s₂✝ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a : R
x : G
s₁ s₂ : FormalSum R G
r : ElementaryMove R G s₁ s₂
a_ih✝ : mul s₁ ((b, h) :: tail') ≈ mul s₂ ((b, h) :: tail')
x₀ : G
⊢ ElementaryMove R G s₁ s₂
Tactic:
assumption
Proof state after:
no goals
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
⊢ mul ((a₁, x₁) :: (a₂, x₂) :: tail) ((b, h) :: tail') ≈ mul ((a₂, x₂) :: (a₁, x₁) :: tail) ((b, h) :: tail')
Tactic:
simp [mul]
Proof state after:
case swap
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
⊢ mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' ≈
    mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
⊢ mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' ≈
    mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail'
Tactic:
apply funext
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
⊢ ∀ (x : G),
    coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x =
      coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
⊢ ∀ (x : G),
    coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x =
      coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x
Tactic:
intro x₀
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail) ++ mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [← append_coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail) ++ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [← append_coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords (mulMonom b h ((a₁, x₁) :: (a₂, x₂) :: tail)) x₀ + coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [mulMonom]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords ((a₁ * b, x₁ * h) :: mulMonom b h ((a₂, x₂) :: tail)) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords ((a₁ * b, x₁ * h) :: mulMonom b h ((a₂, x₂) :: tail)) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [mulMonom]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords ((a₁ * b, x₁ * h) :: (a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ coords ((a₁ * b, x₁ * h) :: (a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords ((a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords ((a₂ * b, x₂ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords (mulMonom b h ((a₂, x₂) :: (a₁, x₁) :: tail)) x₀ + coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [mulMonom]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords ((a₂ * b, x₂ * h) :: mulMonom b h ((a₁, x₁) :: tail)) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords ((a₂ * b, x₂ * h) :: mulMonom b h ((a₁, x₁) :: tail)) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [mulMonom]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords ((a₂ * b, x₂ * h) :: (a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    coords ((a₂ * b, x₂ * h) :: (a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords ((a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords ((a₁ * b, x₁ * h) :: mulMonom b h tail) x₀ +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
rw [coords]
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
let rel' : ElementaryMove R G 
  ((a₁, x₁) :: (a₂, x₂) :: tail)
    ((a₂, x₂) :: (a₁, x₁) :: tail) := by 
    apply ElementaryMove.swap
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
rel' : ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) := swap a₁ a₂ x₁ x₂ tail
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Theorem: GroupRing.first_arg_invariant
Proof state before:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
rel' : ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) := swap a₁ a₂ x₁ x₂ tail
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀
Tactic:
let prev  := first_arg_invariant  _ _ tail' rel'
Proof state after:
case swap.h
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
s₁ s₂ : FormalSum R G
head' : R × G
tail' : List (R × G)
b : R
h : G
a₁ a₂ : R
x₁ x₂ : G
tail : FormalSum R G
x₀ : G
rel' : ElementaryMove R G ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) := swap a₁ a₂ x₁ x₂ tail
prev : mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail' ≈ mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail' :=
  first_arg_invariant ((a₁, x₁) :: (a₂, x₂) :: tail) ((a₂, x₂) :: (a₁, x₁) :: tail) tail' rel'
⊢ monomCoeff R G x₀ (a₁ * b, x₁ * h) + (monomCoeff R G x₀ (a₂ * b, x₂ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₁, x₁) :: (a₂, x₂) :: tail) tail') x₀ =
    monomCoeff R G x₀ (a₂ * b, x₂ * h) + (monomCoeff R G x₀ (a₁ * b, x₁ * h) + coords (mulMonom b h tail) x₀) +
      coords (mul ((a₂, x₂) :: (a₁, x₁) :: tail) tail') x₀