25 lines
826 B
Text
25 lines
826 B
Text
|
import tactic
|
||
|
using Nat
|
||
|
|
||
|
-- Manual proof using symmetry, transitivity, distributivity and 1*x=x.
|
||
|
theorem T1 (a b c : Nat)
|
||
|
(H1 : a = b + c) -- First hypothesis
|
||
|
(H2 : b = c) -- Second hypothesis
|
||
|
: a = 2*c -- Conclusion
|
||
|
:= calc a = b + c : H1
|
||
|
... = c + c : { H2 }
|
||
|
... = 1*c + 1*c : { symm (mul_onel c) }
|
||
|
... = (1 + 1)*c : symm (distributel 1 1 c)
|
||
|
... = 2*c : refl (2*c)
|
||
|
|
||
|
add_rewrite mul_onel
|
||
|
|
||
|
-- The simplifier can already compress the proof above.
|
||
|
theorem T2 (a b c : Nat)
|
||
|
(H1 : a = b + c) -- first hypothesis
|
||
|
(H2 : b = c) -- second hypothesis
|
||
|
: a = 2*c
|
||
|
:= calc a = 1*c + 1*c : by simp
|
||
|
... = (1 + 1)*c : symm (distributel 1 1 c)
|
||
|
... = 2*c : refl (2*c)
|