Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.1. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
Load tactics.

(*
3.20 (page 86)
*)
Object: Type
P, Q: Object * Object -> Prop

(forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x)) -> forall y : Object, Q (y, y)
Object: Type
P, Q: Object * Object -> Prop

(forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x)) -> forall y : Object, Q (y, y)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))

forall y : Object, Q (y, y)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)

forall y : Object, Q (y, y)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
z: Object

Q (z, z)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
z: Object
H3: forall y : Object, P (z, y) -> Q (y, z)

Q (z, z)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
z: Object
H3: forall y : Object, P (z, y) -> Q (y, z)
H4: P (z, z) -> Q (z, z)

Q (z, z)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
z: Object
H3: forall y : Object, P (z, y) -> Q (y, z)
H4: P (z, z) -> Q (z, z)

P (z, z)
Object: Type
P, Q: Object * Object -> Prop
H0: (forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x))
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
z: Object
H3: forall y : Object, P (z, y) -> Q (y, z)
H4: P (z, z) -> Q (z, z)
H5: P (z, z)

P (z, z)
assumption H5.
Object: Type
P, Q: Object * Object -> Prop

(forall x y : Object, P (x, y) -> Q (y, x)) /\ (forall x : Object, P (x, x)) -> forall y : Object, Q (y, y)
Object: Type
P, Q: Object * Object -> Prop
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
y: Object

Q (y, y)
Object: Type
P, Q: Object * Object -> Prop
H1: forall x y : Object, P (x, y) -> Q (y, x)
H2: forall x : Object, P (x, x)
y: Object

P (y, y)
apply H2. Qed. (* 3.30 (page 92) *)

forall x : nat, x <= x

forall x : nat, x <= x
x: nat

x <= x
x: nat

x + 0 = x
x: nat
A0: forall n : nat, n + 0 = n

x + 0 = x
x: nat
A0: forall n : nat, n + 0 = n
H0: x + 0 = x

x + 0 = x
x: nat
A0: forall n : nat, n + 0 = n
H0: x + 0 = x

x = x
equals_intro.

forall x : nat, x <= x
x: nat

x <= x
x: nat

exists z : nat, x + z = x
x: nat

x + 0 = x
lia. Qed. (* 3.33 (page 94) *)

forall x y : nat, even x -> even y -> even (x + y)

forall x y : nat, even x -> even y -> even (x + y)
x: nat

forall y : nat, even x -> even y -> even (x + y)
x, y: nat

even x -> even y -> even (x + y)
x, y: nat
H0: even x

even y -> even (x + y)
x, y: nat
H0: even x
H1: even y

even (x + y)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k

exists k : nat, x + y = 2 * k
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1

exists k : nat, x + y = 2 * k
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2

exists k : nat, x + y = 2 * k
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2

x + y = 2 * (k1 + k2)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p

x + y = 2 * (k1 + k2)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p

x + y = 2 * (k1 + k2)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p
H5: forall p : nat, 2 * (k1 + p) = 2 * k1 + 2 * p

x + y = 2 * (k1 + k2)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p
H5: forall p : nat, 2 * (k1 + p) = 2 * k1 + 2 * p
H6: 2 * (k1 + k2) = 2 * k1 + 2 * k2

x + y = 2 * (k1 + k2)
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p
H5: forall p : nat, 2 * (k1 + p) = 2 * k1 + 2 * p
H6: 2 * (k1 + k2) = 2 * k1 + 2 * k2

x + y = 2 * k1 + 2 * k2
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p
H5: forall p : nat, 2 * (k1 + p) = 2 * k1 + 2 * p
H6: 2 * (k1 + k2) = 2 * k1 + 2 * k2

x + y = x + 2 * k2
x, y: nat
H0: exists k : nat, x = 2 * k
H1: exists k : nat, y = 2 * k
k1: nat
H2: x = 2 * k1
k2: nat
H3: y = 2 * k2
A0: forall n m p : nat, n * (m + p) = n * m + n * p
H4: forall m p : nat, 2 * (m + p) = 2 * m + 2 * p
H5: forall p : nat, 2 * (k1 + p) = 2 * k1 + 2 * p
H6: 2 * (k1 + k2) = 2 * k1 + 2 * k2

x + y = x + y
equals_intro.

forall x y : nat, even x -> even y -> even (x + y)
x, y: nat
Hx: even x
Hy: even y

even (x + y)
x, y, k1: nat
Hk1: x = 2 * k1
Hy: even y

even (x + y)
x, y, k1: nat
Hk1: x = 2 * k1
k2: nat
Hk2: y = 2 * k2

even (x + y)
x, y, k1: nat
Hk1: x = 2 * k1
k2: nat
Hk2: y = 2 * k2

x + y = 2 * (k1 + k2)
x, y, k1: nat
Hk1: x = 2 * k1
k2: nat
Hk2: y = 2 * k2

2 * k1 + 2 * k2 = 2 * (k1 + k2)
lia. Qed. (* For more examples see 2022/script.v *)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy