revert H
α σ : Type
ε : σ → Type
Δ : Dialect α σ ε
τ : MLIRType Δ
name : SSAVal
v : MLIRType.eval τ
env : SSAEnv Δ
r : Unit
env' : SSAEnv Δ
H :
  (match SSAEnv.get name τ env with
      | some val => raiseUB "setting to SSA value twice!"
      | none => fun x => Except.ok (PUnit.unit, SSAEnv.set name τ v env))
      env =
    Except.ok (r, env')
name' : SSAVal
Hname : ¬name' = name
τ' : MLIRType Δ
v' : MLIRType.eval τ'
⊢ ∃ env'',
    SSAEnv.equiv (SSAEnv.set name' τ' v' env') env'' ∧
      (match SSAEnv.get name τ (SSAEnv.set name' τ' v' env) with
          | some val => raiseUB "setting to SSA value twice!"
          | none => fun x => Except.ok (PUnit.unit, SSAEnv.set name τ v (SSAEnv.set name' τ' v' env)))
          (SSAEnv.set name' τ' v' env) =
        Except.ok (r, env'')
α σ : Type
ε : σ → Type
Δ : Dialect α σ ε
τ : MLIRType Δ
name : SSAVal
v : MLIRType.eval τ
env : SSAEnv Δ
r : Unit
env' : SSAEnv Δ
name' : SSAVal
Hname : ¬name' = name
τ' : MLIRType Δ
v' : MLIRType.eval τ'
⊢ (match SSAEnv.get name τ env with
        | some val => raiseUB "setting to SSA value twice!"
        | none => fun x => Except.ok (PUnit.unit, SSAEnv.set name τ v env))
        env =
      Except.ok (r, env') →
    ∃ env'',
      SSAEnv.equiv (SSAEnv.set name' τ' v' env') env'' ∧
        (match SSAEnv.get name τ (SSAEnv.set name' τ' v' env) with
            | some val => raiseUB "setting to SSA value twice!"
            | none => fun x => Except.ok (PUnit.unit, SSAEnv.set name τ v (SSAEnv.set name' τ' v' env)))
            (SSAEnv.set name' τ' v' env) =
          Except.ok (r, env'')