关于定理证明:如何执行多个存在消除,它们都共享一个单一的多元普遍量化假设?

How to perform multiple exists-eliminations that all share a single multivariate universally-quantified hypothesis?

精益文档显示了以下两个示例,其中只有一个变量:

来自精益中的定理证明:存在量词:

1
2
3
4
5
6
variables (?± : Type) (p q : ?± a?’ Prop)
example (h : a?? x, p x a?§ q x) : a?? x, q x a?§ p x :=
exists.elim h
  (assume w,
    assume hw : p w a?§ q w, -- this is a?€ w, p w a?§ q w
    show a?? x, q x a?§ p x, from a?¨w, hw.right, hw.lefta??)

来自逻辑与证明:使用存在量词***:

1
2
3
4
5
6
variables (U : Type) (P : U a?’ Prop) (Q : Prop)
example (h1 : a?? x, P x) (h2 : a?€ x, P x a?’ Q) : Q :=
exists.elim h1
  (assume (y : U) (h : P y),
    have h3 : P y a?’ Q, from h2 y,
    show Q, from h3 h)

在这两种情况下,全称假设(前一个例子中的h2,后一个例子中的hw)只取决于一个变量。

现在假设我们得到(我解释原来的问题):

1
2
variables (U : Type) (P R: U a?’ Prop)(Q : Prop)
example (h1a : a?? x, P x) (h1b : a?? x, R x) (h2 : a?€ x y, P x a?’ R y a?’ Q) : Q := sorry

h2中,想象PR就像nat.is_evenQ就像"x,y组成一对偶数"。

我想 exists.elim 需要的内部推导如下:

1
2
3
  (assume (y z : U) (ha : P y) (hb : R z),
    have h3 : P y a?’ R z a?’ Q, from h2 y z,
    show Q, from h4 h1a h1b)

但我不确定如何将它与存在消除一起使用 - 因为基本上需要一次完成两个消除。 exists.elim h1a (exists.elim h1b (assume ... show Q, from ...)) 似乎不起作用。


这对我有用

1
2
example (h1a : a?? x, P x) (h1b : a?? x, R x) (h2 : a?€ x y, P x a?’ R y a?’ Q) : Q :=
exists.elim h1a (exists.elim h1b (assume (x : U) (hRx : R x) (y : U) (hPy : P y), _))

还有其他方法可以做到这一点。一种是使用 let

1
2
3
4
example (h1a : a?? x, P x) (h1b : a?? x, R x) (h2 : a?€ x y, P x a?’ R y a?’ Q) : Q :=
let a?¨x, hPxa?? := h1a in
let a?¨y, hRya?? := h1b in
_

另一种方法是在战术模式下使用cases战术

1
2
3
4
5
example (h1a : a?? x, P x) (h1b : a?? x, R x) (h2 : a?€ x y, P x a?’ R y a?’ Q) : Q :=
begin
  cases h1a with x hPx,
  cases h1b with y hRy,
end