internlm/Lean-Github huggingface dataset:
Theorem: Reactor.ext_obj?
Proof state before:
case val
α : Type
inst✝ : Proper α
rtr₁ : α
hi :
  ∀ (n : Component.type α Component.rtr),
    (∃ i, rtr₁{Component.rtr}{i} = some n) →
      ∀ {rtr₂ : α},
        n ≈ rtr₂ →
          (∀ {c : Component.Valued} {i : Component.idType (Component.val c)}
              {o₁ o₂ : Component.type α (Component.val c)},
              n[Component.val c][i] = some o₁ → rtr₂[Component.val c][i] = some o₂ → o₁ = o₂) →
            n = rtr₂
rtr₂ : α
e : rtr₁ ≈ rtr₂
h :
  ∀ {c : Component.Valued} {i : Component.idType (Component.val c)} {o₁ o₂ : Component.type α (Component.val c)},
    rtr₁[Component.val c][i] = some o₁ → rtr₂[Component.val c][i] = some o₂ → o₁ = o₂
i : ID
v✝ : Component.Valued
n₁ : Component.type α (Component.val v✝)
hc₁ : rtr₁{Component.val v✝}{i} = some n₁
n₂ : Component.type α (Component.val v✝)
hc₂ : rtr₂{Component.val v✝}{i} = some n₂
ho₁ :
  rtr₁[Component.val v✝][match Component.val v✝ with
      | Component.rtr => ↑i
      | Component.rcn => i
      | Component.val v => i] =
    some n₁
ho₂ :
  rtr₂[Component.val v✝][match Component.val v✝ with
      | Component.rtr => ↑i
      | Component.rcn => i
      | Component.val v => i] =
    some n₂
⊢ n₁ = n₂
Tactic:
exact h ho₁ ho₂
Proof state after:
no goals
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
⊢ rtr₂ = rtr₂'
Tactic:
have e₁ := Equivalent.trans u₁.equiv u₂.equiv
Proof state after:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
⊢ rtr₂ = rtr₂'
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
⊢ rtr₂ = rtr₂'
Tactic:
have e₂ := Equivalent.trans u₁'.equiv u₂'.equiv
Proof state after:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
⊢ rtr₂ = rtr₂'
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
⊢ rtr₂ = rtr₂'
Tactic:
have e := Equivalent.trans (Equivalent.symm e₁) e₂
Proof state after:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
⊢ rtr₂ = rtr₂'
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
⊢ rtr₂ = rtr₂'
Tactic:
apply ext_obj? e
Proof state after:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
⊢ ∀ {c : Component.Valued} {i : Component.idType (Component.val c)} {o₁ o₂ : Component.type α (Component.val c)},
    rtr₂[Component.val c][i] = some o₁ → rtr₂'[Component.val c][i] = some o₂ → o₁ = o₂
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
⊢ ∀ {c : Component.Valued} {i : Component.idType (Component.val c)} {o₁ o₂ : Component.type α (Component.val c)},
    rtr₂[Component.val c][i] = some o₁ → rtr₂'[Component.val c][i] = some o₂ → o₁ = o₂
Tactic:
intro cpt i _ _ ho₁ ho₂
Proof state after:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
⊢ o₁✝ = o₂✝
Tactic:
by_cases hc₁ : cpt = cpt₁ <;> by_cases hc₂ : cpt = cpt₂ <;> ((try subst hc₁); try subst hc₂)
Proof state after:
case pos
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝

case neg
α : Type
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₂ : ¬cpt = cpt₂
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
h : cpt ≠ cpt₂ ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝

case pos
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt₁ ≠ cpt ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝

case neg
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
hc₂ : ¬cpt = cpt₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : cpt = cpt₁
hc₂ : ¬cpt = cpt₂
⊢ o₁✝ = o₂✝
Tactic:
(try subst hc₁)
Proof state after:
case neg
α : Type
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₂ : ¬cpt = cpt₂
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
h : cpt ≠ cpt₂ ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case pos
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
hc₂ : cpt = cpt₂
⊢ o₁✝ = o₂✝
Tactic:
try subst hc₂
Proof state after:
case pos
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt₁ ≠ cpt ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : cpt = cpt₁
hc₂ : ¬cpt = cpt₂
⊢ o₁✝ = o₂✝
Tactic:
try subst hc₁
Proof state after:
case neg
α : Type
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₂ : ¬cpt = cpt₂
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
h : cpt ≠ cpt₂ ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : cpt = cpt₁
hc₂ : ¬cpt = cpt₂
⊢ o₁✝ = o₂✝
Tactic:
subst hc₁
Proof state after:
case neg
α : Type
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₂ : ¬cpt = cpt₂
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
h : cpt ≠ cpt₂ ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case pos
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
cpt₂ : Component.Valued
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂ : LawfulUpdate cpt₂ i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt₂ i₂ v₂ rtr rtr₁'
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
h : cpt₁ ≠ cpt₂ ∨ i₁ ≠ i₂
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
hc₂ : cpt = cpt₂
⊢ o₁✝ = o₂✝
Tactic:
subst hc₂
Proof state after:
case pos
α : Type
cpt₁ : Component.Valued
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
u₁ : LawfulUpdate cpt₁ i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt₁ i₁ v₁ rtr₁' rtr₂'
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
hc₁ : ¬cpt = cpt₁
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt₁ ≠ cpt ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case pos
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
⊢ o₁✝ = o₂✝
Tactic:
by_cases hi₁ : i = i₁ <;> by_cases hi₂ : i = i₂ <;> ((try subst hi₁); try subst hi₂)
Proof state after:
case pos
α : Type
v₁ v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i ≠ i
⊢ o₁✝ = o₂✝

case neg
α : Type
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
hi₂ : ¬i = i₂
u₁ : LawfulUpdate cpt i v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i v₁ rtr₁' rtr₂'
h : cpt ≠ cpt ∨ i ≠ i₂
⊢ o₁✝ = o₂✝

case pos
α : Type
i₁ : ID
v₁ v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
hi₁ : ¬i = i₁
u₂ : LawfulUpdate cpt i v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i
⊢ o₁✝ = o₂✝

case neg
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
hi₁ : ¬i = i₁
hi₂ : ¬i = i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
hi₁ : i = i₁
hi₂ : ¬i = i₂
⊢ o₁✝ = o₂✝
Tactic:
(try subst hi₁)
Proof state after:
case neg
α : Type
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
hi₂ : ¬i = i₂
u₁ : LawfulUpdate cpt i v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i v₁ rtr₁' rtr₂'
h : cpt ≠ cpt ∨ i ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case pos
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
hi₁ : ¬i = i₁
hi₂ : i = i₂
⊢ o₁✝ = o₂✝
Tactic:
try subst hi₂
Proof state after:
case pos
α : Type
i₁ : ID
v₁ v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
hi₁ : ¬i = i₁
u₂ : LawfulUpdate cpt i v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
hi₁ : i = i₁
hi₂ : ¬i = i₂
⊢ o₁✝ = o₂✝
Tactic:
try subst hi₁
Proof state after:
case neg
α : Type
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
hi₂ : ¬i = i₂
u₁ : LawfulUpdate cpt i v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i v₁ rtr₁' rtr₂'
h : cpt ≠ cpt ∨ i ≠ i₂
⊢ o₁✝ = o₂✝
Theorem: Reactor.LawfulUpdate.ne_comm
Proof state before:
case neg
α : Type
i₁ : ID
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₁ : LawfulUpdate cpt i₁ v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i₁ v₁ rtr₁' rtr₂'
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
h : cpt ≠ cpt ∨ i₁ ≠ i₂
hi₁ : i = i₁
hi₂ : ¬i = i₂
⊢ o₁✝ = o₂✝
Tactic:
subst hi₁
Proof state after:
case neg
α : Type
v₁ : Value
i₂ : ID
v₂ : Value
inst✝ : Proper α
rtr rtr₁ rtr₁' rtr₂ rtr₂' : α
e₁ : rtr ≈ rtr₂
e₂ : rtr ≈ rtr₂'
e : rtr₂ ≈ rtr₂'
cpt : Component.Valued
i : Component.idType (Component.val cpt)
o₁✝ o₂✝ : Component.type α (Component.val cpt)
ho₁ : rtr₂[Component.val cpt][i] = some o₁✝
ho₂ : rtr₂'[Component.val cpt][i] = some o₂✝
u₂ : LawfulUpdate cpt i₂ v₂ rtr₁ rtr₂
u₁' : LawfulUpdate cpt i₂ v₂ rtr rtr₁'
hi₂ : ¬i = i₂
u₁ : LawfulUpdate cpt i v₁ rtr rtr₁
u₂' : LawfulUpdate cpt i v₁ rtr₁' rtr₂'
h : cpt ≠ cpt ∨ i ≠ i₂
⊢ o₁✝ = o₂✝