2014-01-05 20:05:08 +00:00
|
|
|
|
variable N : Type
|
|
|
|
|
variable h : N -> N -> N
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- Specialize congruence theorem for h-applications
|
2014-01-06 03:10:21 +00:00
|
|
|
|
theorem congrh {a1 a2 b1 b2 : N} (H1 : a1 = b1) (H2 : a2 = b2) : (h a1 a2) = (h b1 b2) :=
|
|
|
|
|
congr (congr (refl h) H1) H2
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- Declare some variables
|
2014-01-05 20:05:08 +00:00
|
|
|
|
variable a : N
|
|
|
|
|
variable b : N
|
|
|
|
|
variable c : N
|
|
|
|
|
variable d : N
|
|
|
|
|
variable e : N
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- Add axioms stating facts about these variables
|
2014-01-05 20:05:08 +00:00
|
|
|
|
axiom H1 : (a = b ∧ b = c) ∨ (d = c ∧ a = d)
|
|
|
|
|
axiom H2 : b = e
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- Proof that (h a b) = (h c e)
|
2014-01-05 20:05:08 +00:00
|
|
|
|
theorem T1 : (h a b) = (h c e) :=
|
2014-01-09 16:33:52 +00:00
|
|
|
|
or_elim H1
|
2014-01-19 05:11:12 +00:00
|
|
|
|
(λ C1, congrh (trans (and_eliml C1) (and_elimr C1)) H2)
|
|
|
|
|
(λ C2, congrh (trans (and_elimr C2) (and_eliml C2)) H2)
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- We can use theorem T1 to prove other theorems
|
2014-01-05 20:05:08 +00:00
|
|
|
|
theorem T2 : (h a (h a b)) = (h a (h c e)) :=
|
2014-01-06 03:10:21 +00:00
|
|
|
|
congrh (refl a) T1
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 16:52:46 +00:00
|
|
|
|
-- Display the last two objects (i.e., theorems) added to the environment
|
2014-01-05 20:05:08 +00:00
|
|
|
|
print environment 2
|
2013-09-01 02:30:42 +00:00
|
|
|
|
|
2014-01-05 19:03:35 +00:00
|
|
|
|
-- print implicit arguments
|
2014-01-09 16:33:52 +00:00
|
|
|
|
set_option lean::pp::implicit true
|
|
|
|
|
set_option pp::width 150
|
2014-01-05 20:05:08 +00:00
|
|
|
|
print environment 2
|