Elementary Geometry in PowerEpsilon

1 downloads 0 Views 746KB Size Report
Alternatively, we say that DB is a bisector of angle ABC iff angles ABD and. DBC are ..... For any points A, B and C, the △ ABC is congruent to △ ABC itself.
Elementary Geometry in PowerEpsilon Ming-Yuan Zhu CoreTek Systems, Inc. 1107B CEC Building 6 South Zhongguancun Street Beijing 100086 People’s Republic of China E-Mail: [email protected]

i

This book is dedicated to my daughter Hua-Yuan who has a very difficult time for struggling with her first year mathematical course in the elementary school. It is also dedicated to the hope that all who use it will do so for the benefit of mankind.

ii

“There is no royal road to geometry.” — Euclid

“It is by logic that we prove, but by intuition that we invent.” — H. Poincare

“Thoughts without content are empty, intuitions without concepts are blind.” — I. Kant

“The whole of science is nothing more than a refinement of everyday thinking.” — Albert Einstein, Physics and Reality

Contents I

The History of Euclid’s Geometry

1 Introduction 1.1 The Pure Power of Mathematics . . . . . . . . . . . . . 1.2 The Burden of Proof . . . . . . . . . . . . . . . . . . . . 1.3 The Origin of Deductive Geometry . . . . . . . . . . . . 1.4 Euclid’s Elements . . . . . . . . . . . . . . . . . . . . . . 1.5 Material Axiomatic Systems . . . . . . . . . . . . . . . . 1.6 Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7 Theorems . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8 Proofs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9 Axiomatic vs Intuitive Thinking in Mathematics . . . . 1.10 Formal Systems and Metamathematics in PowerEpsilon 1.11 About This Book . . . . . . . . . . . . . . . . . . . . . .

II

2 . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Type Theory and PowerEpsilon

2 Type Theory 2.1 Types in Computer Science . . . . . . . . . . . . . . . . 2.2 Intuitionistic Logic . . . . . . . . . . . . . . . . . . . . . 2.2.1 Nonconstructive Mathematics . . . . . . . . . . . 2.2.2 Constructive Mathematics . . . . . . . . . . . . . 2.2.3 Deductions as Computations and Computations ductions . . . . . . . . . . . . . . . . . . . . . . . 2.2.4 Mechanization of Higer-Order Logic . . . . . . . 2.3 Martin-L¨of’s Type Theory . . . . . . . . . . . . . . . . . 2.4 Natural Deduction Systems . . . . . . . . . . . . . . . . 2.4.1 Deduction System . . . . . . . . . . . . . . . . . 2.4.2 Natural Deduction System . . . . . . . . . . . . . 2.5 Should Types be Modelled by Calculi or Algebra? . . . 2.6 Philosophical View of Types . . . . . . . . . . . . . . . . 2.6.1 Realist View . . . . . . . . . . . . . . . . . . . .

iii

3 3 4 6 7 8 9 10 10 12 12 13

14 . . . . . . . . as . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . De. . . . . . . . . . . . . . . . . . . . . . . . . . .

15 15 16 16 17 17 19 19 20 20 20 20 21 21

CONTENTS

2.6.2

iv

Intuitionist View . . . . . . . . . . . . . . . . . . . . . . .

22

3 What is PowerEpsilon 23 3.1 Syntax of PowerEpsilon . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.1 Notations . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.2 Lexicon . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.3 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.4 Currying and Higher-Order Terms . . . . . . . . . . . . . 25 3.1.5 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 Type Inference Rules of PowerEpsilon . . . . . . . . . . . . . . . 28 3.2.1 Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.2 Judgements . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.3 Inference Rules . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2.4 Derivations . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.5 Γ-Terms, Γ-Types and Γ-Propositions . . . . . . . . . . . 31 3.2.6 Type Conversion Rules . . . . . . . . . . . . . . . . . . . 31 3.2.7 Cumulativity Relation . . . . . . . . . . . . . . . . . . . . 31 3.2.8 Curry-Howard Isomorphism . . . . . . . . . . . . . . . . . 33 3.2.9 From Types to Programs: The Constructive Mathematics 35 3.2.10 From Programs to Types: The Type Inferences . . . . . . 35 3.2.11 Applications of PowerEpsilon . . . . . . . . . . . . . . . . 35 3.3 Formal Logic in PowerEpsilon . . . . . . . . . . . . . . . . . . . . 38 3.3.1 Logical Operators Defined by PowerEpsilon . . . . . . . . 38 3.3.1.1 Logical Implication . . . . . . . . . . . . . . . . 38 3.3.1.2 Universal Quantified Formula . . . . . . . . . . . 38 3.3.1.3 Existential Quantified Formula . . . . . . . . . . 38 3.3.2 Logical Operators Derived from PowerEpsilon . . . . . . . 38 3.3.2.1 Logical Negation . . . . . . . . . . . . . . . . . . 39 3.3.2.2 Logical Conjunction . . . . . . . . . . . . . . . . 39 3.3.2.3 Logical Disjunction . . . . . . . . . . . . . . . . 40 3.3.2.4 Equivalent Relation . . . . . . . . . . . . . . . . 41 3.3.3 Classical Logic and Excluded-Middle Rules . . . . . . . . 41

III

Euclidean Geometry

4 Euclid’s Primitive Terms 4.1 Real Number System . . . . . . . . . . . . 4.1.1 Relations on Real . . . . . . . . . 4.1.2 Addition of Real . . . . . . . . . . 4.1.3 Negation and Substraction of Real 4.1.4 Multiplication of Real . . . . . . . 4.1.5 Reversion and Division of Real . . 4.1.6 Absolute Value of Real . . . . . .

43 . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

44 45 45 45 46 46 46 46

CONTENTS

4.2

4.3

4.4

4.1.7 Constants of Real . . . . . . . . . . . . . . . . . . . . 4.1.8 Properties of RREq . . . . . . . . . . . . . . . . . . . . 4.1.9 Rules of Exclusive-Middle . . . . . . . . . . . . . . . . Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Data Structure: Point . . . . . . . . . . . . . . . . . . 4.2.2 Constructor of Point . . . . . . . . . . . . . . . . . . . 4.2.3 Selectors of Point . . . . . . . . . . . . . . . . . . . . 4.2.4 Distance Between Two Points . . . . . . . . . . . . . . 4.2.5 Equality of Points . . . . . . . . . . . . . . . . . . . . 4.2.6 Properties of Eq Point . . . . . . . . . . . . . . . . . . 4.2.7 Representation Basis . . . . . . . . . . . . . . . . . . . Straight Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Data Structure: Line . . . . . . . . . . . . . . . . . . 4.3.2 Constructor of Line . . . . . . . . . . . . . . . . . . . 4.3.3 Selectors of Line . . . . . . . . . . . . . . . . . . . . . 4.3.4 Evaluation of a Point on a Line . . . . . . . . . . . . . 4.3.5 Checking a Point on a Line . . . . . . . . . . . . . . . 4.3.6 Joint Point of Two Lines . . . . . . . . . . . . . . . . 4.3.7 One Line on Another Line . . . . . . . . . . . . . . . . 4.3.8 Equality of Line . . . . . . . . . . . . . . . . . . . . . 4.3.9 Properties of Eq Line . . . . . . . . . . . . . . . . . . 4.3.9.1 Refletivity Property of Eq Line . . . . . . . . 4.3.9.2 Symmetric Property of Eq Line . . . . . . . 4.3.9.3 Transitivity Property of Eq Line . . . . . . . 4.3.10 Parallel Lines . . . . . . . . . . . . . . . . . . . . . . . 4.3.11 Perpendicular Lines . . . . . . . . . . . . . . . . . . . 4.3.12 Two Points on Same Side of a Line . . . . . . . . . . . 4.3.13 Two Points on Different Side of a Line . . . . . . . . . 4.3.14 A Point X in Between Point A and B . . . . . . . . . . Finite Straight Lines . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Data Structure: Finite Line . . . . . . . . . . . . . . 4.4.2 Constructor of Finite Line . . . . . . . . . . . . . . . 4.4.3 Selectors of Finite Line . . . . . . . . . . . . . . . . 4.4.4 Equality of Finite Line . . . . . . . . . . . . . . . . . 4.4.5 Properties of Eq FLine . . . . . . . . . . . . . . . . . . 4.4.5.1 Refletivity Property of Eq FLine . . . . . . . 4.4.5.2 Symmetric Property of Eq FLine . . . . . . . 4.4.5.3 Transitivity Property of Eq FLine . . . . . . 4.4.6 Parallel Finite Lines . . . . . . . . . . . . . . . . . . . 4.4.7 Checking a Point on a Finite Line . . . . . . . . . . . 4.4.8 Joint Point of Two Finite Lines . . . . . . . . . . . . . 4.4.9 A Finite Line on Another Line . . . . . . . . . . . . . 4.4.10 Two Finite Lines on Same Line . . . . . . . . . . . . . 4.4.11 Two Finite Lines are in Between Another Finite Line

v

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46 47 47 47 48 48 48 49 50 50 51 51 54 54 54 54 55 55 55 56 56 56 56 56 57 57 58 58 59 59 59 60 60 61 61 61 61 62 62 62 63 63 63 64

CONTENTS

vi

4.4.12 Two Points on Same Side of a Finite Line . . . . . . . . . 4.4.13 Two Points on Different Side of a Finite Line . . . . . . . 4.4.14 Bisection of Finite Line . . . . . . . . . . . . . . . . . . 5 Euclid’s Defined Terms 5.1 Angles . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Data Structure: Angle . . . . . . . . . . . . . 5.1.2 Constructor of Angle . . . . . . . . . . . . . . 5.1.3 Selectors of Angle . . . . . . . . . . . . . . . 5.1.4 Some Constants of Angle . . . . . . . . . . . 5.1.5 Comparison of Angles . . . . . . . . . . . . . 5.1.6 Existence of Angles . . . . . . . . . . . . . . . 5.1.7 Special Angles . . . . . . . . . . . . . . . . . 5.1.7.1 Adjacent Suplementary Angles . . . 5.1.7.2 Vertical Angles . . . . . . . . . . . . 5.1.7.3 Right Angles . . . . . . . . . . . . . 5.1.7.4 Perpendicular Finite Straight Lines 5.1.7.5 Obtuse Angles . . . . . . . . . . . . 5.1.7.6 Acute Angles . . . . . . . . . . . . . 5.1.7.7 Bisection of Angles . . . . . . . . . 5.2 Triangles . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Data Structure: Triangle . . . . . . . . . . . 5.2.2 Constructor of Triangle . . . . . . . . . . . 5.2.3 Selectors of Triangle . . . . . . . . . . . . . 5.2.4 Equality of Triangle . . . . . . . . . . . . . 5.2.5 Congruent of Triangle . . . . . . . . . . . . 5.2.6 Point X on a Triangle t . . . . . . . . . . . . 5.2.7 Point X inside of a Triangle t . . . . . . . . . 5.2.8 Point X outside of a Triangle t . . . . . . . . 5.2.9 Existence of Triangles . . . . . . . . . . . . . 5.2.10 Properties of Triang Cong . . . . . . . . . . . 5.2.11 Equilateral Triangle . . . . . . . . . . . . . . 5.2.12 Isosceles Triangle . . . . . . . . . . . . . . . . 5.2.13 Scalene Triangle . . . . . . . . . . . . . . . . 5.2.14 Right-Angled Triangle . . . . . . . . . . . . . 5.2.15 Obtuse-Angled Triangle . . . . . . . . . . . . 5.2.16 Acute-Angled Triangle . . . . . . . . . . . . . 5.2.17 Area of Triangle . . . . . . . . . . . . . . . . 5.3 Circles . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Data Structure: Circle0 . . . . . . . . . . . 5.3.2 Constructor of Circle0 . . . . . . . . . . . . 5.3.3 Selectors of Circle0 . . . . . . . . . . . . . . 5.3.4 Point A on Circle c . . . . . . . . . . . . . . . 5.3.5 Equality of Circle0 . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64 64 65 66 66 67 67 67 68 68 70 71 71 71 72 73 74 74 76 76 76 77 78 80 81 82 82 82 83 84 85 85 86 86 87 87 87 88 88 88 88 89 89

CONTENTS

vii

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

89 90 90 91 91 91 92 92 93 93 95 95 97 98

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

99 99 99 100 101 103 103 104 107 108 108 109 110 111 111 112 113 115 116

7 Theorems Proven Without Postulate 5 7.1 Analytic Proofs and Synthetic Proofs . . 7.2 Geometrical Graphics . . . . . . . . . . 7.3 Theorem 1 . . . . . . . . . . . . . . . . . 7.4 Theorem 2 . . . . . . . . . . . . . . . . . 7.5 Theorem 3 . . . . . . . . . . . . . . . . . 7.6 Theorem 4 . . . . . . . . . . . . . . . . . 7.7 Theorem 5 . . . . . . . . . . . . . . . . . 7.8 Theorem 6 . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

117 117 118 118 123 127 130 132 137

5.4

5.3.6 Congruent of Circles . . . 5.3.7 Point A inside of Circle c 5.3.8 Point A outside of Circle c 5.3.9 Joint Point of Circles . . . Quadrilaterals . . . . . . . . . . . 5.4.1 Data Structure: Quad . . 5.4.2 Constructor of Quad . . . 5.4.3 Selectors of Quad . . . . . 5.4.4 Equality of Quad . . . . . 5.4.5 Congruent of Quad . . . . 5.4.6 Parallelogram . . . . . . . 5.4.7 Square . . . . . . . . . . . 5.4.8 Existence of Quadrilateral 5.4.9 Area of Quad . . . . . . .

6 Euclid’s Axioms 6.1 Euclid’s Original Axioms . 6.1.1 Postulate 1 . . . . 6.1.2 Postulate 2 . . . . 6.1.3 Postulate 3 . . . . 6.1.4 Postulate 4 . . . . 6.1.5 Postulate 5 . . . . 6.1.6 Common Notions . 6.1.7 Postulate 6 . . . . 6.1.8 Postulate 7 . . . . 6.1.9 Postulate 8 . . . . 6.1.10 Postulate 9 . . . . 6.1.11 Postulate 10 . . . . 6.2 Hilbert’s Axioms . . . . . 6.2.1 Relational Axioms 6.2.2 Sequencing Axioms 6.2.3 Congruent Axioms 6.2.4 Parallel Axioms . . 6.2.5 Continuity Axioms

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

CONTENTS

7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23 7.24 7.25 7.26

Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem Theorem

viii

7. 8. 9. 10 11 12 13 14 15 16 17 18 19 20 23 26 27 31

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

8 Theorems Proven With Postulate 8.1 Theorem 29 . . . . . . . . . . . . 8.2 Theorem 30 . . . . . . . . . . . . 8.3 Theorem 32 . . . . . . . . . . . . 8.4 Theorem 34 . . . . . . . . . . . . 8.5 Theorem 35 . . . . . . . . . . . . 8.6 Theorem 37 . . . . . . . . . . . . 8.7 Theorem 41 . . . . . . . . . . . . 8.8 Theorem 46 . . . . . . . . . . . . 8.9 Theorem 47 . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

141 148 149 157 160 164 167 173 178 182 186 189 192 196 199 211 221 226

5 . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

231 231 235 241 246 250 257 262 264 268

9 Conclusions 278 9.1 Mathematical Theorem Proving as Computer Programming . . . 278 9.1.1 Programming via Reasoning Methodologies . . . . . . . . 280 9.1.1.1 Finding Good Presentation of Problems . . . . . 280 9.1.1.2 Information Hiding Principle . . . . . . . . . . . 280 9.1.1.3 Stepwise Refinement . . . . . . . . . . . . . . . . 280 9.1.2 Abstract Programming versus Reasoning . . . . . . . . . 280 9.1.3 Structured Programming versus Reasoning . . . . . . . . 281 9.1.4 Algorithm and Proof Complexity . . . . . . . . . . . . . . 281 9.1.5 Subproofs and Subroutines . . . . . . . . . . . . . . . . . 281 9.1.6 Software versus Mathematical Engineering . . . . . . . . . 282 9.1.6.1 Software versus Mathematics Development Teams283 9.1.6.2 Measurement of Programs and Proofs . . . . . . 283 9.1.6.3 CASE Tools versus CAME Tools . . . . . . . . . 285

CONTENTS

9.2 9.3 9.4

9.1.6.4 Version Control and Configuration Management 9.1.6.5 Sales of Software and Mathematics . . . . . . . . 9.1.7 Programming versus Proving Techniques . . . . . . . . . . Integrating with Other Tools . . . . . . . . . . . . . . . . . . . . The Rules of Writing Proofs in PowerEpsilon . . . . . . . . . . . Future Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Some Disadvantages . . . . . . . . . . . . . . . . . . . . . 9.4.2 Overloading of Predicates and Functions . . . . . . . . . . 9.4.3 Separation of Theories and Theory Bodies . . . . . . . . . 9.4.4 Cross-Reference Generator . . . . . . . . . . . . . . . . .

ix

285 285 286 286 286 287 287 287 287 287

List of Figures 3.1 3.2 3.3

Type Inference Rules for PowerEpsilon . . . . . . . . . . . . . . More on Type Inference Rules for PowerEpsilon . . . . . . . . Type Conversion Rules for PowerEpsilon . . . . . . . . . . . .

x

29 30 32

List of Tables 2.1

Interpretation of Logical Connectives . . . . . . . . . . . . . . . .

1

18

Part I

The History of Euclid’s Geometry

2

Chapter 1

Introduction This is a book about Euclid’s geometry. Different from other books of Euclid’s geometry, there is no any pictures shown in the book. We are talking about Euclid’s geometry in terms of a computer programming language PowerEpsilon. PowerEpsilon was born in 1989 at the Beijing Institute of Systems Engineering in People’s Republic of China, where at the time the author was working in the Software Engineering Laboratory. The original goals in developing PowerEpsilon were very modest. We want to develop a verification system as a subsystem of a program transformation system called AUTOSTAR [17] for proving the correctness of program transformation rules deployed in the system. We felt then (and still now) that the system can practically be used as a mathematical theorem proof development system for many different areas in mathematics. Even since the birth of the first modern computer, computer technology has developed at a fantastic speed. Today we see computers being used not only to solve computationally difficult problems, such as carrying out a fast Fourier transform or inverting a matrix of high dimensionality, but also being asked to perform tasks that would be called intelligent if done by human beings. Some such tasks are writing programs, answering questions, and proving mathematical theorems.

1.1

The Pure Power of Mathematics

The territory of mathematics can be divided into four large chunks. • The first, called algebra, involves the study of number systems. In general, an algebra consists of a number of mathematical entities (such as integers, matrices, vectors, or sets) and operations (such as addition or multiplication with formal rules expressing the relationships between the mathematical entities. It includes, for example, the rules needed for adding, 3

Introduction

4

subtracting, multiplying, and dividing the ones and zeros (or binary digits) that zip through a computer’s mind and memory. • Analysis, the second major piece of the mathematical continent, concerning functions. Functions express relationships. Simply put, a function is any rule that assigns a fixed output to a given input. For example, if the function is squaring, the number 3 is paired with the number 9, the number 7 with the number 49. The development of calculus, discovered independently in seventeenth century by Issac Newton and Gottfried Leibniz, is one of the central achievements of analysis. • The third region, geometry, is the study of the properties of shapes and spaces. Most people are familiar with the rigid forms of Euclidean geometry – squares and cubes, circles and spheres, congruent triangles and parallel lines. But geometries can take on many different guises, reaching into higher dimensions and obeying various rules. Topology focuses on geometrical features that remain unchanged after twisting, stretching, and other deformations are imposed on a geometric space. Problems such as colring maps, distinguishing knots, and classifying surfaces, or manifolds, not just in one, two, and three dimensions, but in higher ones as well, all fall within topology. • The fourth region, is mathematical logic which is also called metamathematics and is divided into four areas: model theory, proof theory, recursion theory and axiomatic set theory. Somewhere near the mathematical continent lie the burgeoning landmasses of statistics and computer science. Both have close ties with mathematics, and the links are becoming increasingly important.

1.2

The Burden of Proof

The Oxford Advanced Learner’s Dictionary of Current English contains the following sentence concerning the term proof: 1. evidence (in general), or a particular piece of evidence, that is sufficient to show, or help to show, that something is a fact. 2. demonstrating, testing of whether something is true, a fact, etc. 3. test, trial, examination. ... The Webster’s New Collegiate Dictionary contains the following sentence concerning the term proof: 1. That degree of cogency, arising from evidence, which convinces the mind of any truth or fact and produces belief; also, that which proves or tends to prove. Properly speaking, proof is the effect or

Introduction

5

result of evidence; evidence is the medium of proof. 2. a Any effort, process, or operation designed to establish or discover a fact or truth; test; trial. b A test applied to substances to determine if they are of satisfactory quality, etc. 3. Quality or state of having been proved or tried; as armor of proof. 4. Proof strength, that is, the minimum strength of proof spirit; sometimes, short for PROOF SPIRIT. Also, strength with reference to the standard for proof spirit. 5. Engineering and Etching. A Proof impression. 6. Law. Evidence operating to determine the judgment of a tribunal. 7. Math. An operation for testing the accuracy of a previous operation; a check. 8. Photo. A test print made from a negative. 9. Print. A trial impression, as from type, taken for correcting or examination; – called also proof sheet. Conjecture and proof are the twin pillars of mathematics. Conjecture stands at the cutting edge, in the wild region separating the known from the unknown. Proof stands at the center of mathematics, a solid tower about which an elaborate scaffolding of mathematical theorems is built. The task of mathematicians is to develop conjectures – guesses or hypotheses about mathematical behavior – which they can then attempt to prove. On this basis, mathematics grows, stretching into new fields and revealing hitherto unseen connections between well-established domains. Like other sciences, mathematics has an experimental component. In the trial-and-error process of developing and proving conjectures, mathematicians collect data and look for patterns and trends. They construct novel forms, seek logical arguments to strengthen a case, and search for counterexamples to destroy an argument or expose an error. In these and other ways, mathematicians act as experimentalists, constantly testing their ideas and methods. The concept of proof, however, brings something to mathematics that is missing from other sciences. Once the experimental work is done, mathematicians have ways to build a logical argument that pins the label “true” or “false” on practically any conjecture. Physicists can get away with overwhelming evidence to support a theory. In mathematics, a single counterexample is enough to sink a beautiful conjecture. For this reason, too, no set of pretty pictures, collected during countless computer experiments, is complete enough to substitute for a mathematical proof. The word “proof” has been frequently used by mathematicians in their daily work. • A proof is an evidence to show something is true under certain assumptions. • In terms of PowerEpsilon, a proof is a program whose type being corresponding to the theorem to be proved.

Introduction

1.3

6

The Origin of Deductive Geometry

Once upon a time – around 600 B.C. – there was a man named Thales, who invented what we call “science.” Before Thales, thinkers did not think abstractly. Instead of looking for principles behind the curious events with which nature confronted them, they looked for personalities. Their findings – myths – were stories populated with an assortment of gods and goddesses whose interactions with one another and with human beings produced natural phenomena like spring, thunder, eclipses, etc. Nowadays it is common to sneer at ancient myths, but they were created by men and women of genius. The myths provided a comprehensive explanation of natural phenomena and a link between humanity and nature that made the universe less frightening. In fact science has only one advantage over myth, by also predicting natural phenomena to a degree myth never could. Thales (c.625 - c.547) believed nature operated not by whimsy, or by the gods’ romantic entanglements, but by principles intelligible to human beings. Thales introduced abstraction into the contemplation of nature. In particular, Thales introduced abstraction into geometry. Before Thales, “geometry” had meant “surveying” (the Greek geometrein means “to measure land”), and geometric figures had been particular objects like corrals and fields. Instead Thales conceived of geometrical figures as abstract shapes. This enabled him, when he examined in this light the hodgepodge of geometric recipes, rulesof-thumb, and empirical formulae that had been transmitted from Babylonia and Egypt, to detect an order. He noticed that some geometric facts were deducible from others. And he made the extraordinary suggestion that geometry should become, as much as possible, a purely mental activity. Thales was Greek, of course, and lived in a city that was then at the center of Greek culture: Miletos, on the western coast of Asia Minor (currently Turkey). Just a few miles from Miletos there is an island called Samos, where Pythagoras was born when Thales was in his fifties. When Pythagoras (c.570 - c.495) grew up he learned of Thales’s scientific ideas. He was particularly captivated by Thales’s proposal for geometry. Pythagoras left Asia Minor, and for a while studied in Egypt. Eventually he settled in Kroton, a Greek city in southern Italy, at the ball of the foot. There he founded the “Society of Pythagoras”, a community of men and women sharing quasi-religious rituals, dietary laws, and devotion to mathematics as the key to understanding nature. Though the actual community lasted only a few decades, its doctrines continued to influence Greek thought for much longer. Centuries later various thinkers around the Mediterranean were still calling themselves “Pythagoreans” and professing the Pythagorean belief in the primacy of mathematics among the sciences. To an extent the Society has affected Western thought down to the present, for Plato (c.427 - 327) was strongly influenced by Pythagorean ideas. (“All philosophy is a series of footnotes to Plato” – A. N.

Introduction

7

Whitehead.) The Pythagoreans accepted Thales’s program of making geometry a deductive science. To this end their greatest contribution was a dramatic discovery that helped set the standard of proof. Thales had deduced his theorems by a combination of logic and intuitive reflection. The Pythagoreans discovered that logic and intuition can disagree! In the 5th century B.C., before mathematics was made rigorous, mathematicians had already constructed long chains of geometric theorems in which each theorem was deduced, informally, from those before it. Each chain started with generalizations from experience which of course were not proven. As the scope of these chains grew there emerged the daring idea that it might be possible to link them together into a single network, anchored to a small number of generalizations from experience, which would contain a broad inventory of elementary geometric knowledge. And toward√the end of the century – in fact, about the same time it was proven that 2 is not rational – a mathematician named Hippokrates of Chios accomplished exactly this, in a book he called the Elements. Later, while the rigorization of mathematics was underway, other comprehensive geometric networks were forged. Each was called the Elements, and presumably each, by having simpler axioms, tighter logic, or more theorems, was an improvement on its predecessors. The series culminated in the famous Elements of Euclid, completed about 300 B.C.

1.4

Euclid’s Elements

The axiomatic-deductive method in mathematics is known to us from Euclid’s Elements, although there is a tradition that credits Pythagoras with the introduction of the method. By use of it, the body of geometrical knowledge was systematized. Euclid’s axiomatic system may be described roughly thus: “definitions” of certain primitive terms, such as “point”, “line”, “plane” are given, which are intended to suggest to the reader what is meant by those terms; certain propositions concerning the primitive terms, felt to be acceptable as immediately true on the basis of the meanings suggested by the definitions, are taken as axioms or postulates; then other terms are defined in terms of the primitive ones; and other propositions, called the theorems, are deducted by logic from the axioms. Euclid’s Elements is a single deductive network of 465 theorems that includes not only an enormous amount of elementary geometry, but generous helpings of algebra and number theory as well. Its organization and level of logical rigor were such that it soon became geometry’s standard text. In fact it so completely superseded previous efforts that they all disappeared. The Elements – from now on the title will refer to Euclid’s book only – is the most successful textbook ever written. It has gone through more than a

Introduction

8

thousand editions and was used well into the last century (here and there, it is used even today). More importantly, it is the paradigm that scientists have been emulating ever since its appearance. It is the archetypal scientific treatise. To study the form and limitations of the Elements, therefore, is to poke through the entrails of the whole scientific enterprise.

1.5

Material Axiomatic Systems

The Elements is the oldest example we possess of what is now called a “material axiomatic system”. Before we examine the Elements itself, with all the explaining and restructing of Euclid’s text our study will involve, we think it would be wise to discuss material axiomatic systems in general.

Pattern of a Material Axiomatic System A material axiomatic system is a such axiomtics in which meanings are given to the primitive term initially. 1. The basic technical terms of the discourse are introduced and their meaning explained. These basic terms are called primitive terms. 2. A list of primary statements about the primitive terms is given. In order for system to be significant to the reader, he or she must find these statements acceptable as true based on the explanations given above, these primary statements are called axioms. 3. All other technical terms are defined by meas of previously introduced terms. Technical terms which are not primitive terms are accordingly called defined terms. 4. All other statements of the discourse are logically deduced from previously accepted or established statements. These derived statements are called theorems. Notice there are two kinds of technical terms. The meanings of the “defined” terms (item (3)) are prescribed by reference to terms (either type) previously introduced; at least in relation to those earlier terms, therefore, the defined terms are completely unambiguous. But unfortunately it is not possible to achieve unambiguity for all terms: dictionaries are, after all, circular. Thus it is necessary to accept some terms into the system (usually from everyday speech) without benefit of precise definition; these are the “primitive” terms of item (1). Of course every effort is made to indicate the sense in which each primitive term is to be taken, but no amount of explaining can guarantee that everyone will understand them in exactly the same way.

Introduction

9

Similarly there are two kinds of statements. Just as one cannot defined every term, one cannot deduce every statement. Accordingly, the statements of item (2) are accepted without deductive proof, on grounds that are outside the official structure of the system. (Within the system they are viewed simply as assumptions.) These statements provide a starting point from which all the other statements (item (4)) are logically deduced. For many people a sticking place is that phrase “logically deduced.” Before we proceed to an example of a material axiomatic system, therefore, we think we should spend some time talking about logic – at first in general, then as we will encounter it in this book.

1.6

Logic

Every rational discussion involves the making of inferences. What kinds of inferences are allowed depends on who the participants are and what subject is being discussed. In this sense, each type of discussion has its own special logic. For example, the sort of evidence that physicists accept as strong confirmation of a theory as rejected as totally inadequate by mmthamaticians trying to prove a theorem; in turn, the esoteric reasoning mathematicians sometimes employ is utterly worthless to literary critics analyzing a novel. (Indeed, there are forms of argument employed regularly in mathematics that are applicable to nothing else.) Usually, however, the term “logic” is used in a more general sense, to refer to principles of reasoning that the various special logics are presumed to have in common. The belief is that this common logic would be acceptable and potentially useful to participants in any rational discussion. Of course there is no way of checking this without polling the entire planet, or at least scrutinizing its more than 3,007 languages, but since Greek concepts are so much a part of the Western heritage it seems safe to say there is a widely shared logic at least among peoyle with Western-style educations. Though this traditional logic does not include the special techniques of modern mathematics, it does include all the forms of argument used by mathematicians in Euclid’s time. In fact, today many people, hearing the term “logic”, can think of little except the principles of reasoning used by Euclid, because the only time they have ever heard logic discussed explicitly (rather than taken for granted) was in a high school geometry course. Therefore, we have good reason to feel confident about the soundness of our logic. It is safely within traditional logic, and has been embedded in the fabric of Western thought for more than 2,000 years. Nonetheless it is wise to take all logic with a grain of salt. It is vulnerable to doubt, on at least two counts. • The first count on which logic is vulnerable to doubt is that the rules of logic are not dug out of the earth like diamonds; they are grounded in

Introduction

10

human intuition! The imperative feeling we have that “If A and B are true, Z must be true” cannot be defended, or reduced further. A present-day mathematical logician (Rosser, in [13]) makes the same point as follows: “The mathematician should not forget that this his intuition is the final authority, so that, in case of irreconcilable conflict between his intuition and some system of ... logic, he should abandon the ... logic. He can try other systems of ... logic, and perhaps find one more to his liking, but it would be difficult to change his intuition.” Much as the mathematician would like to seal is system off from intuition, which he considers unreliable, core intuitions penetrate every barrier. Logic itself rests on intuition, and may be contaminated with intuition’s unreliability. We learn logic, at least informally, along with our natural languages. In this sense logic is like a pair of tinted eyeglasses with which we are fittd early in life, of which we are barely aware, and through which we become, by the standards of our calcure, intellectually mature. They color everything, so naturally we tend to see confirmation wherever we look. But do they also distort? Could common logic be somehow in error? (Could millions of people be wrong?) We naturally tend not to think so. But conceivably, yes. For all we know there may be something “wrong” with our languages, or even our brains. It might be that the only people who reason correctly are a few outcasts playing football! • The second count on which logic is vulnerable to doubt is the presence – and persistence – of logical paradoxes. These are arguments that, seemingly, start from sound premise, violate none of the rules of logic, but reach conclusions that are erroneous and contradictory.

1.7

Theorems

Theorems are “conditional” statements, that is statements of the form “If ..., then ...”. The pattern between “If” and “then” is the “hypothesis”, and the part after “then” is the “conclusion”. In some cases a theorem is written in a form that does not appear to be conditional, but nonetheless it can be translated into that form.

1.8

Proofs

A theorem is not merely a conditional statement; it is a conditional statement having a proof. This brings up the main point. A “proof” is a list of statements, with a justification for each, ending with the desired conclusion. Only seven types of justification are allowed:

Introduction

11

1. “by hypothesis” (the hypothesis of the theorem) 2. “by RAA hypothesis” (in case of proof by contradiction) 3. “by Axiom” (an axiom of the system) 4. “by Theorem” (a previously-proven theorem) 5. “by Definition” (the meaning of a defined term) 6. “by step ...” (an earlier step in the proof) 7. “by rule ... of logic” (a rule of logic) In proving a theorem one accepts as true the hypothesis, the axioms, and all previously-proven theorems, and tries to deduce the conclusion. Note that one may appeal only to the meaning of a defined term and never to the meaning of a primitive term. Mathematicians insist on this because there are subtle differences in people’s understandings of the primitive terms. Hence we insist that the only properties of primitive terms that may be used in a proof are those properties we agreed on at the outset – namely, those mentioned in the axioms. If we wish to assert a property of a primitive term not specified in an axiom, we must either prove a theorem that says the term has the property or, failing that but agreed we want the primitive term to have the property, add a new axiom that provides the primitive term with the desired property. Two rules of logic we should mention explicitly provide the basis for “proof by contradiction”, a popular mathematical technique some people have trouble understanding. Law of the Excluded Middle: Either a statement is true or its negation is true (there is no “middle” possibility). Law of Contradiction: A statement and its negation cannot both be true. Proof by contradiction is also called “indirect proof” or “proof by reductio ad absurdum [reduction to absurdity]” (RAA). Concerning this technique the accomplished British mathematician G. H. Hardy (1877 - 1947) wrote: “Reductio ad absurdum, which Euclid loved so much, is one of a mathematician’s finest weapons. It is a far finer gambit than any chess gambit: a chess player may offer the sacrifice of a pawn or even a piece, but a mathematician offers the game.” — A Mathematician’s Apology, p. 94 To prove a theorem “If H, then C” (H for hypothesis, C for conclusion) by this technique, we begin by assuming that ¬C (the negation of C) is true. This opposite assumption is called the “RAA [for reductio ad absurdum] hypothesis”.

Introduction

12

It is temporary assumption from which we derive a contradiction. Once we have shown that ¬C leads to a contradiction it follows from the Laws of Contradiction and Excluded Middle that C must be true. A “contradiction” is a statement that denies something accepted as true: an axiom, a previous theorem, the hypothesis H, or even the RAA hypothesis ¬C itself. Proof by contradiction amounts of saying, “Consider the alternative”. I have H, I want to show C. I know by the two laws of logic that one and only one of the two statements, C or ¬C, is true, so the only alternative to C being true is that ¬C is true. So I investigate the possibility that ¬C is true. In deducing a contradiction I discover that if ¬C were true then something silly would happen. So I conclude that ¬C is unacceptable and that consequently C is the statement that is true.

1.9

Axiomatic vs Intuitive Thinking in Mathematics

Brouwer was the champion of intuitive thinking in mathematics, as Hilbert was of axiomatic thinking. Brouwer’s and Hilbert’s approaches may also be called “genetic” (or “constructive”) and “existential”, respectively.

1.10

Formal Systems and Metamathematics in PowerEpsilon

In previous sections, we have discussed formal axiomatics, stressing that the primitive terms are to be treated as meaningless for the purpose of deductions from the axioms by logic; i.e. either they have been assigned no meanings, or the meanings they have been assigned are to be left out of account. If they had meanings which have to be taken into account, this would amount to saying that the theorems depend not only on the properties of the primitive terms expressed by axioms, but also on further properties which enter through the use of the meanings. But then those further properties should be stated as additional axioms. Euclid in his Elements fails to state in his “axioms and postulates” all the properties he used. Figures accompany many of his proofs. It had long been taken for granted that the figures are inessential to the proofs, serving only to make it easier to discover them or to follow them or to remember them. But they do in fact sometimes introduce information that is used. This has been dramatically illustrated by devising “proofs” of “false” theorems, such as that every triangle is isosceles. There is nothing different in these “proofs” from proofs given in Euclid except the use of slightly distorted figures.

Introduction

13

The “hidden” assumptions of Euclid have been brought into the light in modern times, and stated as axioms by Pasch, Hilbert and others. Thus Hilbert’s axioms include the following, adapted from Pasch: If a line in the plane of a triangle not passing through a vertex cuts a side, it cuts one or the other of the remaining two sides. Our figures do come out this way; but nothing in Euclid’s text enables us to prove that they must. Hilbert’s “Grundlagen der Geometrie” 1899 gives an elegant treatment of Euclidean geometry from the standpoint of formal axiomatics, with all assumptions explicitly stated.

1.11

About This Book

This is actually a hand book for the geometry library shipped with PowerEpsilon. The emphasis here is on PowerEpsilon as a practical tool, rather than as an object of formal study. This book is divided into three parts: • Part I – The History of Euclid’s Geometry introduces the historical development of Euclidean geometry. Chapter 1. Introduction Provide a brief introduction of PowerEpsilon system and history of Euclidean geometry. • Part II – Type Theory and PowerEpsilon describes the foundation of type theories and PowerEpsilon. Chapter 2. Type Theory Describes the general and fundamental concepts of type theories and higher-order typed λ-calculus.

Chapter 3. What is PowerEpsilon Introduces syntax and semantics of PowerEpsilon system. • Part III – Euclidean Geometry presents a formal treatment of Euclidean geometry in terms of PowerEpsilon. Chapter 4. Euclid’s Primitive Terms The primitive terms of Euclid’s geometry are given. Chapter 5. Euclid’s Defined Terms The defined terms based on primitive terms are presented.

Chapter 6. Euclid’s Axioms Euclid’s 10 axioms are formally specified in PowerEpsilon. Chapter 7. Theorems Proven Without Postulate 5 The formal proof of theorems without using Postulate 5 are presented. Chapter 8. Theorems Proven With Postulate 5 The formal proof of theorems with Postulate 5 are presented.

Finally, Chapter 9 concludes the book with a brief summary and listing some future work.

Part II

Type Theory and PowerEpsilon

14

Chapter 2

Type Theory 2.1

Types in Computer Science

In the Webster’s New Collegiate Dictionary, the following sentences were found concerning the word “type”: . . . a: qualities common to a number of individuals that distinguish them as an identifiable class: as (1): the morphological, physiological, or ecological characters by which relationship between organisms may be recognized (2): the form common to all instances of a word b: a typical and often superior specimen c: a member of an indicated class or variety of people d: a particular kind, class, or group: as (1): a taxonomic category essentially equivalent to a division or phylum (2): a group distinguishable on physiologic or zero logical bases (3): one of a hierarchy of mutually exclusive classes in logic suggested to avoid paradoxes e: something distinguishable as a variety. . . . Type is one of most important concepts in the theory of programming languages. The research progress of the type theory has a profound impact on the development of computer science during the past two decades. Wegner [15] has given a detailed discussion on this question which is quoted as follows: This is a difficult question to answer because a complete answer must characterize aggregate properties of the type system as a whole as well as properties of individual types. We were tempted to replace the question by “What is a type system?”. Instead of such rephrasing we choose to interpret the original question as an abbreviation for the longer question: “What properties must types have both individually and collectively to constitute an acceptable type system for an object-oriented language?”.

15

Type Theory

16

The following collection of partial answers illustrates the variety of levels at which an answer may be formulated. 1. Applicative programmer’s view: Types partition values into equivalent classes with common attributes and operations. Polymorphism allows type to have overlapping value sets so the partition (equivalence relation) becomes a covering (compatibility relation) of the universal value set. 2. System evolution (object-oriented) view: Types are behaviour specifications (predicates) that may be composed and incrementally modified to form new behaviour specifications. Inheritance is an important mechanism for incrementally modifying behaviour that supports system evolution. 3. Type checking view: Types impose syntactic constraints on expressions so that operators and operands of composite expressions are compatible. A type system is a set of rules for associating a type with every semantically meaningful subexpression of a programming language. 4. Verification view: Types determine behaviour invariants that instances of the type are required to satisfy. 5. System programming and security view: Types are a suit of clothes (armor) that protects raw information (bit strings) from unintended interpretations. 6. Implementer’s view: Types specify a storage mapping for values.

2.2

Intuitionistic Logic

In mathematical logic, formal languages in which we can express substantial parts of mathematics have long history, going back to Frege’s formulation in 1872 of the predicate logic. So, if we want a programming language in which it should be possible not just to write down programs but also to reason about them, an obvious attempt is to see whether any of the formalization used for mathematics could also be used for programming.

2.2.1

Nonconstructive Mathematics

Today, the standard formalization of classical, i.e. nonconstructive mathematics is the axiomatization of set theory given by Zermelo in 1908 (and later extended by Fraenkel). However, ZF is not intended to be a language in which we are supposed to actually do mathematics in, but rather a language in which we exhibit the basic principles of set theory. For instance, in ZF there are only two nonlogical symbols, = and ∈, expressing equality and membership respectively. So in ZF we can not write any program at all. Even if we extend ZF to a

Type Theory

17

syntactically richer language, there remains the problem of how to represent programs; the notion of function can not be used because functions in classical set theory are in general not computable.

2.2.2

Constructive Mathematics

Out of the foundational crisis of mathematics in the first decades of this century, constructive mathematics arose as an independent branch of mathematics, mainly developed by Brouwer under the name intuitionism. Constructive mathematics did not get much support because of the general belief that important parts of mathematics were impossible to develop constructively. By the work of Bishop, however, this belief has been shown to be totally wrong. In the book “Foundations of Constructive Analysis”, Bishop rebuilds constructively central parts of classical analysis; and he does it in a way that demonstrates that constructive mathematics can be as simple and elegant as classical mathematics. Bishop has also envisaged the possibility of using a formalization of constructive mathematics for programming, starting from G¨odel’s theory of computable functions of finite type. Constable has also used constructive mathematics as a foundation of programming.

2.2.3

Deductions as Computations and Computations as Deductions

The following are some general examples of “deductions as computations”: • A first example of “deduction as computation” is backward chaining. An algorithm for searching for a deduction of A from B1 , ..., Bn may start with a desired conclusion A, and then apply all rules of deduction in reverse systematically at intermediate stages to see if each statement could arise as intermediate conclusion from intermediate premises. The algorithm then terminates when A has been traced back through various stages to the assumptions B1 , ..., Bn , and does not terminate if it never suceeds in constructing a deduction of A from B1 , ..., Bn . A typical example of this kind of systems is logic programming language Prolog. • A second example of “deduction as computation” is forward chaining. An algorithm for searching a deduction of A from B1 , . . . , Bn may start with B1 , . . . , Bn as data, applying all rules of deduction systematically at intermediate stages to intermediate premises to obtain intermediate conclusions. The program then terminates when A is obtained as a conclusion, and therefore when a deduction of A from B1 , . . . , Bn has been obtained. An idealization of classical expert system language OPS5 is an example of this kind of systems. The following are some general examples of “computation as deduction”:

Type Theory

18

• Think of a computation as proceedings in stages, and as having a unique state at each stage and a unique input history. Each succesive state is one of the possible successor of the previous state of the processor and input history. The possible finite sequences of states compatible with machine operation rules are the possible finite execution sequences. A sequential machine is one with only one execution sequence. A translation from execution sequences to deductions can be described as follows: given the input history H and the current state S and one possible successor state S ′ (there may be many), associate one rule of inference I(H, S, S ′ ) with H and S as premises, and S ′ as conclusion. This is an operational view of computations. There are many other view on computation, and each admits a corresponding deduction system. From another point of view, each execution sequence is a model of a theory, rather than a deduction in the theory. • Every system in which program correctness (i.e., that programs meet their specification) can be proved can be constructed as a logical system. There is an enormous quantity of ongoing work concerning sequentail programs on program specification, program development, and program verification. From intuitionistic point of view, proposition and judgement are different concepts. A proposition is a description of certain fact, we can use logical operators such as ⇒, ∧, ∨, ¬, ∀ and ∃ to construct complex proposition from simple ones. On other hand, when we say that a proposition hold, we have make a judgement. For example, if A stands for “points x and y are on a line”, then A is only a proposition. But if we say that A is true, that is, we have a proof to show that points x and y are on a line, then we have made a judgement. In classical logic, a proposition is a Boolean-valued function with value of true or false. Intuitionistic logic, however, a proposition is determined by the contents of its proof. If we can give a proof of this proposition, then the proposition holds. Therefore, the provability is the true value of the proposition. The meaning of logical connectives and the intuitionistic interpretation of propositions can be related as Table 2.1: That is, the proposition F alse has no P roposition F alse A∧B A∨B A⇒B ∀(x)B(x) ∃(x)B(x)

Proof of Proposition no a proof of A and a proof of B a proof of A or a proof of B giving a proof of A can produce a proof of B giving any objects can produce a proof of B(a) there exists an object and a proof of B(a)

Table 2.1: Interpretation of Logical Connectives

Type Theory

19

proof. The proof of proposition A ∧ B consists of a proof of A and a proof of B. The proof of proposition A ∨ B consists of a proof of A or a proof of B. The proof of proposition A ⇒ B is a method, given a proof of A, a proof of B can be obtained. The proof of proposition ∀(x)B(x) is a method too, given any proof a for A, a proof of B(x) can be obtained. The proof of proposition ∃(x)B(x) consists of a proof a of A and a proof of B(a).

2.2.4

Mechanization of Higer-Order Logic

Mechanization of higher-order logic is an important problem. It was pointed out that there are many problems whic can be conveniently and compactly represented by higher than first-order logic.

2.3

Martin-L¨ of ’s Type Theory

Martin-L¨of’s type theory [9, 10, 11] has been developed with the aim of being a formalization of constructive mathematics. Its rules are formulated in the style of Gentzen’s natural deduction system for predicate logic; a formal system which Gentzen set up in 1936 with the intention that it should be as close as possible to actual reasoning. Martin-L¨of has suggested that type theory also could be viewed as a programming language. As such it is a typed functional language without assignments or other imperative features. Compared with other programming languages, it has a very rich type structure in that a type of a program can be used to describe what the program should do without describing how the program performs its task. The language differs from other programming languages in that all programs terminate. General recursion is not available, but primitive recursion together with functions of higher-order makes it possible to express all provably total recursive functions. In order to express the task of the program in the type system, it is necessary to be able to express properties of programs. Properties can be expressed as propositions (formulae), using predicate logic. In recent years, a number of new type theories has been proposed such as the Calculus of Constructions (CC) by Coquand and Huet [3]. These theories make it possible for us to formally treat some “higher-order” concepts such as “proposition”, “axiom”, “rule”, “transformation”, “problem”, and “proof strategy” etc in one uniform framework. Normally, a software development environment only describe a special kind of “proposition” or “rule”, but can not treat them in a more abstract way. Based on these theories, a number of new approaches for software development have been proposed [2]. In this book we describe the core of a strongly-typed polymorphic functional programming language called PowerEpsilon. Our original motivation came from the problem of finding a strongly-typed language suitable for use as a metalanguage for manipulating programs, proofs, and other similar symbolic data.

Type Theory

20

PowerEpsilon can be used as both a programming language with a very rich set of data structures and a system for formalizing constructive mathematics. In type theory, the concept of types are more basic than sets. We say that A is a type, if we know what is its objects and whether two objects of A are equal. Moreover the equality defined for the objects of a given type A is the equivalent relation, and the equivalent relations are decidable.

2.4 2.4.1

Natural Deduction Systems Deduction System

A deduction system for the predicate calculus consists of a (possibly infinite) recursive set of valid well-formed formulas (wffs), called axioms, and a finite set of mappings, called rules of inferences; each rule of inference maps one or more valid wffs into a valid wff. A wff B is said to be deducible (provable) in such a system if there exists a finite sequence of wffs such that B is the last wff in the sequence and each wff in the sequence is either an axiom or derived from previous wffs in the sequence by one of the rules of inference. Such a sequence of wffs is called a proof of B. Thus, since each axiom is a valid wff and each rule of inference maps valid wffs into a valid wff, it follows that every deducible wff is valid.

2.4.2

Natural Deduction System

A natural deduction system is a deduction system invented by Gentzen in which the set of axioms and inference rules is rich enough to enable valid wffs to be deduced in a very “natural” way. We now use the Greek letter Γ to indicate any sequence of zero or more wffs and use notation Γ ⊢ B standing for wff B is the consequence of Γ.

2.5

Should Types be Modelled by Calculi or Algebra?

Wegner [15] has also discussed this question. His discussion can be summarized as the following: • A calculus is a syntactic system of transformation rules. A “calculus” may be a formal system such as the predicate calculus where computation consists of applying rules of inference to prove theorems. It may be a reduction system such as the λ-calculus where computation consists of reducing expressions to a normal form in which no further reductions are applicable. The notion of calculus that emerges from these examples

Type Theory

21

is that of a syntactically defined set of computation or inference rules are applicable (in reduction systems). • An algebra is a semantic system whose behaviour can be realized by a variety of syntactic calculi. An algebra is semantic system whose behaviour can be realized by a variety of syntactic calculi. For example the algebra of integers can be realized by decimal or binary number systems or even by λ-calculus representation. An algebra may be thought of as an equivalence class of calculi with common behaviour or as an abstraction from a specific syntactic realization of a calculus to a semantic specification of an underlying behaviour. • Specifying a computation as an algebra or a calculus. In some contexts a choice can be made on between specifying a computation as an algebra or a calculus. • Relation between calculi and algebras. Calculi are concrete (syntactic) algebras while algebras are abstract (semantic) calculi. Viewed as a mathematical statement we can simply say that an algebra is model of a calculus in the model theoretical sense, and conversely that a calculus is a concrete realization of some behaviour it is trying to model. Moreover, a given calculus generally has many semantic models and conversely a given algebra can generally be realized by many calculi. • Modelling types with calculi and algebra. Algebras can be used to specify behaviour while calculi can used to specify rules for computation. Since individual types are forms of behaviour they are appropriately specified by algebras. However, relationship among types are forms of behaviour they are appropriately specified by algebras. Multisorted algebras provide a basis for modelling properties of individual types while the second-order λ-calculus provides a basis for modelling properties of the type system as a whole, such as polymorphism. As the theory of power domains has been used to study the semantics of concurrent system, the theory of super types can be used to study the formal logic frameworks.

2.6 2.6.1

Philosophical View of Types Realist View

The realist view of types is that we live in a world populated by values and that types are an explanatory mechanism introduced for the purpose of classifying and managing values. Thus the realist postulates that a global universe exists prior to the things. So the objects of sense perception or sometimes of cognition

Type Theory

22

in general are real in their own right and exist independently of their being known or related. The philosophical position is that “observability depends on existence”.

2.6.2

Intuitionist View

The intuitionistic view of types is that types are the basic conceptual entities of the domain of discourse and that values exist only in so far as they are constructable from some type. Thus the intuitionist requires existence to be demonstrated by observability or constructibility and believes that natural phenomena as well as artificial mathematics and computational entities exist only when they are observed, constructed, or interpreted. The philosophical position is that “existence depends on observability”. From the mathematical point of view, the following corresponding may be observed in the proof theory: Realism Intuitionism

←→ Existence P roof ←→ Constructive P roof

Chapter 3

What is PowerEpsilon The languages used by mathematicians for describing mathematics are rarely said to be formal. It is an usual case that different persons use the different notations to denote the same thing or use the same notations to denote the different thing. All mathematical books were written in very ambiguous natural languages and have used different terminologies. The students moving from one school to another are often shocked by the fact that the classes are taught in a completely different way as they used to be. What we need is a formal language for describing mathematical notations, concepts and proofs so that the students can be educated and the mathematicians can communicate with each others in a unique and rigorous way. The PowerEpsilon [20, 21, 22, 23, 18, 19], was introduced as a system for formalizing constructive mathematics. The system may be viewed as the λ-calculus associated with natural deduction proofs in an extension of Church’s higher-order logic [1]. PowerEpsilon is a strongly-typed polymorphic functional programming language based on Martin-L¨of’s type theory [11] and the Calculus of Constructions (CC) [3, 4]. The system can be used as both a programming language with a very rich set of data structures and a metalanguage for formalizing constructive mathematics. The system has been implemented using the software development system AUTOSTAR constructed by author [17]. PowerEpsilon is a proof checker much similar to other mechanical proof checkers, such as LCF [5] and Nuprl [2], which are completely formal usercontrolled systems. However, PowerEpsilon is more powerful than LCF and Nuprl, in which the equality and induction rules for arbitrary inductive types are definable.

23

CHAPTER 3. WHAT IS POWEREPSILON

3.1

24

Syntax of PowerEpsilon

3.1.1

Notations

For technical reasons the following notations are used in PowerEpsilon: • ! : for the universal quantifier ∀. • ? : for the existential quantifier ∃. • \ : for the λ-abstraction quantifier λ.

3.1.2

Lexicon

Since the limited usage of computer character set (ASCII codes only), we can use a variety of letters, both lowercase (a, b, . . . ), uppercase (A, B, . . . ), and even digits (0, 1, 2, . . . ). However, subscript and superscript letters, and Greek letters usually used in mathematics are not allowed. Comments are enclosed in between % and %.

3.1.3

Syntax

A program written in PowerEpsilon is a theory with an optional query part: program ::= theory {query} theory ::= theory identifier is {import} term decl list end; query ::= query import term list end; A theory is a syntactic unit in PowerEpsilon, which has no semantic meaning at all; the only role played is to syntactically wrap a set of closely related terms (propositions and proofs) into one package. The purpose of introduction of ‘theory’ is to make it easy to manage the proof environment for PowerEpsilon. For instance, Nat is a theory that wraps all the propositions and functions for specifying properties of natural numbers. The query part describes the expressions to be evaluated. Terms in a theory or query may be dependent on other theories. This dependency is specified by a import clause.

CHAPTER 3. WHAT IS POWEREPSILON

25

import ::= import ident list ident list ::= identifier {, identifier}∗ The main part of a theory is a sequence of term declarations. A term declaration is either a term specification or a term definition. A term specification specifies the type of a term. The specification of a term is optional. In the absence of such a specification, the term definition acts as the specification. There is a type inference system which can derive the specification of a term from its definition. If both a specification and a definition for a term are given, the term definition must conform to the term specification. term term term term

decl list ::= term decl {; term decl}∗ decl ::= term dec | term def dec ::= dec identifier : term def ::= def identifier = term

The basic expressions of PowerEpsilon, called terms, are defined as follows: term ::= identifier | Prop | Type(natural) | Kind | (term) | ! (identifier : term {, identifier : term}∗ ) term | ?(identifier : term {, identifier : term}∗ ) term | \(identifier : term {, identifier : term}∗ ) term | [term -¿ term {-¿ term}∗ ] | @(term, term {, term}∗ ) | | let identifier = term in term | lec identifier : term in term

3.1.4

Currying and Higher-Order Terms

PowerEpsilon is a higher-order language – functions types are first class citizens and can be both passed as parameters and return as results. Function application is left-associative, so when we write @(f, x, y) it is passed as @(@(f, x), y), meaning that the result of applying f to x is a function, which is then applied to y. Functions of more than one argument which take them “one at a time” like f are called currying. The curring form of λ-expressions provides some flexibility which is important for writing easily understood programs. For example, \(x1 : A1 ) (\(x2 : A2 ) · · · (\(xn : An )M ) · · ·)

CHAPTER 3. WHAT IS POWEREPSILON

26

can be written \(x1 : A1 ) \(x2 : A2 ) · · · \(xn : An )M, or further simplified to \(x1 : A1 , x2 : A2 , · · · , xn : An )M. !-terms and ?-terms are treated similarly. In addition, the following terms [A1 −> A2 −> · · · −> An−1 −> An ] @(A1 , A2 , A3 , ; · · · , An ) < A1 , A2 , · · · , An−1 , An > are respectively abbreviations for [A1 −> [A2 −> · · · [An−1 −> An ] · · · ; ]] @(· · · @(@(A1 , A2 ), A3 ), · · · , An ) < A1 , < A2 , · · · < An−1 , An > · · · >> Unlike function application which is left-associative, all of other constructs are right-associative. The dec and def constructs are sugared λ-expressions which can be decoded as an explicit on-line form of λ-expression. For instance, if a sequence of defconstructs are given as follows: def S = \(T : Prop) \(x : [T -> T -> T], y : [T -> T], z : T) @(x, z, @(y, z)); def K = \(T : Prop) \(x : T, y : T) x; def I = \(T : Prop) \(x : T) x; ...... These λ-expressions can be decoded as let S = \(T : \(x : @(x, K = \(T : I = \(T : ......

Prop) [T -> T -> T], y : [T -> T], z : T) z, @(y, z)), Prop) \(x : T, y : T) x, Prop) \(x : T) x in

In PowerEpsilon, expressions and types have same forms of representation, for example, the term \(x : T) E can be interpreted as either an expression or a type depending on the role played by that this term in context.

CHAPTER 3. WHAT IS POWEREPSILON

27

Current version of PowerEpsilon has neither built-in functions nor built-in types. Everything must be constructed from bottom. The recursive functions can be defined using both dec and def constructs. There are two kind of variables: identifiers and meta-variables. An identifier is a string of letters or digits beginning with a letter. A meta-variable is an identifier beginning with a character “*”. The meta-variables are specially used for defining inductively defined types.

3.1.5

Abstract Syntax

The abstract syntax of basic expressions in PowerEpsilon are defined as follows: T

::= |

Prop Type(i) (i ∈ ω)

| |

Kind x

| | |

! (x : T1 )T2 ? (x : T1 )T2 \ (x : T1 )T2

| |

[T1 −>T2 ] @(T1 , T2 )

| | |

< T1 , T2 > let x = T1 in T2 lec x : T1 in T2

The kinds Prop, Type(i), and Kind are called type universes. Every kind is assigned a number as its level: LEVEL(Prop) = LEVEL(Type(i)) = LEVEL(Kind)

=

−1; i; ω.

The semantic domains of PowerEpsilon can be classified into three categories. The first is the set of terms. Intuitively, terms are the “ordinary expressions” that describe computable functions and results of computation. The second category contains the types of terms. The third class is kind which is used to describe the functionality of subexpressions of types. Essentially, kinds are “types” of things that appear in types. In PowerEpsilon there are no syntactic distinction between terms, types and kinds, all things are represented as terms. The semantic classification for any given term can be determined by type inference system.

CHAPTER 3. WHAT IS POWEREPSILON

28

Terms are defined inductively as follows: Prop, Type(i) for any natural number i and Kind are term; any variable x is a term; if t1 and t2 are terms, then @(t1, t2), and [t1 -> t2] are terms; if x is a variable, T1 and T2 are a terms, then \(x : T1) T2, !(x : T1) T2, ?(x : T1) T2, let x = T1 in T2 and lec x : T1 in T2 are a term, where the symbol \ is the λ-abstraction symbol λ, ! is the universal quantifier ∀ and ? is the existential quantifier ∃. Interactions with PowerEpsilon is centered on the theory. A theory contains a set of subtheories and an ordered collection of definitions, theorems and objects. A checked theory is retained by the system and can be later referred to by the users. The definition of a term, type or kind t with body b is given in the form of “def t = b”. The declaration for a term, type or kind t with the declaration T is given in the form “dec t : T”. In a formal theory, the axioms and assumptions can be described using declaration-constructs, and the proofs of propositions, lemmas and theorems will be represented using definition-constructs.

3.2

Type Inference Rules of PowerEpsilon

We now describe the judgement form and the inference rules of PowerEpsilon.

3.2.1

Contexts

A context Γ is a list of bindings of the form x:A, where x is a variable and A is a term. The empty context is denoted by . The set of free variables in a context Γ ≡ x1 : A1 , · · · , xn : An , is defined as ∪ ∪ FV(Γ) = ({xi } FV(Ai )) 1≤i≤n

3.2.2

Judgements

A judgement is a form Γ⊢M:A where Γ is a context, and M and A are terms. The intuitive meaning of the judgement is that M has type A in context Γ. We write ⊢ M : A for ⊢ M : A.

3.2.3

Inference Rules

The type inference rules are listed in Figure 3.1 and Figure 3.2. In the rules, Γ is assumed to be a valid context, where K and K’ stand for arbitrary kinds, i, j and k for natural numbers. There is a special treatment of the formation rule for the strong sum types (the existential quantifier formula) ?(x : A) B for

CHAPTER 3. WHAT IS POWEREPSILON

(Ax)

(Variable)

(Constant)

Γ, x : A, Γ′ ⊢ Prop : Type(0) Γ, x : A, Γ′ ⊢ x : A

Γ ⊢A : K (x ̸∈ FV(Γ)) Γ, x : A ⊢ Prop : Type(0)

(Type)

(Π − 1)

(Π − 2)

⊢ Prop : Type(0)

Γ ⊢ Prop : Type(0) Γ ⊢ Type(i) : Type(i + 1) Γ ⊢A : K; Γ, x : A ⊢P : Prop Γ ⊢ !(x : A)P : Prop

Γ ⊢A : K; Γ, x : A ⊢B : Type(j) (k = max{LEVEL(K), j}) Γ ⊢ !(x : A)B : Type(k) where K ≡ Prop or Type(i), (i ∈ ω)

Figure 3.1: Type Inference Rules for PowerEpsilon

29

CHAPTER 3. WHAT IS POWEREPSILON

(−> − 1)

(−> − 2)

Γ ⊢A : K; Γ ⊢B : Type(j) (k = max{LEVEL(K), j}) Γ ⊢ [A−>B] : Type(k) where K ≡ Prop or Type(i), (i ∈ ω) (λ − Abst)

Γ, x : A ⊢M : B; Γ, x : A ⊢B : K Γ ⊢ \(x : A)M :!(x : A)B

(App − 1)

Γ ⊢M :!(x : A)B; Γ ⊢N : A′ (A′ ≪ A) Γ ⊢ @(M, N) : B[N/x]

(App − 2)

Γ ⊢M : [A−>B]; Γ ⊢N : A′ (A′ ≪ A) Γ ⊢ @(M, N) : B

(App − 3)

(App − 4)

(Σ)

Γ, A : K ⊢P : Prop Γ ⊢ [A−>P] : Prop

Γ ⊢M ≡ \(x : Kind)M′ ; Γ ⊢N ≡ Prop; Γ ⊢M′ [N/x] : A Γ ⊢ @(M, N) ≡ M′ [N/x] : A Γ ⊢M ≡ \(x : Kind)M′ ; Γ ⊢N ≡ Type(i); Γ ⊢M′ [N/x] : A Γ ⊢ @(M, N) ≡ M′ [N/x] : A

Γ ⊢A : K; Γ, x : A ⊢B : K′ (k = max{0, LEVEL(K), LEVEL(K′ )}) Γ ⊢ ?(x : A)B : Type(k) where K ≡ Prop or Type(i), K′ ≡ Prop or Type(j), (i, j ∈ ω)

(Pair)

(Proj − 1)

Γ ⊢M : A′ ; Γ ⊢N : B′ ; Γ, x : A ⊢B : K (A′ ≪ A, B′ ≪ B[M/x]) Γ ⊢ < M, N >:?(x : A)B Γ ⊢ M :?(x : A)B Γ ⊢ M :?(x : A)B (Proj − 2) Γ ⊢ @(FST, M) : A Γ ⊢ @(SND, M) : B[@(FST, M)/x]

(Conversion)

(Cumulativity)

Γ ⊢M : A; Γ ⊢A′ : K (A ≡ A′ ) Γ ⊢M : A′ Γ ⊢M : A; Γ ⊢A′ : K (A ≪ A′ ) Γ ⊢M : A′

Figure 3.2: More on Type Inference Rules for PowerEpsilon

30

CHAPTER 3. WHAT IS POWEREPSILON

31

preventing the logically inconsistency of in system, where the objects in Prop hierarchy are lifted to the Type(0) hierarchy, the objects in Type(i) hierarchy are lifted to the Type(i+1) hierarchy (i ∈ ω), and the types of form ?(x : Kind) @(P, x) are not allowed. Since adding type-indexed strong sums directly to the proposition level Prop of the system results in a logically inconsistent system in which Girard’s paradox can be derived. Furthermore, the type ?(x : Kind) @(P, x) formally does not have any logical meaning, since Kind is merely used for specifying generic type hierarchies in the system.

3.2.4

Derivations

A derivation of a judgement J is a finite sequence of judgements J 1 , · · · , Jn with Jn ≡ J such that, for all 1 ≤ i ≤ n, Ji is the consequence of some instance of an inference rule of whose premises are in {Jk | k < i}. A judgement J is derivable if there is a derivation of J.

3.2.5

Γ-Terms, Γ-Types and Γ-Propositions

A term M is called a Γ-term (or well-typed term under Γ) if Γ ⊢M:T for some T. A term T is called a Γ-type if Γ ⊢T:K for some kind K. A Γ-type T is called a Γ-proposition if Γ ⊢T’: Prop for some T′ ≡ T and called a proper Γ-type otherwise.

3.2.6

Type Conversion Rules

We now introduce another kind of judgement Γ ⊢M ≡ N, whose intuitive meaning is that the terms M and N denote the same object. Here ≡ is the smallest congruence over propositions and contexts containing β-conversion. Figure 3.3 summarizes the definition of type conversion rules.

3.2.7

Cumulativity Relation

The type inclusions between the universes induce the type cumulativity that is syntactically characterized by the cumulativity relation ≪. The binary relations ≪i (i ∈ ω) over terms are inductively defined as follows: 1. A ≪0 B if and only if one of the following holds: (a) A ≡ B; (b) A ≡ Prop and B ≡ Type(i) for some i ∈ ω, or A ≡ Type(i) and B ≡ Type(j) for some i < j; (c) A ≡ Prop and B ≡ Kind, or A ≡ Type(i) and B ≡ Kind for some i ∈ ω. 2. A ≪i+1 B if and only if one of the following holds:

CHAPTER 3. WHAT IS POWEREPSILON

Γ ⊢M : P; Γ ⊢P : Prop; Γ ⊢P ≡ Q (Type − Equality1) Γ ⊢M : Q Γ ⊢M : P; Γ ⊢P : Type(i); Γ ⊢P ≡ Q (Type − Equality2) Γ ⊢M : Q Γ ⊢M : P; Γ ⊢P : Kind; Γ ⊢P ≡ Q (Type − Equality3) Γ ⊢M : Q Γ ⊢M : N (Reflectivity) Γ ⊢M ≡ M

Γ ⊢M ≡ N (Symmetry) Γ ⊢N ≡ M

Γ ⊢M ≡ N; Γ ⊢N ≡ P (Transitivity) Γ ⊢M ≡ P Γ ⊢P1 ≡ P2; Γ, x : P1 ⊢M1 ≡ M2 (Abst − Equality) Γ ⊢ \(x : P1)M1 ≡ \(x : P2)M2 Γ ⊢P1 ≡ P2; Γ, x : P1 ⊢M1 ≡ M2 (Π − Equality) Γ ⊢ !(x : P1)M1 ≡ !(x : P2)M2 Γ ⊢P1 ≡ P2; Γ, x : P1 ⊢M1 ≡ M2 (Σ − Equality) Γ ⊢ ?(x : P1)M1 ≡ ?(x : P2)M2 Γ ⊢P1 ≡ P2; Γ ⊢M1 ≡ M2 (−> − Equality) Γ ⊢ [P1−>M1] ≡ [P2−>M2] Γ ⊢ @(M, N) : P; Γ ⊢M ≡ M1; Γ ⊢N ≡ N1 (App − Equality) Γ ⊢ @(M, N) ≡ @(M1, N1) Γ ⊢ < M, N > : P; Γ ⊢M ≡ M1; Γ ⊢N ≡ N1 (Pair − Equality) Γ ⊢ < M, N > ≡ < M1, N1 > Γ, x : A ⊢M : P; Γ ⊢N : A (β − conversion) Γ ⊢ @(\(x : A)M, N) ≡ M[N/x] Meta − Var

Γ ⊢ ∗a : A; Γ ⊢ b : B; Γ ⊢ A ≡ B Γ ⊢ ∗a ≡ b

Figure 3.3: Type Conversion Rules for PowerEpsilon

32

CHAPTER 3. WHAT IS POWEREPSILON

33

(a) A ≪i B; (b) A ≡ !(x : A1)A2 and B ≡ !(x : B1)B2 for some A1 ≪i B1 and A2 ≪i B2; (c) A ≡ \(x : A1)A2 and B ≡ \(x : B1)B2 for some A1 ≪i B1 and A2 ≪i B2; (d) A ≡ ?(x : A1)A2 and B ≡ ?(x : B1)B2 for some A1 ≪i B1 and A2 ≪i B2; (e) A ≡ [A1−>A2] and B ≡ [B1−>B2] for some A1 ≪i B1 and A2 ≪i B2; (f) A ≡ @(A1, A2) and B ≡ @(B1, B2) for some A1 ≪i B1 and A2 ≪i B2; (g) A ≡ < A1, A2 > and B ≡ < B1, B2 > for some A1 ≪i B1 and A2 ≪i B2; The additional cumulativity relation ≪ defined for Kind over variables of type Kind are given as follows: 1. X ≪ Prop if X is a variable and X : Kind; 2. X ≪ Type(i) if if X is a variable and X : Kind; 3. X ≪ Y if X and Y are variables, and X : Kind and Y : Kind; In connection with the rules App - 3 and App - 4, this will consists of a complete lazy type evaluation mechanism for Kind. With the definition given above, the cumulativity relation ≪ is defined as follows: ∪ def ≪ = ≪i i

3.2.8

Curry-Howard Isomorphism

One of the basic ideas behind constructive type theory is the Curry-Howard interpretation of propositions as types and proofs as programs. This view of propositions is related both to Heyting’s explanation of intuitionistic logic and, on a more formal level, to Kleene’s realizability interpretation of intuitionistic arithmetic. The Curry-Howard isomorphism [8] establishes the relationship between the calculus of deductions in the higher-order intuitionistic predicate logic and the calculus of typed terms in the polymorphic λ-calculus. The isomorphism maps • Higher-order predicate logic to corresponding types. • Deduction of predicates to terms of the corresponding type. This correspondence between propositions and types is a powerful paradigm for mechanical proof construction and computer programming. The judgement or type assignment “a : A” in PowerEpsilon can be read in at least the four following ways:

CHAPTER 3. WHAT IS POWEREPSILON

34

• a is an element of type A. • a is a proof object for the proposition A. • a is a program satisfying the specification A. • a is a solution to the problem A. In classical mathematics, a proposition is thought of as being true or false independently of whether we can prove or disprove it. On the other hand, a proposition is constructively true only if we have a method to prove it. For example, classically the law of excluded middle, A ∨ (¬A), is true, since the proposition A is either true or false. Constructively, however, a disjunction is true only if we can prove one of the disjuncts. Since we have no method of proving or disproving an arbitrary proposition A, we have no proof of A ∨ (¬A) and therefore the law of excluded middle is not constructively valid. We may establish the following identifications between propositions and types. • A proof of type [A -> B] is a function (method, program) which to each proof of A gives a proof of B. • A proof of type @(Product, A, B) is a pair whose first component is a proof A and whose second component is a proof of B. • A proof of type @(Sum, A, B) is either a proof A or a proof of B together with the information of which of A or B we have a proof. The elements in @(Sum, A, B) are of the form @(INJ1, A, B, a) and @(INJ2, A, B, b) where a : A and b : B. • A proof of type !(x : A) @(B, x) is a function (method, program) which to each element a of type A gives a proof of @(B, a). The type corresponding to this is the Cartesian product of a family of types. The elements of this type are functions which, when applied to an element a in the type A gives an element in the type @(B, a). • A proof of type ?(x : A) @(B, x) is a pair whose first component a is an element of type A and whose second component is a proof of @(B, a). The type corresponding to this is the disjoint union of a family of types. The elements of this type are pairs where a : A and b : @(B, a). From the points of view for computer programming, a proposition could be interpreted as the specifications of the task of a program in the following way. • @(Product, A, B) is a specification of programs which, when executed, yield a pair @(PRODUCT, A, B, a, b), where a is a program for the task A and b is a program for the task B.

CHAPTER 3. WHAT IS POWEREPSILON

35

• @(Sum, A, B) is a specification of programs which, when executed, either yields @(INJ1, A, B, a) or @(INJ2, A, B, b), where a is a program for A and b is a program for B. • [A -> B] is a specification of programs which, when executed, yields \(x : A) b, where b is a program for B under the assumption that x is a program for A. • !(x : A) @(B, x) is a specification of programs which, when executed, yields \(x : A) b, where b is a program for @(B, x) under the assumption that x is an object of A. This means that when a program for the problem !(x : A) @(B, x) is applied to an arbitrary object x of A, the result will be the program for @(B, x). • ?(x : A) @(B, x) is a specification of programs which, when executed, yields , where a is an object of A and b is a program for @(B, a). So, to solve the task ?(x : A) @(B, x) it is necessary to find a method which yields an object a in A and a program for @(B, a). There are two ways to manipulate types, one way is to construct programs from types and another is to deduce type structures from the corresponding programs. The fomer is corresponding to program derivation from specification and the later is corresponding to program verification.

3.2.9

From Types to Programs: The Constructive Mathematics

The extraction of programs from proofs or programming in constructive logic is based on the idea that under some restrictions proofs can be considered as programs. The general scheme of extracting programs from proofs is the following: at the beginning one writes a specification of the problem in some formal language (for example, the PowerEpsilon). Then a formal proof of this specification is constructed and the program is extracted from this proof according to one of the known methods. Because proof construction is not decidable, strategic information has to be provided by users.

3.2.10

From Programs to Types: The Type Inferences

The type inference mechanism of PowerEpsilon can be used mathematically as a proof editor to check whether a proof for a mathematical theorem is written correctly.

3.2.11

Applications of PowerEpsilon

There are many different ways that PowerEpsilon can be used.

CHAPTER 3. WHAT IS POWEREPSILON

36

Standardization of Mathematics The system can be used as a constructive logic to develop mathematical proofs. Usually, the papers submmited to mathematical journals contain a large amount of mathematical theorems and proofs. Those theorems and proofs often have two problems. First, since the space limitation, the proofs are incomplete presented. Secondly, most proofs contain errors. To judge the correctness of those papers left a heavy burden to the referees. The problems may be solved by making, in certain degree, the standardization of mathematics and mechanization of proof checking much similar to the standardization and mechanization of programming languages processing we have made in software engineering. Functional Language The system can be seen as a functional language, with a number of novel features, such as that every expression has a defined value; every program terminates; the system of types is more expressive than those in common use as it does dependent product and function spaces; and the language is integrated with a logic which to reason about the programs. Formal Program Development System The system can be used as a tool for formal program derivation where programs are extracted from constructive proofs. Formal Program Verification System The system can be used as a tool for program verification, where the programs are developed first and then their correctness are proved. This shows that we have therefore a system in which programming and verification are integrated. Program Transformation System The system can also be used to support program transformation. The essence of program transformation is to take a program into another with same application behaviour, yet improved in some aspect such as time efficiency or space usage. Two functions have the same behaviours when they return the same the same results for all arguments, when they are extensionally equal, in other words. In PowerEpsilon, program transformation will therefore involve the replacement of an object by an extensionally equivalent one, through a series of simple steps of the same kind. From the point of view of constructive logic, program transformation can be considered as the translation from one type to another. Therefore, PowerEpsilon can be used as a meta-language to study the general strategies and schemes of program transformations. Decision Support System PowerEpsilon can be used as a decision support system based on the explanation that decision making can be viewed as a theorem proving process, where for a given problem, we have to prove whether there is a solution to this problem. A typical decision making process can be expressed at least as the following two propositions:

CHAPTER 3. WHAT IS POWEREPSILON

37

!(p : Problem) ?(s : Solution) @(Solve, s, p);

or for a specific SOLUTION of type Solution, !(p : Problem) @(Solve, SOLUTION, p);

for the first formula we have to decide for every problem p whether we can find a solution s which solves p and for the second formula we have to decide for every problem p where a specific method SOLUTION solves p. Knowledge Base System PowerEpsilon can be used as a knowledge base system. A formalism for representing knowledge should at least be capable of fulfilling the following five criteria: 1. Say that something has a certain property without saying what thing has that property. For example, to say John has a sister without saying that who she is. Formally speaking we have: ?(x : Person) @(Sister, John, x). 2. Say that everything in a certain class has a certain property without saying that what everything in that class is. For example, to say that all dogs are mammals without listing all the dogs. Formally speaking we have !(x : Animal) [@(Dog, x) -> @(Mammal, x)]. 3. Say that at least one of two statements is true without saying which is true. For example, to say that John teaches computer science 101 or 102 without specifying which of these courses he actually does teach. Formally speaking we have @(Or, @(Teach, John, CSC101), @(Teach, John, CSC102)).

4. Explicitly say that something is false. For example, John has no sister. Formally speaking, @(Not, ?(x : Person) @(Sister, John, x)). 5. Either settle or leave open to doubt whether two non-identical expressions name the same object. For example, @(FATHER, John) and Bill are two non-identical expressions. They may or may not denote the same individual. If they do, we can explicitly say so by @(Equal, Person, @(FATHER, John), Bill). If there is doubt about their naming the same individual, we omit the above equality. This omission does not preclude their naming the same individual; it simply leaves the knowledge base agnostic about this possibility. PowerEpsilon easily satisfies these five criteria and therefore is a good candidate for representing knowledge. Beside knowledge representation,

CHAPTER 3. WHAT IS POWEREPSILON

38

PowerEpsilon provides powerful mechanism for knowledge manipulation including natural deduction and consistency checking. The reflection mechanism of PowerEpsilon provide a flexible way to adjust system itself to a specific application dynamically and autonomously. Computer-Aided Education Computer-aided instruction has many advantages. When well programmed, a computer can relieve teachers of giving and correcting drill exercises, even of teaching many manipulative techniques. Students who react negatively to a teacher can turn to the computer; it instructs without emotional involvement and gives instant, impartial feedback. It shows no impatience no matter how often a studen repeats a mistake. The computer’s greatese asset is that it forces the student to become an active participant. For most of students, mathematical theorem proving is a hard job. PowerEpsilon can provide a lof of assistance in this area. Tools for Semantics of Programming Languages Since its powerful type system, PowerEpsilon can be used as a formal tool to study semantics of programming languages.

3.3

Formal Logic in PowerEpsilon

3.3.1

Logical Operators Defined by PowerEpsilon

3.3.1.1

Logical Implication

If A and B are two predicatess, then [A -> B] represents the logical implication; its antecedent is A and its consequent is B. 3.3.1.2

Universal Quantified Formula

If A and B are two predicates and x is a free variable in B, then !(x : a formula. 3.3.1.3

Existential Quantified Formula

If A and B are two predicates and x is a free variable in B, then ?(x : a formula.

3.3.2

A) B is

A) B is

Logical Operators Derived from PowerEpsilon

Four logical operators are defined over predicates Prop and type universe Type(i) where i = 0, 1, . . ..

CHAPTER 3. WHAT IS POWEREPSILON

3.3.2.1

39

Logical Negation

If B is a predicate, then @(Not, B) is a predicate too. dec dec dec dec dec dec

3.3.2.2

Not Not0 Not1 Not2 Not3 Not4

: : : : : :

[Prop -> [Type(0) [Type(1) [Type(2) [Type(3) [Type(4)

Prop]; -> Prop]; -> Prop]; -> Prop]; -> Prop]; -> Prop];

Logical Conjunction

If A and B are two predicates, then @(And, A, B) represents the logical conjunction; its operands A and B is called conjuncts. dec dec dec dec dec dec

And And0 And1 And2 And3 And4

: : : : : :

[Prop -> [Type(0) [Type(1) [Type(2) [Type(3) [Type(4)

Prop -> Prop]; -> Type(0) -> Prop]; -> Type(1) -> Prop]; -> Type(2) -> Prop]; -> Type(3) -> Prop]; -> Type(4) -> Prop];

PRODUCT is the constructor of And. dec PRODUCT : !(A : Prop, B : Prop) [A -> B -> @(And, A, B)]; PROJ1 and PROJ2 are two projection functions of And. dec PROJ1 dec PROJ2

: !(A : Prop, B : Prop) [@(And, A, B) -> A]; : !(A : Prop, B : Prop) [@(And, A, B) -> B];

Similarly, PRODUCT0 is the constructor of And0. dec PRODUCT0 : !(A : Type(0), B : Type(0)) [A -> B -> @(And0, A, B)];

and PROJ01 and PROJ02 are two projection functions of And0. dec PROJ01 : !(A : Type(0), B : Type(0)) [@(And0, A, B) -> A]; dec PROJ02 : !(A : Type(0), B : Type(0)) [@(And0, A, B) -> B];

CHAPTER 3. WHAT IS POWEREPSILON

3.3.2.3

40

Logical Disjunction

If A and B are two predicates, then @(Or, A, B) represents the logical disjunction; its operands A and B is called disjuncts. dec dec dec dec dec

Or Or0 Or1 Or2 Or3

: : : : :

[Prop -> [Type(0) [Type(1) [Type(2) [Type(3)

Prop -> Prop]; -> Type(0) -> Prop]; -> Type(1) -> Prop]; -> Type(2) -> Prop]; -> Type(3) -> Prop];

INJ1 and INJ2 are two constructors of Or. dec INJ1 : !(A : Prop, B : Prop) [A -> @(Or, A, B)]; dec INJ2 : !(A : Prop, B : Prop) [B -> @(Or, A, B)]; WHEN is the projection function of Or. dec WHEN : !(U : Prop, V : Prop, W : Prop) [@(Or, U, V) -> [U -> W] -> [V -> W] -> W]; INJ01 and INJ02 are two constructors of Or0. dec INJ01 : !(A : Type(0), B : Type(0)) [A -> @(Or0, A, B)]; dec INJ02 : !(A : Type(0), B : Type(0)) [B -> @(Or0, A, B)]; WHEN0 is the projection function of Or0. dec WHEN0 : !(U : Type(0), V : Type(0), W : Type(0)) [@(Or0, U, V) -> [U -> W] -> [V -> W] -> W];

dec Or30 : [Type(0) -> Type(0) -> Type(0) -> Prop]; INJ301 and INJ302 and INJ303 are three constructors of Or30. dec INJ301 : !(A : Type(0), B : Type(0), C : Type(0)) [A -> @(Or30, A, B, C)]; dec INJ302 : !(A : Type(0), B : Type(0), C : Type(0)) [B -> @(Or30, A, B, C)];

CHAPTER 3. WHAT IS POWEREPSILON

41

dec INJ303 : !(A : Type(0), B : Type(0), C : Type(0)) [C -> @(Or30, A, B, C)];

WHEN30 is the projection function of Or30. dec WHEN30 : !(U : Type(0), V : Type(0), Z : Type(0), W : Type(0)) [@(Or30, U, V, Z) -> [U -> W] -> [V -> W] -> [Z -> W] -> W];

3.3.2.4

Equivalent Relation

Two formulars A and B are said to be equivalent iff [A -> B] and [B -> A]. def def def def def

3.3.3

Eq Eq0 Eq1 Eq2 Eq3

= = = = =

\(A \(A \(A \(A \(A

: : : : :

Prop, Type(0), Type(1), Type(2), Type(3),

B B B B B

: : : : :

Prop) Type(0)) Type(1)) Type(2)) Type(3))

@(And, @(And0, @(And1, @(And2, @(And3,

[A [A [A [A [A

-> -> -> -> ->

B], B], B], B], B],

[B [B [B [B [B

-> -> -> -> ->

A]); A]); A]); A]); A]);

Classical Logic and Excluded-Middle Rules

In a proof by contradiction, one begins by supposing that the assertion we wish to prove is false. Then we can feel free to use the negation of what we are trying to prove as one of the initial statements in constructing a proof. In a proof by contradiction we look for a pair of statements developed in the course of the proof which contradict one another. Since both cannot be true, we have to conclude that our original supposition was wrong and therefore that our desired conclusion is correct. The possibility of extending the Curry-Howard isomorphism to classical logic is a significant discovery of the decade. It has consequences both from the point of view of mathematical logic and from the point of view of computer science. We get classical logic from intuitionistic logic by adding the axiom ¬¬A−>A for any proposition A. The computational counterpart of this axiom has been very recently understood. It corresponds to a control operator such as the operator C defined by M. Felleisen in 1986. This kind of operator, with appropriated reduction rules, allows to add imperative features (for instance goto, exception handling, ..., but not assignments) to purely functional languages. A good candidate for implementation is probably by λµ-calculus of M. Parigot. It is a variant of the λ-calculus + C but has more elegant reduction rules. Now, if we consider classical logic without implication, it becomes possible to identify the formula ¬¬A with A. This has led to λSym -calculus, a nice restriction of λ-calculus definied with non-deterministic computational rules.

CHAPTER 3. WHAT IS POWEREPSILON

42

Another approach is to interpret proofs as winning strategies for a two-player game in which the rules depend on the disputed formula. This view emphasizes a dynamic analysis of computation, strongly related to weak-head-style reduction. Especially, in this framework, we can define computation algorithms redically different from the usual computation algorithm based on λ-calculus, but with a good behaviour on some examples of classical proofs. dec Excl_Axm : !(P : Prop) @(Or, P, @(Not, P)); dec Excl_Axm0 : !(P : Type(0)) @(Or1, P, @(Not0, P)); dec Excl_Axm1 : !(P : Type(1)) @(Or3, P, @(Not1, P));

Part III

Euclidean Geometry

43

Chapter 4

Euclid’s Primitive Terms As I remarked in the Introduction, I assume you studied plane geometry in high school. I don’t expect that you remember the details, but I do hope you retain some feeling for how the game is played. We are about to examine Book I of the Elements. (In all, the Elements has XIII “books”, though today they would be called “chapters”.) As all high school texts are based at least indirectly on the Elements, most of the theorems will be familiar. However, our purpose is not so much to study the content of Euclid’s work as to analyze its structure. Euclid’s Elements was soon established as the standard introduction to geometry, and copied were much in demand. As every copy was handmade, even direct copies of the original manuscript must have differed somewhat from each other. Changes in the text could only accumulate as these copies, and copies of these copies, were distributed around the Mediterranean, and were copied and recopied in their turn, and so on over the centuries. Sometimes changes were made deliberately, as when Theon of Alexandria (4th century A.D.), displeased with the version that had come down to him after almost 700 years, clarified the language, interpolated steps in proofs, and added alternate proofs and minor theorems that were entirely his own. The first printed version of the Elements was descended from Theon’s revision, as follows. About 400 years after Theon, a copy (or a copy of a copy, or a copy of copy of copy, etc.) of Theon’s revision was translated into Arabic. Then, about 1120, a copy (or a copy of a copy, etc.) of the Arabic translated into Latin by the English philosopher Adelard of Bath. Then, about 1270, Adelard’s translation (or a copy, etc.) was revised, in light of other Arabic sources (themselves derived from possibly different Greek versions of Theon’s revision), by the Italian scientist Campanus of Navara. Finally, Campanus’s revision (or a copy, etc.) was printed in Venice in 1482. Though the title page said the work was Euclid’s, untold alternations had been made on the roughly 1800-year voyage from Euclid’s hand into print. 44

Euclid’s Primitive Terms

45

Since 1482 a number of Greek versions of Theon’s revision have come to light and, miraculously, one Greek Elements not based on Theon’s revision and presumably based on older version. From these sources a new Greek text was compiled in the 1880s by the Danish philologist Johan L. Heiberg, which is probably the closest scholars will ever come to reconstructing the original. Our quatations of the Elements are from this text’s 1908 translation into English by Sir Thomas L. Heath. [6]

4.1

Real Number System

Beside of Bool, Nat, and classical logic, we also need the real number system defined as follows. dec Real : Type(0); A natural model of Euclidean geometry is “analytic geometry”, a part of Real Analysis (not geometry). To introduce Real as the primitive here is that we intend to use Real as the interface with other algebraic systems such as Mathematica.

4.1.1

Relations on Real

The relations defined on Real are RREq for =, RRLs for , RRGe for ≥: dec RREq : [Real -> Real -> Prop]; dec RRLs : [Real -> Real -> Prop]; dec RRLe : [Real -> Real -> Prop]; dec RRGs : [Real -> Real -> Prop]; dec RRGe : [Real -> Real -> Prop];

4.1.2

Addition of Real

The addition operation for Real is declared as follows. It is usually defined from addition operation of rationals. dec RRADD : [Real -> Real -> Real];

Euclid’s Primitive Terms

4.1.3

46

Negation and Substraction of Real

The negation operation RRNEG and substraction operation RRMINUS of Real are declared as follows: dec RRNEG : [Real -> Real]; dec RRMINUS : [Real -> Real -> Real];

4.1.4

Multiplication of Real

The multiplication operation RRTIMES, the square root operation RRSQRT, and the exponentiation operation RRPOWER of Real are declared as follows: dec RRTIMES : [Real -> Real -> Real]; dec RRSQRT : [Real -> Real]; dec RRPOWER : [Real -> Nat -> Real];

4.1.5

Reversion and Division of Real

The inversion operation RRREV and division operation RRPOWER of Real are declared as follows: dec RRREV : [Real -> Real]; dec RRDIV : [Real -> Real -> Real];

4.1.6

Absolute Value of Real

We evaluate the absolute value of a real number using the following function. dec RRABS : [Real -> Real];

4.1.7

Constants of Real

Some useful constants are declared such as RROO for 0, RRONE for 1, and RRTWO for 2. dec RROO : Real;

Euclid’s Primitive Terms

47

dec RRONE : Real; dec RRTWO : Real;

4.1.8

Properties of RREq

For any real number a, a is equal to a. dec RRRefl : !(a : Real) @(RREq, a, a); For any real number a and b, if a is equal to b then b is equal to a too. dec RRSymm : !(a : Real, b : Real) [@(RREq, a, b) -> @(RREq, b, a)]; For any real number a, b and c, if a is equal to b and b is equal to c then a is equal to c. dec RRTran : !(a : Real, b : Real, c : Real) [@(RREq, a, b) -> @(RREq, b, c) -> @(RREq, a, c)];

4.1.9

Rules of Exclusive-Middle

dec Excl_RR : !(a : Real, b : Real) @(Sum31, @(RREq, a, b), @(RRGs, a, b), @(RRLs, a, b)); dec Excl_RR2 : !(a : Real, b : Real) @(Sum31, @(RRGs, a, b), @(RRGs, b, a), @(RREq, a, b));

4.2

Points

The Elements has no preface or introduction, no statement of objectives; it offers no motivation or commentary. It opens abruptly with a list of 23 “Definition” at the begining of Book I. Of these, we will need 19, of which the first is Definition 4.1 (Point) A point is that which has no part.

Euclid’s Primitive Terms

48

Euclid is saying that a point cannot be divided into parts, even in thought; it has neither length, nor width, nor thickness. When a modern physicist studies a pendulum, he or she makes simplifying assumptions that all its mass is concentrated in the bob, that there is no friction at the pivot, and that it swings in a perfect vacuum. Of course no such pendulum exists. A physicist’s pendulum is an ideal pendulum, the conceptual limit approached by real pendulum with progressively less massive wires and better-lubricated pivots, swinging in rarer and rarer atmosphere. We can’t be sure what Euclid was thinking as he composed the Elements, because the text is devoid of explanatory passages; but it appears he saw geometry as something akin to modern physics. A “point” is an idealization of a dot much as a physicist’s pendulum is an idealization of a real pendulum. A point is the limit approached by dots that become smaller and smaller. It is all right to imagine a point as a real dot whose dimensions are negligibly small – so that in effect it “has no part” – as long as we remember that the fact it is a ideal object whose length, width, and thickness are absolute zero. There is a sense in which it doesn’t matter how you visualize a point, or whether you visualize points at all.

4.2.1

Data Structure: Point

Based real number system Real, a point is defined as a pair of real number on a plane. def Point = @(Product0, Real, Real); This interpretation is a model for Euclidean geometry because under it Euclid’s postulates are transformed into theorems of Real Analysis.

4.2.2

Constructor of Point

The constructive function for Point is easy to specify accordingly. def MK_POINT = \(x : Real, y : Real) @(PRODUCT0, Real, Real, x, y);

4.2.3

Selectors of Point

There are two selection functions of Point, namely, GET X and GET Y. def GET_X = \(A : Point) @(PRO01, Real, Real, A); def GET_Y = \(A : Point) @(PRO02, Real, Real, A);

Euclid’s Primitive Terms

4.2.4

49

Distance Between Two Points

The distance between any two points A and B can be calculated as follows: dec DISTANCE : [Point -> Point -> Real]; def DISTANCE = \(A : Point, B : Point) let x1 = @(GET_X, A), y1 = @(GET_Y, A), x2 = @(GET_X, B), y2 = @(GET_Y, B) in let xx = @(RRMINUS, x2, x1), yy = @(RRMINUS, y2, y1) in let xx2 = @(RRTIMES, xx, xx), yy2 = @(RRTIMES, yy, yy) in @(RRSQRT, @(RRADD, xx2, yy2)); The distances from A to B and from B to A are completely same. We therefore have Distance Symm declared as follows: dec Distance_Symm : !(A : Point, B : Point) let AB = @(DISTANCE, A, B), BA = @(DISTANCE, B, A) in @(RREq, AB, BA); For any points A, B and C, if AB is less than CA then AC is greater than BA. dec RRLs_Lem : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BA = @(DISTANCE, B, A), CA = @(DISTANCE, C, A), AC = @(DISTANCE, A, C) in [@(RRLs, AB, CA) -> @(RRGs, AC, BA)]; Reversely, for any points A, B and C, if AB is greater than CA then AC is less than BA. dec RRGs_Lem : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BA = @(DISTANCE, B, A), CA = @(DISTANCE, C, A), AC = @(DISTANCE, A, C) in

Euclid’s Primitive Terms

50

[@(RRGs, AB, CA) -> @(RRLs, AC, BA)]; With equality we have the same result. For any points A, B and C, if AC is equal to CA then AB is equal to CA too. dec RREq_Lem : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BA = @(DISTANCE, B, A), CA = @(DISTANCE, C, A), AC = @(DISTANCE, A, C) in [@(RREq, AC, BA) -> @(RREq, AB, CA)];

4.2.5

Equality of Points

Two points A and B are equal iff each of its coordinates are equal respectively. def Eq_Point = \(A : Point, B : Point) let x1 = @(GET_X, A), y1 = @(GET_Y, A), x2 = @(GET_X, B), y2 = @(GET_Y, B) in @(And0, @(RREq, x1, x2), @(RREq, y1, y2));

4.2.6

Properties of Eq Point

The equality on Point satisfies the reflexive, symmetric and transitive properties, which can be stated as follows. For any point A, A is equal to A. dec Eq_Point_Ref : !(A : Point) @(Eq_Point, A, A); For any points A and B, if A is equal to B, then B is equal to A. dec Eq_Point_Sym : !(A : Point, B : Point) [@(Eq_Point, A, B) -> @(Eq_Point, B, A)]; For any points A, B and C, if A is equal to B and B is equal to C, then A is equal to C. dec Eq_Point_Tran :

Euclid’s Primitive Terms

!(A : Point, B : [@(Eq_Point, A, @(Eq_Point, B, @(Eq_Point, A,

4.2.7

51

Point, C : Point) B) -> C) -> C)];

Representation Basis

A better representation of any definition of a given geometric figure such as the straight lines and triangles should be based on Point. We can obtain a finite straight line from two given points A and B; and an angle or a triangle from three given points A, B and C. For instance, to define equilateral triangles, we will be able to give two different definitions based either Triangle or Point. The first one, Equil Triangle, is based on Triangle: def Equil_Triangle = \(t : Triangle) let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in @(And0, @(RREq, ab, bc), @(RREq, bc, ca)); and the second one, Equil Triangle2, is based on Point: def Equil_Triangle2 = \(A : Point, B : Point, C : Point) let ab = @(DISTANCE, A, B), bc = @(DISTANCE, B, C), ca = @(DISTANCE, C, A) in @(And0, @(RREq, ab, bc), @(RREq, bc, ca)); We will see, in the proof of Theorem 1, that the second one is much easier to use than the first one.

4.3

Straight Lines

Definition 4.2 (Line) A line is breadthless length. The Definition 4.2 can be straight or curved – when Euclid intends a line to be straight, he always says “straight line”. Definition 4.3 (Extremities of Line) The extremities of a line are points.

Euclid’s Primitive Terms

52

The Definition 4.3 is an explaination of the relation between points and lines; in it Euclid is referring to line segments. Definition 4.4 (Straight Line) A straight line is a line which lies evenly with the points on itself. Sometimes Euclid is more explicit and calls a line segment a “finite line”, but even when he says only “line” he always means it to be finite. The “extremeties” of a line are its ends. As no technical term is introduced in Definition 4.3, it is not really a “definition” in the modern sense of that word. Neither are Definition 4.1, 4.2, or 4.4. A definition is supposed to introduce a new technical term solely by means of previously introduced terms, except of course that unambiguous words and phrases (“the,” “every,” “is called,” “one or more,” etc.) from everyday language can be used as connective tissue. But “part” in Definition 4.1 is a Greek geometrical term (related to the division of figures) not previously introduced in the Elements; and “breadthless length” (Definition 4.2) and “lies evenly with” (Definition 4.4), while probably not technical terms – if they are, they have not been previously introduced – are by no means unambigious phrases. If Definition 4.1, 4.2, and 4.4 are not really definitions, then the terms they introduce – “point”, “line”, and “straight line” – are not what we have called “defined terms”. Instead they must be “primitive terms”, terms which at the outset of a deductive system are introduced and explained but never precisely defined. Though Euclid does not distinguish his primitive terms and defined terms explicitly – after all, the whole notion of “Material Axiomatic System” was abstracted from the Elements and similar systems only in the 19th century – he was nonetheless aware of the distinction in practice, where it counted. Recall that the only practical difference between a primitive term and a defined term is that while the latter’s definition may be used to justify a step in a proof, the former’s informal explanation may not. In the Elements Euclid treats the two types of terms in exactly this way. He freely uses the Definitions of his defined terms to justify steps, but not once in 465 demonstrations does he refer to any of Definition 4.1 - 4.4 or to any of the “Definitions” (explanations) of his other primitive terms. It actually does not matter how you visualize a point. That’s because Definition 4.1 is, logically speaking, irrelevant to the system. Since “point” is a primitive term, the only properties of “points” that may be used in a proof are those mentioned in the axioms; and Euclid’s axioms (coming up) are consistent with either of the views of “point” debated in the previous article. The logical irrelevance of Definitions 4.1 - 4.4 notwithstanding, it is nice to have the author of a mathematical text try to explain what he has in mind. Let us resume our examination of Euclid’s Definitions from that standpoint. As we have seen, the meaning of Definition 4.1 becomes clear as soon as we realize that “no part” amounts to “no size”. And to apprehend Definition 4.2

Euclid’s Primitive Terms

53

and 4.3, taken as a pair, we need only be aware that for Euclid “line” is a general term including both straight and curved lines, and that a line is taken to be finite unless Euclid explicitly says it is not. (Definition 4.3 does not apply to a closed curve like a circle). Definition 4.4 is curious. At this juncture most people expect Euclid to say “A straight line is the shortest path between two points”. That famous principle does not appear, however, until the works of Archimedes, some 50 years after the Elements was composed – and there it is an axiom, not a definition. But that’s not the only reason Definition 4.4 is curious. What, exactly, does it mean for a line to “lie evenly with the points on itself”? Several decades earlier, Plato had said “straight is whatever has its middle in front of both its ends” (Parmenides 137E), which suggests a visual interpretation of “straight line” as line of sight – a line is “straight” if it is possible to look along it in such a way that all its points dispose themselves one in front of the other and all that can be seen is the nearest endpoint. Some scholars think that this is what Euclid had in mind in Definition 4.4, and that what prevented him from simply saying so was his desire for rigor – if mathematics was to be kept insulated from its down-to-earth origins, it wouldn’t do to define a fundamental concept like “straight line” in terms of a physical phenomenon like human vision. Other scholars, skeptical of Platonic influence, think that a stretched fiber was actually Euclid’s image of “straight line” – though agreeing that what prevented him from simply saying so was his struggle to avoid reference to physical objects. We have no idea what Euclid meant by Definition 4.4. Another of his books (the Optics) makes it clear, however, that he did consider a line of sight (the path of a ray of light) to be at least a physical manifestation of a straight line. Although we start our specifications from real number system Real, however, we will still be treating Point and Line as the primitive terms. In Book I Euclid has also given the definitions for “surface”, “extremities of surface”, and “plane surface”, though many of the theorems in Book I of the Elements are true for figures arbitrarily oriented in 3-dimensional space, others require the setting to be a single plane. Our approach will be to view them all as set in a single (infinite) plane, which we will refer to as simply “the plane”. (As usual Euclid is mute, but as he does not explicitly begin 3-dimensional geometry until Book XI, it appears his view was the same.) This will keep our drawings simple and harmonize with the reader’s geometric experience, which is probably confined to plane geometry anyway. As a result we will have little occasion to use the primitive terms “surface” and “plane surface”. As the “Definitions” defined up to now really are definitions and so there are no more primitive terms, we see that Book I involves a total of five primitive terms, only three of which will concern us: “point”, “line”, and “straight line”.

Euclid’s Primitive Terms

4.3.1

54

Data Structure: Line

The following definition makes the interpretation of lines explicitly. The set of all pairs (x, y) that satisfy an equation of the form ax + by = c where a, b, c are fixed and a, b are not both 0. def Line = ?(u : Real, v : Real, w : Real) @(Or, @(Not, @(RREq, u, RROO)), @(Not, @(RREq, v, RROO)));

4.3.2

Constructor of Line

The constructive function for Line is easy to specify accordingly. def MK_LINE = \(u : Real, v : Real, w : Real) \(p : @(Or, @(Not, @(RREq, u, RROO)), @(Not, @(RREq, v, RROO)))) ;

4.3.3

Selectors of Line

There are four selection functions of Line, namely, GET LINE U, GET LINE V, GET LINE W and GET LINE COND. def GET_LINE_U = \(a : Line) @(FST, a); def GET_LINE_V = \(a : Line) @(FST, @(SND, a)); def GET_LINE_W = \(a : Line) @(FST, @(SND, @(SND, a))); def GET_LINE_COND = \(a : Line) @(SND, @(SND, @(SND, a)));

4.3.4

Evaluation of a Point on a Line

Eval On Line is a function which takes a point A and a line a, and returns a real value. def Eval_On_Line =

Euclid’s Primitive Terms

\(A : Point, a : Line) let x = @(PRO01, Real, Real, y = @(PRO02, Real, Real, let u = @(FST, a), v = @(FST, @(SND, a)), w = @(FST, @(SND, @(SND, let s = @(SND, @(SND, @(SND, let ux = @(RRTIMES, u, x), vy = @(RRTIMES, v, y) in @(RRADD, @(RRADD, ux, vy),

4.3.5

55

A), A) in

a))) in a))) in

w);

Checking a Point on a Line

A point A is on a line a if the value @(Eval On Line, A, a) is equal to RROO. def On_Line = \(A : Point, a : Line) let x = @(PRO01, Real, Real, A), y = @(PRO02, Real, Real, A) in let u = @(FST, a), v = @(FST, @(SND, a)), w = @(FST, @(SND, @(SND, a))) in let s = @(SND, @(SND, @(SND, a))) in let ux = @(RRTIMES, u, x), vy = @(RRTIMES, v, y), sw = @(RRADD, @(RRADD, ux, vy), w) in @(RREq, sw, RROO);

4.3.6

Joint Point of Two Lines

A point A is a joint-point of lines a and b iff A are on a and b. def JP_Line = \(A : Point, a : Line, b : Line) @(And, @(On_Line, A, a), @(On_Line, A, b));

4.3.7

One Line on Another Line

A line p is on another line q iff for every point A on p A is also on q. def Line_On_Line =

Euclid’s Primitive Terms

56

\(p : Line, q : Line) !(A : Point) [@(On_Line, A, p) -> @(On_Line, A, q)];

4.3.8

Equality of Line

The equality of lines are defined as follows: def Eq_Line = \(a1 : Line, a2 : Line) let u1 = @(FST, a1), v1 = @(FST, @(SND, a1)), w1 = @(FST, @(SND, @(SND, a1))) in let u2 = @(FST, a2), v2 = @(FST, @(SND, a2)), w2 = @(FST, @(SND, @(SND, a2))) in @(And4, @(RREq, u1, u2), @(RREq, v1, v2));

4.3.9

Properties of Eq Line

4.3.9.1

Refletivity Property of Eq Line

For any line a, a is equal to a itself. dec Eq_Line_Ref : !(a : Line) @(Eq_Line, a, a);

4.3.9.2

Symmetric Property of Eq Line

For any lines a1 and a2 if a1 is equal to a2 then a2 is equal to a1 too. dec Eq_Line_Sym : !(a1 : Line, a2 : Line) [@(Eq_Line, a1, a2) -> @(Eq_Line, a2, a1)];

4.3.9.3

Transitivity Property of Eq Line

For any lines a1, a2 and a3 if a1 is equal to a2 and a2 is equal to a3 then a1 is equal to a3. dec Eq_Line_Tran :

Euclid’s Primitive Terms

57

!(a1 : Line, a2 : Line, a3 : Line) [@(Eq_Line, a1, a2) -> @(Eq_Line, a2, a3) -> @(Eq_Line, a1, a3)];

4.3.10

Parallel Lines

Definition 4.5 (Parallel Straight Line) Parallel straight lines are straight lines which, being in the same plane and being produced indefinitely in both directions, do not meet one another in either direction. Had Euclid’s standard straight line been infinite instead of finite, he would ave said simply Parallel straight lines are straight lines which, being in the same plane, do not meet one another in either direction. Since his usual “straight line” was a segment, however, he had to add the clause about “producing” (extending) them. def Parallel_Line = \(a1 : Line, a2 : Line) let u1 = @(GET_LINE_U, a1), u2 v1 = @(GET_LINE_V, a1), v2 w1 = @(GET_LINE_W, a1), w2 let k1 = @(RRNEG, @(RRDIV, u1, k2 = @(RRNEG, @(RRDIV, u2, @(RREq, k1, k2);

4.3.11

= @(GET_LINE_U, a2), = @(GET_LINE_V, a2), = @(GET_LINE_W, a2) in v1)), v2)) in

Perpendicular Lines

Definition 4.6 (Perpendicular Line) When a straight line set up on a straight line makes the adjancent angles equal to one another, each of the equal angles is right, and the straight line standing on the other is called a perpencular to that on which is stands.

If a straight line a1 “set up on” a straight line a2 makes the “adjancent” angles 1 and 2, then angles 1 and 2 are called right angles and a1 is called a perpencular to a2. The following function makes the analytical interpretation that one straight line a1 is called a perpencular to a2. def Perpend_Line = \(a1 : Line, a2 : Line) let u1 = @(GET_LINE_U, a1), u2 = @(GET_LINE_U, a2), v1 = @(GET_LINE_V, a1), v2 = @(GET_LINE_V, a2), w1 = @(GET_LINE_W, a1), w2 = @(GET_LINE_W, a2) in

Euclid’s Primitive Terms

58

let k1 = @(RRNEG, @(RRDIV, u1, v1)), k2 = @(RRNEG, @(RRDIV, u2, v2)) in @(RREq, @(RRTIMES, k1, k2), @(RRNEG, RRONE));

4.3.12

Two Points on Same Side of a Line

The following function makes the analytical interpretation that two points on the same side of a line. def In_Same_Side = \(A : Point, B : Point, a : Line) let x1 = @(PRO01, Real, Real, A), y1 = @(PRO02, Real, Real, A), x2 = @(PRO01, Real, Real, B), y2 = @(PRO02, Real, Real, B) in let u = @(FST, a), v = @(FST, @(SND, a)), w = @(FST, @(SND, @(SND, a))) in let s = @(SND, @(SND, @(SND, a))) in let ux1 = @(RRTIMES, u, x1), vy1 = @(RRTIMES, v, y1), sw1 = @(RRADD, @(RRADD, ux1, vy1), ux2 = @(RRTIMES, u, x2), vy2 = @(RRTIMES, v, y2), sw2 = @(RRADD, @(RRADD, ux2, vy2), @(Or, @(And, @(RRLe, sw1, RROO), @(RRLe, @(And, @(RRLe, RROO, sw1), @(RRLe,

4.3.13

w),

w) in sw2, RROO)), RROO, sw2)));

Two Points on Different Side of a Line

The following function makes the analytical interpretation that two points on the different side of a line. def In_Diff_Side = \(A : Point, B : Point, a : Line) let x1 = @(PRO01, Real, Real, A), y1 = @(PRO02, Real, Real, A), x2 = @(PRO01, Real, Real, B), y2 = @(PRO02, Real, Real, B) in let u = @(FST, a), v = @(FST, @(SND, a)), w = @(FST, @(SND, @(SND, a))) in

Euclid’s Primitive Terms

59

let s = @(SND, @(SND, @(SND, a))) in let ux1 = @(RRTIMES, u, x1), vy1 = @(RRTIMES, v, y1), sw1 = @(RRADD, @(RRADD, ux1, vy1), ux2 = @(RRTIMES, u, x2), vy2 = @(RRTIMES, v, y2), sw2 = @(RRADD, @(RRADD, ux2, vy2), @(Or, @(And, @(RRLe, sw1, RROO), @(RRLs, @(And, @(RRLe, RROO, sw1), @(RRLs,

4.3.14

w),

w) in RROO, sw2)), sw2, RROO)));

A Point X in Between Point A and B

The following function makes the analytical interpretation that one point X is in between two points A and B. def In_Between = \(X : Point, A : Point, B : let x0 = @(GET_X, X), y0 = x1 = @(GET_X, A), y1 = x2 = @(GET_X, B), y2 = @(And, let a = @(LINE_SEG, A, @(On_Line, X, a), @(And, @(Or, @(And, @(RRLe, x1, @(And, @(RRLe, x2, @(Or, @(And, @(RRLe, y1, @(And, @(RRLe, y2,

4.4

Point) @(GET_Y, X), @(GET_Y, A), @(GET_Y, B) in B) in

x0), @(RRLe, x0, x2)), x0), @(RRLe, x0, x1))), y0), @(RRLe, y0, y2)), y0), @(RRLe, y0, y1)))));

Finite Straight Lines

We are now ready to defined the concept of finite straight lines based on concept of straight line Line.

4.4.1

Data Structure: Finite Line

A finite straight line is constructed by two extremities A and B, and a straight line l.

Euclid’s Primitive Terms

60

def Finite_Line = ?(A : Point, B : Point, l : Line) @(And, @(And, @(On_Line, A, l), @(On_Line, B, l)), !(X : Point) [@(On_Line, X, l) -> @(In_Between, X, A, B)]);

4.4.2

Constructor of Finite Line

The constructive function for Finite Line is easy to specify accordingly. def MK_FLINE = \(A : Point, B : Point, l : Line) \(p : @(And, @(And, @(On_Line, A, l), @(On_Line, B, l)), !(X : Point) [@(On_Line, X, l) -> @(In_Between, X, A, B)])) ;

4.4.3

Selectors of Finite Line

There are four selection functions of Finite Line, namely, GET FLN A, GET FLNB, GET FLN LN, and GET FLN COND. def GET_FLN_A = \(l : Finite_Line) @(FST, l); def GET_FLN_B = \(l : Finite_Line) @(FST, @(SND, l)); def GET_FLN_LN = \(l : Finite_Line) @(FST, @(SND, @(SND, l))); def GET_FLN_COND = \(l : Finite_Line) @(SND, @(SND, @(SND, l)));

Euclid’s Primitive Terms

4.4.4

61

Equality of Finite Line

There are two kinds of equality definable on any given finite straight lines. The first is Eq FLine defined as follows. which says that two finite straight lines a1 and a2 is equal iff two of their extremities and corresponding straight lines are equal. def Eq_FLine = \(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1) in let A2 = @(GET_FLN_A, a2), B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in @(And4, @(Eq_Point, A1, A2), @(And4, @(Eq_Point, B1, B2), @(Eq_Line, l1, l2))); An alternative definition is to determine the length of two given finite straight lines whic says that two finite straight lines a1 and a2 is equal iff two of they have the same length.

4.4.5

Properties of Eq FLine

4.4.5.1

Refletivity Property of Eq FLine

For any finite straight line a, a is equal to a itself. dec Eq_FLine_Ref : !(a : Finite_Line) @(Eq_FLine, a, a);

4.4.5.2

Symmetric Property of Eq FLine

For any finite straight lines a1 and a2 if a1 is equal to a2 then a2 is equal to a1 too. dec Eq_FLine_Sym : !(a1 : Finite_Line, a2 : Finite_Line) [@(Eq_FLine, a1, a2) -> @(Eq_FLine, a2, a1)];

Euclid’s Primitive Terms

4.4.5.3

62

Transitivity Property of Eq FLine

For any finite straight lines a1, a2 and a3 if a1 is equal to a2 and a2 is equal to a3 then a1 is equal to a3. dec Eq_FLine_Tran : !(a1 : Finite_Line, a2 : Finite_Line, a3 : Finite_Line) [@(Eq_FLine, a1, a2) -> @(Eq_FLine, a2, a3) -> @(Eq_FLine, a1, a3)];

Intuitively, all the theorem proving of elementary geometry can be carried out by drawing lines. Graphically speaking there is no different between lines AB and BA. However, this property has to be expressed explicitly when representing it by a symbolic logic. dec FLine_Sym : !(A : Point, B : Point) let AB = @(FLINE_SEG, A, B), BA = @(FLINE_SEG, B, A) in @(Eq_FLine, AB, BA);

4.4.6

Parallel Finite Lines

The finite straight lines a1 and a2 are in parallel iff for every point A A is not a joint point of a1 and a2. def Parallel_FLine = \(a1 : Finite_Line, a2 : Finite_Line) let l1 = @(GET_FLN_LN, a1), l2 = @(GET_FLN_LN, a2) in !(A : Point) @(Not, @(JP_Line, A, l1, l2)); If a1 is parallel to a2, then a2 is parallel to a1 too. dec Par_FL_Symm : !(a1 : Finite_Line, a2 : Finite_Line) [@(Parallel_FLine, a1, a2) -> @(Parallel_FLine, a2, a1)];

4.4.7

Checking a Point on a Finite Line

The point X is on finite straight line a and a consists of points A and B and straight line l, iff X is on l and X is in between A and B. def On_FLine = \(X : Point, a : Finite_Line)

Euclid’s Primitive Terms

63

let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), l = @(GET_FLN_LN, a) in @(And, @(On_Line, X, l), @(In_Between, X, A, B));

4.4.8

Joint Point of Two Finite Lines

A point A is a joint point of two finite straight lines a and b, iff A is on both a and b. def JP_FLine = \(A : Point, a : Finite_Line, b : Finite_Line) @(And, @(On_FLine, A, a), @(On_FLine, A, b)); Alternatively, the concept can be defined in terms of straight lines. def JP_FLine2 = \(A : Point, a : Finite_Line, b : Finite_Line) let al = @(GET_FLN_LN, a), bl = @(GET_FLN_LN, b) in @(And, @(On_Line, A, al), @(On_Line, A, bl));

4.4.9

A Finite Line on Another Line

A finite straight line p is on a straight line q iff for every point A, that A is on p implies that A is on q. def FLine_On_Line = \(p : Finite_Line, q : Line) !(A : Point) [@(On_FLine, A, p) -> @(On_Line, A, q)];

4.4.10

Two Finite Lines on Same Line

The finite straight lines p and q are on the same straight line iff there exists a straight line r such that p and q are on r. def On_Same_FLine = \(p : Finite_Line, q : Finite_Line) ?(r : Line) @(And, @(FLine_On_Line, p, r), @(FLine_On_Line, q, r));

Euclid’s Primitive Terms

4.4.11

64

Two Finite Lines are in Between Another Finite Line

The finite straight line q is in between the finite straight lines p and r, if there exist points A, B and C such that C is on AB, A is a joint point p and AB, B is a joint point r and AB, and C is a joint point q and AB. def In_Between_FLine = \(p : Finite_Line, q : Finite_Line, r : Finite_Line) ?(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in @(And, @(On_FLine, C, AB), @(And, @(JP_FLine, A, p, AB), @(And, @(JP_FLine, C, q, AB), @(JP_FLine, B, r, AB))));

4.4.12

Two Points on Same Side of a Finite Line

The points A and B are in same side of a finite straight line a iff def In_Same_FSide = \(A : Point, B : Point, a : Finite_Line) let l = @(GET_FLN_LN, a) in @(In_Same_Side, A, B, l);

4.4.13

Two Points on Different Side of a Finite Line

The points A and B are in different side of a finite straight line a iff def In_Diff_FSide = \(A : Point, B : Point, a : Finite_Line) let l = @(GET_FLN_LN, a) in @(In_Diff_Side, A, B, l); An alternative definition will be that the points A and B are in different side of a finite straight line a iff there exists a point C such that C is a joint point of finite straight lines AB and a. def In_Diff_FSide2 = \(A : Point, B : Point, a : Finite_Line)

Euclid’s Primitive Terms

65

let AB = @(FLINE_SEG, A, B) in ?(C : Point) @(JP_FLine, C, AB, a); There is an easy lemma which says that the points A and B are on the finite straight line AB. dec FLine_Seg_Lem : !(A : Point, B : Point) let a = @(FLINE_SEG, A, B) in @(And, @(On_FLine, A, a), @(On_FLine, B, a));

4.4.14

Bisection of Finite Line

We say that a point E bisects a finite line a iff for two extremeties A and B of a, the distances between A and E, and B and E are equal. def Bisect_FLine = \(E : Point, a : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a) in @(And, @(On_FLine, E, a), let a1 = @(DISTANCE, A, E), a2 = @(DISTANCE, E, B) in @(RREq, a1, a2)); The finite line a can also be represented in terms of two points A and B. def Bisect_FLine2 = \(E : Point, A : Point, B let AB = @(FLINE_SEG, A, @(And, @(On_FLine, E, AB), let a1 = @(DISTANCE, a2 = @(DISTANCE, @(RREq, a1, a2));

: Point) B) in

A, E), E, B) in

Chapter 5

Euclid’s Defined Terms 5.1

Angles

Definition 5.1 A plane angle consists of two lines in a plane which meet one another and do not lie in a straight line. Remember that Euclid had no reason to fashion his Definitions in strict adherence to a distinction (between primitive and defined terms) that would not b made explicitly for 2,200 years. Nonetheless, the power of the unmade distinction can be felt. Definitions 4.1 - 4.6 and 5.1 - 5.17 have an unmistakable difference in flavor, which derives from the fact that the former cannot be reworked into real definitions while the latter can. It is in this sense we will call the terms of Definitions 5.1 - 5.17 Euclid’s “defined terms”, even though we will not take the time to purge those Definitions of foreign references. In terms of PowerEpsilon, Definitions 4.1 - 4.6 can only be defined by Real and Definitions 5.1 - 5.17, however, can be defined by Definitions 4.1 - 4.6. Note that the sides of a “plane angle” are merely “lines” – not “straight lines” – and so can be curved. Euclid probably allowed angles with curved sides only in deference to their then common recognition as legitimate angles. Only one theorem in the Elements (Book III, Theorem 16) involves such an angle; the theorem is never usd, and even in that case one side of the angle is straight. Euclid’s term for a normal plane angle with two straight sides is translated “plane rectilinear angle,” from the Late Latin rectus, straight + linear, line. Definition 5.2 When the lines containing the angle are straight, the angle is called rectilinear. As we will never have occassion to discuss angles with curved sides we will refer to “plane rectilinear angles” as simply “angles”, a condensation Euclid uses himself.

66

Euclid’s Defined Terms

67

Since Definition 5.1 calls the sides of an angle “two lines”, meaning they are wholly distinct, and specifies that they “do not lie in a straight line”. For Euclid every angle is – to use modern terminology – greater than 0o and less than 180o .

5.1.1

Data Structure: Angle

An angle consists of two finite straight lines h and k, and a joint point O of h and k. def Angle = ?(O : Point, h : Finite_Line, k : Finite_Line) @(JP_FLine, O, h, k);

5.1.2

Constructor of Angle

The constructive function for Angle is easy to specify accordingly. def MK_ANGLE = \(O : Point, h : Finite_Line, k : Finite_Line) \(q : @(JP_FLine, O, h, k)) ;

5.1.3

Selectors of Angle

There are four selection functions of Angle, namely, GET ANG PNT, GET ANG H, GET ANG K, and GET ANG COND. def GET_ANG_PNT = \(a : Angle) @(FST, a); def GET_ANG_H = \(a : Angle) @(FST, @(SND, a)); def GET_ANG_K = \(a : Angle) @(FST, @(SND, @(SND, a))); def GET_ANG_COND =

Euclid’s Defined Terms

68

\(a : Angle) @(SND, @(SND, @(SND, a))); Beside of these four selection functions, we also need a function for calculating the degree of a given angle. def GET_ANGLE = \(a : Angle) let h = @(GET_FLN_LN, @(GET_ANG_K, a)), k = @(GET_FLN_LN, @(GET_ANG_H, a)) in let u1 = @(FST, h), v1 = @(FST, @(SND, h)), u2 = @(FST, k), v2 = @(FST, @(SND, k)) in let a1 = @(RRNEG, @(RRDIV, u1, v1)), a2 = @(RRNEG, @(RRDIV, u2, v2)) in @(ARCTAG, @(RRDIV, @(RRMINUS, a2, a1), @(RRADD, RRONE, @(RRTIMES, a2, a1))));

5.1.4

Some Constants of Angle

Definition 5.3 A degree is one-ninetieth of a right angle. Adding this Definition to Euclid’s list enables us to write “90o ” for “right angle”, and “180o ” for Euclid’s cumbersome “two right angles”. Some constants of angles are needed, one is RRPI standing for π, dec RRPI : Real; and another is RRPI DIV 2 standing for π/2. dec RRPI_DIV_2 : Real;

5.1.5

Comparison of Angles

It would be worthless to physically measure the angles, whether by eye or an instrument, because we couldn’t use our finding – “by measurment” is not one of the reasons allowed to justify a step in a proof. Remember that mathematics keeps itself at a distance from the physical world, of which geometric diagrams are a part. “The geometer bases no conclusion on the particular line which he has drawn being that which he has described, but he refers to what is illustrated by the figures”, said Aristotle. There is the additional factor that even if we went ahead and measured the angles anyway, we couldn’t trust our finding.

Euclid’s Defined Terms

69

Geometers, realizing it is impossible for a drawing to be mathematically exact, and agreeing with Aristotle that their drawings are only supposed to be visual aids in the first place, have always tended to put them only what people need in order to follow the argument; they don’t worry if an angle, say, is drawn a little to big or too small. “Geometry”, runs a maximum modern geometers are fond of repeating, “is the art of applying good reasoning to bad diagrams”. def Eq_Angle = \(a1 : Angle, a2 : Angle) let b1 = @(GET_ANGLE, a1), b2 = @(GET_ANGLE, a2) @(RREq, b1, b2);

in

Eq Angle is a equivalent relation. dec Eq_Angle_Ref : !(a : Angle) @(Eq_Angle, a, a); dec Eq_Angle_Sym : !(a1 : Angle, a2 : Angle) [@(Eq_Angle, a1, a2) -> @(Eq_Angle, a2, a1)]; dec Eq_Angle_Tran : !(a1 : Angle, a2 : Angle, a3 : Angle) [@(Eq_Angle, a1, a2) -> @(Eq_Angle, a2, a3) -> @(Eq_Angle, a1, a3)];

Beside of equality defined on angles, we also need the operations to determine, for given two angles, which angle is greater than other. def Ls_Angle = \(a1 : Angle, a2 : Angle) let b1 = @(GET_ANGLE, a1), b2 = @(GET_ANGLE, a2) @(RRLs, b1, b2); def Gs_Angle = \(a1 : Angle, a2 : Angle) let b1 = @(GET_ANGLE, a1), b2 = @(GET_ANGLE, a2) @(RRLs, b2, b1);

in

in

Graphically speaking there is no different between angles ABC and CBA. However, this property has to be expressed explicitly when representing it by a symbolic logic. dec Angle_Symm : !(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), CBA = @(ANGLE_SEG, B, C, A) in

Euclid’s Defined Terms

70

@(Eq_Angle, ABC, CBA); We may also define a stronger equality for angles if two angles are coincided with each others. def Id_Angle = \(a1 : Angle, a2 : Angle) let O1 = @(GET_ANG_PNT, a1), O2 h1 = @(GET_ANG_H, a1), h2 k1 = @(GET_ANG_K, a1), k2 @(And1, @(Eq_Point, O1, O2), @(And, @(Eq_FLine, h1, h2),

5.1.6

= @(GET_ANG_PNT, a2), = @(GET_ANG_H, a2), = @(GET_ANG_K, a2) in

@(Eq_FLine, k1, k2)));

Existence of Angles

dec JP_FLine_Lem : !(O : Point, A : Point, B : Point) let OA = @(FLINE_SEG, O, A), OB = @(FLINE_SEG, O, B) in @(JP_FLine, O, OA, OB); It is possible to draw an angle for any three given points. Or more specifically it is possible to draw one and only one angle for any three given points. Formally specifying, we have the following axiom declared which is similar to IAxm1. dec AngleAxm : !(O : Point, A : Point, B : Point) ?(a : Angle) let OA = @(FLINE_SEG, O, A), OB = @(FLINE_SEG, O, B) in let p = @(JP_FLine_Lem, O, A, B) in let b = @(MK_ANGLE, O, OA, OB, p) in @(Eq_Angle, a, b); Based on AngleAxm we will be able to define a function ANGLE SEG. By giving four points O, A and B, it will produce uniquely an angle. def ANGLE_SEG = \(O : Point, A : Point, B : Point)

Euclid’s Defined Terms

71

@(FST, @(AngleAxm, O, A, B));

5.1.7

Special Angles

5.1.7.1

Adjacent Suplementary Angles

The following predicate defines the concept that two angles a1 and a2 are adjancent supplementary. def Is_Adj_Sup_Angle = \(a1 : Angle, a2 : Angle) let O1 = @(GET_ANG_PNT, a1), O2 = @(GET_ANG_PNT, h1 = @(GET_ANG_H, a1), h2 = @(GET_ANG_H, k1 = @(GET_ANG_K, a1), k2 = @(GET_ANG_K, let b1 = @(GET_ANGLE, a1), b2 = @(GET_ANGLE, a2) @(And2, @(Eq_Point, O1, O2), @(And1, @(RREq, @(RRABS, @(RRADD, b1, b2)), RRPI), @(And0, @(On_Same_FLine, k1, k2), @(Eq_FLine, h1, h2))));

5.1.7.2

a2), a2), a2) in in

Vertical Angles

The following predicate defines the concept that two angles a1 and a2 are vertical with each other. def Is_Vert_Angle = \(a1 : Angle, a2 : Angle) let O1 = @(GET_ANG_PNT, a1), O2 = @(GET_ANG_PNT, h1 = @(GET_ANG_H, a1), h2 = @(GET_ANG_H, k1 = @(GET_ANG_K, a1), k2 = @(GET_ANG_K, let b1 = @(GET_ANGLE, a1), b2 = @(GET_ANGLE, a2) @(And2, @(Eq_Point, O1, O2), @(And1, @(RREq, @(RRADD, b1, b2), RROO), @(And0, @(On_Same_FLine, k1, k2), @(On_Same_FLine, h1, h2))));

a2), a2), a2) in in

Euclid’s Defined Terms

5.1.7.3

72

Right Angles

The following predicate defines the concept that two angles a1 and a2 are at right angle with each other. def At_Right_Angle = \(a1 : Angle, a2 : Angle) let O1 = @(GET_ANG_PNT, a1), O2 = @(GET_ANG_PNT, a2) in let h1 = @(GET_ANG_H, a1), h2 = @(GET_ANG_H, a2), k1 = @(GET_ANG_K, a1), k2 = @(GET_ANG_K, a2) in @(And2, @(Eq_Angle, a1, a2), @(And1, @(Eq_Point, O1, O2), @(Eq_FLine, h1, h2))); More simply, we have the following alternative definition. def At_Right_Angle2 = \(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in @(Eq_Angle, ABC, ABD); The following predicate defines the concept that a angle a is a right angle. def Is_Right_Angle = \(a : Angle) let O1 = @(GET_ANG_PNT, a) in let h1 = @(GET_ANG_H, a), k1 = @(GET_ANG_K, a) in ?(b : Angle) let O2 = @(GET_ANG_PNT, b) in let h2 = @(GET_ANG_H, b), k2 = @(GET_ANG_K, b) in @(And2, @(Eq_Angle, a, b), @(And1, @(Eq_Point, O1, O2), @(Eq_FLine, h1, h2))); More simply, we have the following alternative definition. def Is_Right_Angle2 =

Euclid’s Defined Terms

73

\(a : Angle) let b = @(GET_ANGLE, a) in @(RREq, b, RRPI); def Is_Right_Angle3 = \(O : Point, A : Point, B : Point) let AOB = @(ANGLE_SEG, O, A, B) in let aob = @(GET_ANGLE, AOB) in @(RREq, aob, RRPI);

5.1.7.4

Perpendicular Finite Straight Lines

Definition 5.4 When a straight line set up on a straight line makes the adjacent angles equal to one another, each of the equal angles is right, and the straight line standing on the other is called a perpendicular to that on which it stands. In terms of PowerEpsilon, we have def Perpend_FLine = \(a1 : Finite_Line, a2 : Finite_Line) let C = @(GET_FLN_A, a1), D = @(GET_FLN_B, a1), l = @(GET_FLN_LN, a1) in let A = @(GET_FLN_A, a2), B = @(GET_FLN_B, a2), m = @(GET_FLN_LN, a2) in @(And4, @(On_FLine, D, a2), let DC = @(FLINE_SEG, D, C), DA = @(FLINE_SEG, D, A), DB = @(FLINE_SEG, D, B) in let b1 = @(ANGLE_SEG, D, C, A), b2 = @(ANGLE_SEG, D, C, B) in @(At_Right_Angle, b1, b2)); Alternatively, we simply say that AB is a perpendicular to CD iff AB and CD are at right angle. def Perpend_FLine2 = \(A : Point, B : Point, C : Point, D : Point) @(At_Right_Angle2, A, B, C, D); Scholars scrutinizing the Elements have brought to light a great many things

Euclid’s Defined Terms

74

that Euclid assumed but did not bother to write down. As a rule it will suit our purpose to let such things lie undisturbed in the comfy shadows of common sense. Indirectly, Definition 5.5 and 5.6 involve a tacit understanding. Though it is not one of the ones we need to expose, we will expose it to show you the kind of thing we will henceforth be absorbing uncritically. 5.1.7.5

Obtuse Angles

Definition 5.5 (Obtuse Angle) An obtuse angle is an angle greater than a right angle. In terms of PowerEpsilon, we have def Obtuse_Angle = \(a : Angle) let b = @(GET_ANGLE, a) in @(RRLs, RRPI_DIV_2, b); and def Obtuse_Angle2 = \(a : Angle) @(Gs_Angle, a, RIGHT_ANGLE);

5.1.7.6

Acute Angles

Definition 5.6 (Acute Angle) An acute angle is an angle less than a right angle. In terms of PowerEpsilon, we have def Acute_Angle = \(a : Angle) let b = @(GET_ANGLE, a) in @(RRLs, b, RRPI_DIV_2); and def Acute_Angle2 = \(a : Angle) @(Ls_Angle, a, RIGHT_ANGLE);

Euclid’s Defined Terms

75

Presupposed here is that we know, given two unequal angles, how to determine which is “greater”. It would be worthless to physically measure the angles, whether by eye or an instrument, because we couldn’t use our finding – “by measurement” is not one of the reasons allowed to justify a step in a proof. Remember that mathematics keeps itself at a distance from the physical world, of which geometric diagrams are a part. “The geometer bases no conclusion on the particular line which he has drawn being that which he has described, but [he refers to] what is illustrated by the figures”, said Aristotle. There is the additional factor that even if we went ahead and measured the angles anyway, we could’t trust our finding. Geometers, realizing it is impossible for a drawing to be mathematically exact, and agreeing with Aristotle that their drawings are only supposed to be visual aids in the first place, have always tended to put into them only what people need in order to follow the argument; they don’t worry if an angle, say, is drawn a little too big or too small. “Geometry”, runs a maximum modern geometers are fond of repeating, “is the art of applying good reasoning to bad diagrams”. So what does Euclid have in mind? Immediately following the Definitions are Euclid’s axioms, the last of which gives a clue. “The whole”, is says, “is great than part”. One angle will be “greater” than another, Euclid is telling us, if it is a “whole” of which the other is a “part”. We conclude that Euclid’s understanding of what it means for an angle to be “greater” than another can be stated as follows. Given an angle ABC and a straight line BD, with the point A and D on the same side of BC, we say that that ABC is greater than angle DBC if BD is between BA and BC. The meaning of “less” than

now follows immediately: one angle is less than another if in the above sense the latter is greater than the former. Definition 5.5 and 5.6 involve another assumption as well, which so far has not stated. It is not really a “tacit” assumption, however, because Euclid will soon state it quite baldly as another of his axioms. We will discuss it when we get to that axiom; but in the meantime, can you detect what this other assumption is? In 1800 most mathematicians revered the Elements, which they regarded as the supreme example of airtight deductive presentation. By 1900, due to crises in the foundations of several branches of mathematics, in particular to the crisis in geometry precipitated by the invention of non-Euclidean geometry, most mathematicians were contemptuous of the old masterpiece and regarded it as a logical sieve.It had been examined more ruthlessly than ever before and found to be shot through with intuitive notions the Greeks and their successor had overlooked. An example is the word “between”, which appears in the Elements and which we have just used to make explicit Euclid’s understanding of what it means for an angle to be “greater” than another. We see that, unlike the words and phrases that are clear-cut connectives – “we say that”, “is”, “if”, “‘and”

Euclid’s Defined Terms

76

– “between” carries a meaning which is unquestionably geometrical, making it something that, strictly, ought to be a technical term. (We ought not accept the testimony of a diagram at all.) As we have neither defined the word nor included it as a primitive term, it stands exposed as intuitive. “On the same side”, also in the Elements and also in our statement, is another example of an inconspicuous expression whose meaning is geometrical but whose only foundation is intuitive. 5.1.7.7

Bisection of Angles

A finite straight line l is the bisector of an angle a iff there exist two points D and E such that A is the joint point of h and l, and also the joint point l and k, D is on h, E is on k, the angle made by A, h, l and the angle made by A, l, k are equal, where h and k are two rectilinears of a. def Bisect_Angle = \(l : Finite_Line, a : Angle) let A = @(GET_ANG_PNT, a) in ?(D : Point, E : Point) let h = @(GET_ANG_H, a), k = @(GET_ANG_K, a) in ?(r1 : @(JP_FLine, A, h, l), r2 : @(JP_FLine, A, l, k)) @(And, @(And, @(On_FLine, D, h), @(On_FLine, E, k)), let a1 = @(MK_ANGLE, A, h, l, r1), a2 = @(MK_ANGLE, A, l, k, r2) in @(Eq_Angle, a1, a2));

Alternatively, we say that DB is a bisector of angle ABC iff angles ABD and DBC are equal. def Bisect_Angle2 = \(D : Point, A : Point, B : Point, C : Point) let ABD = @(ANGLE_SEG, B, A, D), DBC = @(ANGLE_SEG, B, D, C) in @(Eq_Angle, ABD, DBC);

5.2

Triangles

Definition 5.7 Rectilinear figures are those which are contained by straight lines, trilateral figures [triangles] being those contained by three straight lines.

5.2.1

Data Structure: Triangle

In terms of PowerEpsilon, we have Triangle defined as follows:

Euclid’s Defined Terms

def Triangle = ?(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in @(And, !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(On_Line, C, a)))), @(And, @(JP_FLine, A, CA, AB), @(And, @(JP_FLine, B, AB, BC), @(JP_FLine, C, BC, CA))));

5.2.2

Constructor of Triangle

The constructive function for Triangle is easy to specify accordingly. def MK_TRIANGLE = \(A : Point, B : Point, C : Point) \(p : let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in @(And, !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(On_Line, C, a)))), @(And, @(JP_FLine, A, CA, AB), @(And, @(JP_FLine, B, AB, BC), @(JP_FLine, C, BC, CA)))))

77

Euclid’s Defined Terms

78

;

5.2.3

Selectors of Triangle

There are 11 selection functions of Tringle, namely, GET TRI A, GET TRI B, GETTRI C, GET TRI AB, GET TRI BC, GET TRI CA, GET TRI ABC, GET TRI BCA, GETTRI CAB, GET TRI COND1, and GET TRI COND2. dec GET_TRI_A : [Triangle -> Point]; dec GET_TRI_B : [Triangle -> Point]; dec GET_TRI_C : [Triangle -> Point]; The definitions of GET TRI A, GET TRI B, GET TRI C are represented as follows. def GET_TRI_A = \(t : Triangle) @(FST, t); def GET_TRI_B = \(t : Triangle) @(FST, @(SND, t)); def GET_TRI_C = \(t : Triangle) @(FST, @(SND, @(SND, t))); The definitions of GET TRI AB, GET TRI BC, GET TRI CA are represented as follows. def GET_TRI_AB = \(t : Triangle) let A = @(FST, t), B = @(FST, @(SND, t)) in @(DISTANCE, A, B); def GET_TRI_BC = \(t : Triangle) let B = @(FST, @(SND, t)), C = @(FST, @(SND, @(SND, t))) in @(DISTANCE, B, C); def GET_TRI_CA = \(t : Triangle) let A = @(FST, t), C = @(FST, @(SND, @(SND, t))) in

Euclid’s Defined Terms

79

@(DISTANCE, C, A); The definitions of GET TRI ABC, GET TRI BCA, GET TRI CAB are represented as follows. def GET_TRI_ABC = \(t : Triangle) let A = @(GET_TRI_A, B = @(GET_TRI_B, C = @(GET_TRI_C, @(ANGLE_SEG, B, A,

t), t), t) in C);

def GET_TRI_BCA = \(t : Triangle) let A = @(GET_TRI_A, B = @(GET_TRI_B, C = @(GET_TRI_C, @(ANGLE_SEG, C, B,

t), t), t) in A);

def GET_TRI_CAB = \(t : Triangle) let A = @(GET_TRI_A, B = @(GET_TRI_B, C = @(GET_TRI_C, @(ANGLE_SEG, A, C,

t), t), t) in B);

The definitions of GET TRI COND1 and GET TRI COND2 are represented as follows. def GET_TRI_COND1 = \(t : Triangle) let A = @(FST, t), B = @(FST, @(SND, t)), C = @(FST, @(SND, @(SND, t))) in let p = @(SND, @(SND, @(SND, t))) in let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in let U = !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(On_Line, C, a)))), V = @(And, @(JP_FLine, A, CA, AB),

Euclid’s Defined Terms

80

@(And, @(JP_FLine, B, AB, BC), @(JP_FLine, C, BC, CA))) in @(PRO1, U, V, p); def GET_TRI_COND2 = \(t : Triangle) let A = @(FST, t), B = @(FST, @(SND, t)), C = @(FST, @(SND, @(SND, t))) in let p = @(SND, @(SND, @(SND, t))) in let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in let U = !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(On_Line, C, a)))), V = @(And, @(JP_FLine, A, CA, AB), @(And, @(JP_FLine, B, AB, BC), @(JP_FLine, C, BC, CA))) in @(PRO2, U, V, p);

5.2.4

Equality of Triangle

Two triangles t1 and t2 are equal iff their three corresponding extremities are equal. In other words, two triangles are equal if their are completely same. def Eq_Triangle = \(t1 : Triangle, t2 : Triangle) let A1 = @(GET_TRI_A, t1), A2 = @(GET_TRI_A, t2), B1 = @(GET_TRI_B, t1), B2 = @(GET_TRI_B, t2), C1 = @(GET_TRI_C, t1), C2 = @(GET_TRI_C, t2) in @(And2, @(Eq_Point, A1, A2), @(And1, @(Eq_Point, B1, B2), @(Eq_Point, C1, C2)));

Euclid’s Defined Terms

5.2.5

81

Congruent of Triangle

The equality of triangles are not useful. A weaker form of equality defined here is called congruence. Definition 5.8 (Congruent Triangles) Two triangles are congruent if the three angles of one are equal respectively to the three angles of the other and the sides subtending equal angles are equal.

In terms of PowerEpsilon, we have triangle congruence defined as follows: def Triang_Cong = \(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in @(And2, @(And1, @(RREq, AB1, AB2), @(And0, @(RREq, BC1, BC2), @(RREq, CA1, CA2))), @(And1, @(Eq_Angle, ABC1, ABC2), @(And0, @(Eq_Angle, BCA1, BCA2), @(Eq_Angle, CAB1, CAB2))));

In terms of Point, we have def Triang_Cong2 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in @(And4, @(And1, @(RREq, AB1, AB2), @(And0, @(RREq, BC1, BC2), @(RREq, CA1, CA2))), @(And1,

Euclid’s Defined Terms

82

@(Eq_Angle, ABC1, ABC2), @(And0, @(Eq_Angle, BCA1, BCA2), @(Eq_Angle, CAB1, CAB2))));

5.2.6

Point X on a Triangle t

A point X is on triangle t iff for three extremities A, B and C of t, X is on either AB, or BC, or CA. def On_Triangle = \(X : Point, t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in @(Sum3, @(On_FLine, X, AB), @(On_FLine, X, BC), @(On_FLine, X, CA));

5.2.7

Point X inside of a Triangle t

A point X is inside of a triangle t iff there exist point A and B such that X is in between A and B, A and B are on triangle t. def Inside_Triangle = \(X : Point, t : Triangle) ?(A : Point, B : Point) @(And, @(In_Between, X, A, B), @(And4, @(On_Triangle, A, t), @(On_Triangle, B, t)));

5.2.8

Point X outside of a Triangle t

A point X is outside of a triangle t iff there exist point A and B such that A is in between X and B, A and B are on triangle t.

Euclid’s Defined Terms

83

def Outside_Triangle = \(X : Point, t : Triangle) ?(A : Point, B : Point) @(And, @(In_Between, A, X, B), @(And4, @(On_Triangle, A, t), @(On_Triangle, B, t)));

5.2.9

Existence of Triangles

It is possible to draw an triangle for any three given points. Or more specifically it is possible to draw one and only one triangle for any three given points. Formally specifying, we have the following axiom declared which is similar to IAxm1. dec TriAxm1 : !(A : Point, B : Point, C : Point) ?(t : Triangle) let A1 = @(GET_TRI_A, t), B1 = @(GET_TRI_B, t), C1 = @(GET_TRI_C, t) in @(And2, @(Eq_Point, A, A1), @(And1, @(Eq_Point, B, B1), @(Eq_Point, C, C1))); Based on TriAxm1 we will be able to define a function TRIANGLE SEG. By giving three points A, B and C, it will produce uniquely a triangle. dec TRIANGLE_SEG : [Point -> Point -> Point -> Triangle]; def TRIANGLE_SEG = \(A : Point, B : Point, C : Point) let p = @(TriAxm1, A, B, C) in @(FST, p); Alternatively, the existence axiom of triangles can be stated as follows. dec TriAxm2 :

Euclid’s Defined Terms

84

!(A : Point, B : Point, C : Point) ?(s : Triangle) let p = \(t : Triangle) let A1 = @(GET_TRI_A, t), B1 = @(GET_TRI_B, t), C1 = @(GET_TRI_C, t) in @(And2, @(Eq_Point, A, A1), @(And1, @(Eq_Point, B, B1), @(Eq_Point, C, C1))) in @(And3, @(p, s), !(e : Triangle) [@(p, e) -> @(Eq_Triangle, e, s)]);

5.2.10

Properties of Triang Cong

For any points A, B and C, the △ ABC is congruent to △ ABC itself. dec Tri_Cong_Ref : !(A : Point, B : Point, C : Point) let ABC = @(TRIANGLE_SEG, A, B, C) in @(Triang_Cong2, A, B, C, A, B, C); For any points A1, B1, C1, A2, B2 and C2, if △ ABC1 is congruent to △ ABC2, then △ ABC2 is congruent to △ ABC1 too. dec Tri_Cong_Sym : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let ABC1 = @(TRIANGLE_SEG, A1, B1, C1), ABC2 = @(TRIANGLE_SEG, A2, B2, C2) in [@(Triang_Cong2, A1, B1, C1, A2, B2, C2) -> @(Triang_Cong2, A2, B2, C2, A1, B1, C1)]; For any points A1, B1, C1, A2, B2, C2, A3, B3 and C3, if △ ABC1 is congruent to △ ABC2, and △ ABC2 is congruent to △ ABC3, then △ ABC1 is congruent to △ ABC3. dec Tri_Cong_Tran : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point, A3 : Point, B3 : Point, C3 : Point)

Euclid’s Defined Terms

let ABC1 = @(TRIANGLE_SEG, ABC2 = @(TRIANGLE_SEG, ABC3 = @(TRIANGLE_SEG, [@(Triang_Cong2, A1, B1, @(Triang_Cong2, A2, B2, @(Triang_Cong2, A1, B1,

85

A1, A2, A3, C1, C2, C1,

B1, B2, B3, A2, A3, A3,

C1), C2), C3) in B2, C2) -> B3, C3) -> B3, C3)];

Graphically speaking there is no different between triangles ABC, BCA and CAB. However, this property has to be expressed explicitly when representing it by a symbolic logic. dec Triangle_Symm1 : !(A : Point, B : Point, C : Point) @(Triang_Cong2, A, B, C, A, B, C); dec Triangle_Symm2 : !(A : Point, B : Point, C : Point) @(Triang_Cong2, A, B, C, B, C, A); dec Triangle_Symm3 : !(A : Point, B : Point, C : Point) @(Triang_Cong2, A, B, C, C, A, B);

5.2.11

Equilateral Triangle

Definition 5.9 Of trilateral figures, an equilateral triangle is that which has its three sides equal. In terms of PowerEpsilon, we have equilateral triangle defined as follows: def Equil_Triangle = \(t : Triangle) let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in @(And0, @(RREq, ab, bc), @(RREq, bc, ca));

5.2.12

Isosceles Triangle

Definition 5.10 Of trilateral figures, an isosceles triangle is that which has two of its sides equal. In terms of PowerEpsilon, we have isoscels triangle defined as follows:

Euclid’s Defined Terms

86

def Isosc_Triangle = \(t : Triangle) let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in @(RREq, ab, ca);

5.2.13

Scalene Triangle

Definition 5.11 Of trilateral figures, a scalene triangle is that which has its three sides unequal. In terms of PowerEpsilon, we have scalene triangle defined as follows: def Scalene_Triangle = \(t : Triangle) let ab = @(GET_TRI_AB, bc = @(GET_TRI_BC, ca = @(GET_TRI_CA, @(And, @(Not, @(RREq, ab, @(And, @(Not, @(RREq, ab, @(Not, @(RREq, bc,

5.2.14

t), t), t) in bc)), ca)), ca))));

Right-Angled Triangle

Definition 5.12 Of trilateral figures, a right-angled triangle is that which has a right angle. In terms of PowerEpsilon, we have right-angled triangle defined as follows: def RAng_Triangle = \(t : Triangle) let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in @(Is_Right_Angle, CAB);

Euclid’s Defined Terms

5.2.15

87

Obtuse-Angled Triangle

Definition 5.13 Of trilateral figures, an obtuse-angled triangle is that which has an obtuse angle. In terms of PowerEpsilon, we have obtuse-angled triangle defined as follows: def OAng_Triangle = \(t : Triangle) let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in @(Obtuse_Angle, CAB);

5.2.16

Acute-Angled Triangle

Definition 5.14 Of trilateral figures, an acute-angled triangle is that which has its three angles acute. In terms of PowerEpsilon, we have acute-angled triangle defined as follows: def AAng_Triangle = \(t : Triangle) let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in @(And, @(Acute_Angle, ABC), @(And, @(Acute_Angle, BCA), @(Acute_Angle, CAB))); Here Euclid is telegraphing the fact, to be established in Theorem 17, that a triangle can have at most one nonacute angle.

5.2.17

Area of Triangle

The function TRI AREA takes a triangle as the input and return a real number as the output which is its area. dec TRI_AREA : [Triangle -> Real];

Euclid’s Defined Terms

5.3

88

Circles

Definition 5.15 (Circles) A circle is a plane figure contained by one line such that all the straight lines falling upon it the radii from one point among those lying within it are equal to one another. Definition 5.16 (Center of Circle) And the point is called the center of the circle. The “one line” of Definition 5.15 is the circle itself. The “straight lines falling upon it” from the center (Definition 5.16) that “are equal to one another” are what we would call its “radii”, so we have interpolated that term. Circles are the only nonstraight lines that occur in the Elements.

5.3.1

Data Structure: Circle0

A circle consists of central point O and a real number r as its radii. def Circle0 = ?(O : Point, r : Real) @(RRLs, RROO, r);

5.3.2

Constructor of Circle0

The constructive function for Circle0 is easy to specify accordingly. def MK_CIRCLE0 = \(O : Point, r : Real, p : @(RRLs, RROO, r)) ;

5.3.3

Selectors of Circle0

There are three selection functions of Circle0, namely, GET CIRC0 O, GETCIRC0 R and GET CIRC0 COND. def GET_CIRC0_O = \(c : Circle0) @(FST, c); def GET_CIRC0_R = \(c : Circle0) @(FST, @(SND, c));

Euclid’s Defined Terms

89

def GET_CIRC0_COND = \(c : Circle0) @(SND, @(SND, c));

5.3.4

Point A on Circle c

A point A is on circle c if the distance between A and the center of c is equal to r – the radii of c. def On_Circle0 = \(A : Point, c : Circle0) let O = @(GET_CIRC0_O, c), r = @(GET_CIRC0_R, c) in let x = @(GET_X, A), y = @(GET_Y, A), h = @(GET_X, O), k = @(GET_Y, O) in let xmh = @(RRMINUS, x, h), ymk = @(RRMINUS, y, k) in let xmh2 = @(RRTIMES, xmh, xmh), ymk2 = @(RRTIMES, ymk, ymk) in let z = @(RRADD, xmh2, ymk2) in let r2 = @(RRTIMES, r, r) in @(RREq, z, r2);

5.3.5

Equality of Circle0

Two circles c1 and c2 are equal iff their centers and radius are equal. In other words, two cricles are equal if their are completely same. def Eq_Circle0 = \(c1 : Circle0, c2 : Circle0) let O1 = @(GET_CIRC0_O, c1), r1 = @(GET_CIRC0_R, c1), O2 = @(GET_CIRC0_O, c2), r2 = @(GET_CIRC0_R, c2) in @(And1, @(Eq_Point, O1, O2), @(And, @(RREq, r1, r2), @(And, @(RRLs, RROO, r1), @(RRLs, RROO, r2))));

5.3.6

Congruent of Circles

The equality of circles are not useful. A weaker form of equality defined here is called congruence.

Euclid’s Defined Terms

90

def Circle_Cong = \(c1 : Circle0, c2 : Circle0) let O1 = @(GET_CIRC0_O, c1), r1 = @(GET_CIRC0_R, c1), O2 = @(GET_CIRC0_O, c2), r2 = @(GET_CIRC0_R, c2) in @(And, @(RREq, r1, r2), @(And, @(RRLs, RROO, r1), @(RRLs, RROO, r2)));

5.3.7

Point A inside of Circle c

A point A is inside of circle c iff the distance from A to the center of c is less than c’s radiu. def Inside_Circle0 = \(A : Point, c : Circle0) let O = @(GET_CIRC0_O, c), r = @(GET_CIRC0_R, c) in let x = @(GET_X, A), y = @(GET_Y, A), h = @(GET_X, O), k = @(GET_Y, O) in let xmh = @(RRMINUS, x, h), ymk = @(RRMINUS, y, k) in let xmh2 = @(RRTIMES, xmh, xmh), ymk2 = @(RRTIMES, ymk, ymk) in let z = @(RRADD, xmh2, ymk2) in let r2 = @(RRTIMES, r, r) in @(RRLs, z, r2);

5.3.8

Point A outside of Circle c

A point A is outside of circle c iff the distance from A to the center of c is greater than c’s radiu. def Outside_Circle0 = \(A : Point, c : Circle0) let O = @(GET_CIRC0_O, c), r = @(GET_CIRC0_R, c) in let x = @(GET_X, A), y = @(GET_Y, A), h = @(GET_X, O), k = @(GET_Y, O) in let xmh = @(RRMINUS, x, h), ymk = @(RRMINUS, y, k) in let xmh2 = @(RRTIMES, xmh, xmh), ymk2 = @(RRTIMES, ymk, ymk) in let z = @(RRADD, xmh2, ymk2) in

Euclid’s Defined Terms

91

let r2 = @(RRTIMES, r, r) in @(RRLs, r2, z);

5.3.9

Joint Point of Circles

A point C is a joint point of two circles c1 and c2 iff C is on both circles c1 and c2. def Joint_Circle0 = \(C : Point, c1 : Circle0, c2 : Circle0) @(And0, @(On_Circle0, C, c1), @(On_Circle0, C, c2));

5.4

Quadrilaterals

Definition 5.17 Quadrilateral figures are those which are contained by four straight lines, and multilateral are those contained by more than four straight lines.

5.4.1

Data Structure: Quad

A quadrilateral consists of four points A, B, C and D. These four points are not on same straight line. In addition, A is a joint point of DA and AB, B is a joint point of AB and BC, C is a joint point of BC and CD, and D is a joint point of CD and DA. def Quad = ?(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in @(And, !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(And, @(On_Line, C, a), @(On_Line, D, a))))),

Euclid’s Defined Terms

@(And, @(JP_FLine, @(And, @(JP_FLine, @(And, @(JP_FLine, @(JP_FLine,

5.4.2

92

A, DA, AB), B, AB, BC), C, BC, CD), D, CD, DA)))));

Constructor of Quad

The constructive function for Quad is easy to specify accordingly. def MK_QUAD = \(A : Point, B : Point, C : Point, D : Point) \(p : let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in @(And, !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(And, @(On_Line, C, a), @(On_Line, D, a))))), @(And, @(JP_FLine, A, DA, AB), @(And, @(JP_FLine, B, AB, BC), @(And, @(JP_FLine, C, BC, CD), @(JP_FLine, D, CD, DA)))))) ;

5.4.3

Selectors of Quad

There are three selection functions of Quad, namely, GET QUAD A, GET QUAD B, GET QUAD C, and GET QUAD D.

Euclid’s Defined Terms

93

def GET_QUAD_A = \(t : Quad) @(FST, t); def GET_QUAD_B = \(t : Quad) @(FST, @(SND, t)); def GET_QUAD_C = \(t : Quad) @(FST, @(SND, @(SND, t))); def GET_QUAD_D = \(t : Quad) @(FST, @(SND, @(SND, @(SND, t))));

5.4.4

Equality of Quad

Two quadrilaterals t1 and t2 are equal iff their corresponding extremities are equal. In other words, two quadrilaterals are equal if their are completely same. def Eq_Quad = \(t1 : Quad, t2 : Quad) let A1 = @(GET_QUAD_A, t1), B1 = @(GET_QUAD_B, t1), C1 = @(GET_QUAD_C, t1), D1 = @(GET_QUAD_D, t1), @(And3, @(Eq_Point, A1, A2), @(And2, @(Eq_Point, B1, B2), @(And1, @(Eq_Point, C1, C2), @(Eq_Point, D1, D2))));

5.4.5

A2 B2 C2 D2

= = = =

@(GET_QUAD_A, @(GET_QUAD_B, @(GET_QUAD_C, @(GET_QUAD_D,

t2), t2), t2), t2) in

Congruent of Quad

The equality of quadrilaterals are not useful. A weaker form of equality defined here is called congruence. def Quad_Cong = \(t1 : Quad, t2 : Quad) let A1 = @(GET_QUAD_A, t1), A2 = @(GET_QUAD_A, t2),

Euclid’s Defined Terms

B1 = @(GET_QUAD_B, t1), B2 = @(GET_QUAD_B, t2), C1 = @(GET_QUAD_C, t1), C2 = @(GET_QUAD_C, t2), D1 = @(GET_QUAD_D, t1), D2 = @(GET_QUAD_D, t2) in let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CD1 = @(DISTANCE, C1, D1), CD2 = @(DISTANCE, C2, D2), DA1 = @(DISTANCE, D1, A1), DA2 = @(DISTANCE, D2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCD1 = @(ANGLE_SEG, C1, B1, D1), BCD2 = @(ANGLE_SEG, C2, B2, D2), CDA1 = @(ANGLE_SEG, D1, C1, A1), CDA2 = @(ANGLE_SEG, D2, C2, A2), DAB1 = @(ANGLE_SEG, A1, D1, B1), DAB2 = @(ANGLE_SEG, A2, D2, B2) in @(And2, @(And1, @(And0, @(RREq, AB1, AB2), @(RREq, BC1, BC2)), @(And0, @(RREq, CD1, CD2), @(RREq, DA1, DA2))), @(And1, @(And0, @(Eq_Angle, ABC1, ABC2), @(Eq_Angle, BCD1, BCD2)), @(And0, @(Eq_Angle, CDA1, CDA2), @(Eq_Angle, DAB1, DAB2))));

In terms of Point, we have def Quad_Cong2 = \(A1 : Point, B1 : Point, C1 : Point, D1 : Point, A2 : Point, B2 : Point, C2 : Point, D2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CD1 = @(DISTANCE, C1, D1), CD2 = @(DISTANCE, C2, D2), DA1 = @(DISTANCE, D1, A1), DA2 = @(DISTANCE, D2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCD1 = @(ANGLE_SEG, C1, B1, D1), BCD2 = @(ANGLE_SEG, C2, B2, D2), CDA1 = @(ANGLE_SEG, D1, C1, A1), CDA2 = @(ANGLE_SEG, D2, C2, A2), DAB1 = @(ANGLE_SEG, A1, D1, B1), DAB2 = @(ANGLE_SEG, A2, D2, B2) in @(And2, @(And1, @(And0, @(RREq, AB1, AB2), @(RREq, BC1, BC2)), @(And0, @(RREq, CD1, CD2), @(RREq, DA1, DA2))), @(And1,

94

Euclid’s Defined Terms

95

@(And0, @(Eq_Angle, ABC1, ABC2), @(Eq_Angle, BCD1, BCD2)), @(And0, @(Eq_Angle, CDA1, CDA2), @(Eq_Angle, DAB1, DAB2))));

5.4.6

Parallelogram

Definition 5.18 A parallelogram is a quadrilateral in which opposite sides are parallel to one another. In terms of PowerEpsilon, we have def Parallelogram = \(q : Quad) let A = @(GET_QUAD_A, q), B = @(GET_QUAD_B, q), C = @(GET_QUAD_C, q), D = @(GET_QUAD_D, q) in let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in @(And, @(Parallel_FLine, AB, CD), @(Parallel_FLine, BC, DA)); In terms of Point, we have def Parallelogram2 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in @(And, @(Parallel_FLine, AB, CD), @(Parallel_FLine, BC, DA));

5.4.7

Square

Definition 5.19 Of quadrilateral figures, a square is that which is both equilateral and right-angled. In other words, a square is a four-sided figure with four equal sides and four right angles. def Square = \(q : Quad) let A = @(GET_QUAD_A, B = @(GET_QUAD_B, C = @(GET_QUAD_C, D = @(GET_QUAD_D,

q), q), q), q) in

Euclid’s Defined Terms

let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in let ABC = @(ANGLE_SEG, B, A, C), BCD = @(ANGLE_SEG, C, B, D), CDA = @(ANGLE_SEG, D, C, A), DAB = @(ANGLE_SEG, A, D, B) in @(And, @(And, @(Eq_FLine, AB, BC), @(And, @(Eq_FLine, BC, CD), @(And, @(Eq_FLine, CD, DA), @(Eq_FLine, DA, AB)))), @(And4, @(Is_Right_Angle, ABC), @(And4, @(Is_Right_Angle, BCD), @(And4, @(Is_Right_Angle, CDA), @(Is_Right_Angle, DAB))))); In terms of Point instead of Quad, we have the following def Square2 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in let ABC = @(ANGLE_SEG, B, A, C), BCD = @(ANGLE_SEG, C, B, D), CDA = @(ANGLE_SEG, D, C, A), DAB = @(ANGLE_SEG, A, D, B) in @(And, @(And, @(Eq_FLine, AB, BC), @(And, @(Eq_FLine, BC, CD), @(And, @(Eq_FLine, CD, DA),

96

Euclid’s Defined Terms

97

@(Eq_FLine, DA, AB)))), @(And4, @(Is_Right_Angle, ABC), @(And4, @(Is_Right_Angle, BCD), @(And4, @(Is_Right_Angle, CDA), @(Is_Right_Angle, DAB)))));

5.4.8

Existence of Quadrilateral

It is possible to draw a quadrilateral for any four given points. Or more specifically it is possible to draw one and only one quadrilateral for any four given points. Formally specifying, we have the following axiom declared which is similar to IAxm1. dec QuadAxm1 : !(A : Point, B : Point, C : Point, D : Point) ?(t : Quad) let A1 = @(GET_QUAD_A, t), B1 = @(GET_QUAD_B, t), C1 = @(GET_QUAD_C, t), D1 = @(GET_QUAD_D, t) in @(And3, @(Eq_Point, A, A1), @(And2, @(Eq_Point, B, B1), @(And1, @(Eq_Point, C, C1), @(Eq_Point, D, D1)))); Based on QuadAxm1 we will be able to define a function QUAD SEG. By giving four points A, B, C and D, it will produce uniquely a quadrilateral. dec QUAD_SEG : [Point -> Point -> Point -> Point -> Quad]; def QUAD_SEG = \(A : Point, B : Point, C : Point, D : Point) let p = @(QuadAxm1, A, B, C, D) in @(FST, p);

Euclid’s Defined Terms

5.4.9

98

Area of Quad

The function QUAD AREA takes a quadrilateral as the input and return a real number as the output which is its area. dec QUAD_AREA : [Quad -> Real];

Chapter 6

Euclid’s Axioms 6.1

Euclid’s Original Axioms

Euclid states 10 axioms, though there are others he didn’t bother to write down, some of which we will uncover on our way through Book I. Of the 10 explicit axioms, he calls the first five “Postulates” and the last five “Common Notions”. His distinction, not made by modern geometers, seems to have been that whereas the Postulates are specifically geometrical assumptions, the Common Notions are basic to other sciences as well. The first three postulates empower us to construct things: to connect two points by a straight line whenever we like, to prolong (“produce”) any finite straight line, and to draw (“describe”) circles, of any size, centered anywhere. Postulate 1 and 2 are called the “straightedge postulates” because they metaphorically give us unrestricted use of a pencil and unmarked straightedge. Similarly Postulate 3 is called the “compass postulate”.

6.1.1

Postulate 1

Postulate 1 It is possible to draw a straight line from any point to any point. Or more specifically it is possible to draw one and only one straight line from any point to any point. Formally specifying, we have the following declarations for Postulate 1 in terms of PowerEpsilon. The first one, IAxm1, is for Line. dec IAxm1 : !(A : Point, B : Point) ?(a : Line) @(And, @(On_Line, A, a), @(On_Line, B, a));

99

Euclid’s Axioms

100

Based on IAxm1 we will be able to define a function LINE SEG. By giving two points A and B, it will produce uniquely a straight line. def LINE_SEG = \(A : Point, B : Point) @(FST, @(IAxm1, A, B)); And the second one, IAxm10, is for Finite Line. dec IAxm10 : !(A : Point, B : Point) ?(a : Finite_Line) @(And, @(On_FLine, A, a), @(On_FLine, B, a)); Based on IAxm10 we will be able to define a function FLINE SEG. By giving two points A and B, it will produce uniquely a finite straight line. def FLINE_SEG = \(A : Point, B : Point) @(FST, @(IAxm10, A, B));

6.1.2

Postulate 2

Postulate 2 It is possible to produce a finite straight line continuously in a straight line. Or more precisely, from each end of a finite straight line it is possible to produce it continuously in a straight line by an amount greater than any assigned length. This should be a axiom scheme – a family of axioms instead of an axiom only. Since we may have many different axioms which satisfies the requirement described above. dec IIAxm2 : !(A : Point, C : Point) ?(B : Point) @(In_Between, C, A, B); dec IIAxm21 : !(A : Point, C : Point, D : Point, E : Point) ?(B : Point) let ab = @(DISTANCE, A, B), de = @(DISTANCE, D, E) in @(And, @(RRGs, ab, de), @(In_Between, C, A, B)); dec IIAxm22 :

Euclid’s Axioms

101

!(A : Point, C : Point, D : Point, E : Point) ?(B : Point) let cb = @(DISTANCE, C, B), de = @(DISTANCE, D, E) in @(And, @(RRGs, cb, de), @(In_Between, C, A, B)); dec IIAxm23 : !(A : Point, B : Point, c : Circle0) ?(C : Point) let ac = @(DISTANCE, A, C), ab = @(DISTANCE, A, B) in @(And, @(RRGs, ac, ab), @(Outside_Circle0, C, c)); The axiom scheme can be specified as follows: dec IIAxmS2 : !(P : [Point -> Point -> Point -> Prop]) !(A : Point, C : Point) ?(B : Point) @(And, @(P, A, B, C), @(In_Between, C, A, B)); From IIAxmS2, we will be able to derive IIAxm21 as follows: def IIAxm21 = \(A : Point, C : Point, D : Point, E : Point) let P = \(X : Point, Y : Point, Z : Point) let ab = @(DISTANCE, X, Y), de = @(DISTANCE, D, E) in @(RRGs, ab, de) in @(IIAxmS2, P, A, C);

6.1.3

Postulate 3

Postulate 3 It is possible to describe a circle with any center and radius. Or more presicely, it is possible to describe one and only one circle with any center and radius. Formally specifying, we have the following declarations for Postulate 3 in terms of PowerEpsilon. dec CircAxm1 : !(O : Point, r : Real) ?(c : Circle0) let O1 = @(GET_CIRC0_O, c), r1 = @(GET_CIRC0_R, c) in @(And1, @(Eq_Point, O, O1), @(RREq, r, r1));

Euclid’s Axioms

102

Based on CircAxm1 we will be able to define a function CIRCLE SEG. By giving a point O and a radius r, it will produce uniquely a circle. def CIRCLE_SEG = \(O : Point, r : Real) let p = @(CircAxm1, O, r) in @(FST, p); The CircAxm2 is used for specifying the uniqueness of a circle produced. dec CircAxm2 : !(O : Point, r : Real) ?(c : Circle0) let p = \(d : Circle0) let O1 = @(GET_CIRC0_O, d), r1 = @(GET_CIRC0_R, d) in @(And1, @(Eq_Point, O, O1), @(RREq, r, r1)) in @(And2, @(p, c), !(e : Circle0) [@(p, e) -> @(Eq_Circle0, e, c)]);

The first three postulates empower us to construct things: to connect two points by a straight line whenever we like, to prolong (“produce”) any finite straight line, and to draw (“describe”) circles, of any size, centered anywhere. Postulate 1 and 2 are called the “straightedge postulates” because they metaphorically give us unrestricted use of a pencil and unmarked straightedge. Similarly Postulate 3 is called the “compass postulate”. Permitting these constructions is Euclid’s way of stipulating the existence of the objects constructed. Every branch of mathematics needs a clear-cut standard whereby proposed objects of study inconsistent with its axioms can be recognized as lying outside that branch’s legitimate purview. Such objects are declared “not to exist”, and the standard that bars them is called the “existence criterion”. (1/0, for example, does not meet the existence criterion of the standard number system, because its admission would lead to absurdities like 1 = 2. Thus we are told in school that division by 0 “is impossible”, or that 1/0 “is undefined” or “does not exist”.) Euclid’s existence criterion is constructability with compass and straightedge. Euclid clearly understood te straight line of Postulate 1 and the circle of Postulate 3 to be unique – that joining two points there exist only one straight line, and that there exist only one circle having a given center and radius. It is also clear from his use Postulate 2 that he understood it to allow producing a finite straight line, from either end, by as much as we want.

Euclid’s Axioms

6.1.4

103

Postulate 4

Postulate 4 All right angles are equal to one another. This postulate strikes many people as redundant. We are so used to measuring angles in “degree” that it’s easy to overlook the fact that Euclid has made no mention of that term (he never does). Nor he give us a protractor among our metaphorical tools. The symbolic 90◦ is, admittedly, a handy shortand for “right angle”, and we will introduce it shortly for that purpose; but even once this is done “right angle” will remain logically prior. We will know that “90◦ ” always represents the same angle-size because of Postulate 4, not the other way around. dec Angle_Axm1 : !(a : Angle, b : Angle) [@(Is_Right_Angle2, a) -> @(Is_Right_Angle2, b) -> @(Eq_Angle, a, b)]; The truth of Postulate 4 is not obvious. It tells us something we didn’t know before – that the plane is uniform, at least to the extent that right angles are the same no matter where they are. Only now do “acute” and “obtuse” take on their usual significance. With Postulate 4, we know that “right angle” is a fixed and universal standard to which other angles can be compared.

6.1.5

Postulate 5

Postulate 5 If a straight line falling on two straight lines make the interior angles on the same side less than two right angles, the two straight lines, if produced indefinitely, meet on that side on which are the angles less than the two right angles. Formally specifying, we have the following declarations for Postulate 5 in terms of PowerEpsilon. dec IVAxm21 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEF = @(ANGLE_SEG, E, A, F), BEF = @(ANGLE_SEG, E, B, F),

Euclid’s Axioms

104

EFC = @(ANGLE_SEG, F, E, C), EFD = @(ANGLE_SEG, F, E, D) in let aef = @(GET_ANGLE, AEF), bef = @(GET_ANGLE, BEF), efc = @(GET_ANGLE, EFC), efd = @(GET_ANGLE, EFD) in [@(RRLs, @(RRADD, aef, efc), RRPI) -> ?(I : Point) @(JP_FLine2, I, a, b)]]; dec IVAxm22 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEF = @(ANGLE_SEG, E, A, F), BEF = @(ANGLE_SEG, E, B, F), EFC = @(ANGLE_SEG, F, E, C), EFD = @(ANGLE_SEG, F, E, D) in let aef = @(GET_ANGLE, AEF), bef = @(GET_ANGLE, BEF), efc = @(GET_ANGLE, EFC), efd = @(GET_ANGLE, EFD) in [@(RRLs, @(RRADD, efd, bef), RRPI) -> ?(I : Point) @(JP_FLine2, I, a, b)]];

The purpose of Postulate 4 is to conclude certain pairs of straight lines intersect, in which case it goes on to say where the intersection takes place. It is noticeably more complicated than Euclid’s other nine axioms.

6.1.6

Common Notions

1. Things which are equal to the same thing are also equal to another. 2. If equals be added to equals, the wholes are equal. 3. If equals be subtracted from equals, the remainders are equal. 4. Things which coincide with one another are equal to one another. 5. The whole is greater than the part. The Common Notions are Euclid’s last explicit axioms. They are general rules for reasoning with quantities – or, to use Greek term, “magnitudes”. In plane geometry these magnitudes are of three kinds: lengths of finite lines, angle sizes, and areas. All but Common Notion 4 can be expressed algebraically, where “a”, “b”, “c” and “d” represent any magnitudes of the same kind. Common Notion 1. If a = b and c = b then a = c.

Euclid’s Axioms

105

Common Notion 2. If a = b and c = d then a + c = b + d. Common Notion 3. If a = b and c = d then a - c = b - d. Common Notion 5. If a + b > a. Common Notion 4 cannot be expressed algebraically because, unlike the other Common Notions, it involves a notion that is not quantitative: coincide. This is a specially geometric notion, which it connects to the quantitative one of equality. We could treat the Common Notion 4 as the following axioms respectively for Finite Line, Angle, Circle0, Triangle and Quad as follows: dec Eq_FLine_Axm : !(A1 : Point, B1 : Point, A2 : Point, B2 : Point) let AB1 = @(FLINE_SEG, A1, B1), AB2 = @(FLINE_SEG, A2, B2) in let ab1 = @(DISTANCE, A1, B1), ab2 = @(DISTANCE, A2, B2) in [@(Eq_FLine, AB1, AB2) -> @(RREq, ab1, ab2)];

It says that the finite straight lines which coincide with one another are equal to one another. dec Eq_Angle_Axm : !(a1 : Angle, a2 : Angle) [@(Id_Angle, a1, a2) -> @(Eq_Angle, a1, a2)]; It says that the angles which coincide with one another are equal to one another. dec Eq_Circle_Axm : !(a1 : Circle0, a2 : Circle0) [@(Eq_Circle0, a1, a2) -> @(Circle_Cong, a1, a2)]; It says that the circles which coincide with one another are equal to one another. dec Eq_Triangle_Axm : !(a1 : Triangle, a2 : Triangle) [@(Eq_Triangle, a1, a2) -> @(Triang_Cong, a1, a2)]; dec Eq_Triangle_Axm2 : !(A1 : Point, B1 : Point, A2 : Point, B2 : Point, [@(Eq_Triangle2, A1, B1, @(Triang_Cong2, A1, B1,

C1 : Point, C2 : Point) C1, A2, B2, C2) -> C1, A2, B2, C2)];

Euclid’s Axioms

106

It says that the triangles which coincide with one another are equal to one another. dec Eq_Quad_Axm : !(a1 : Quad, a2 : Quad) [@(Eq_Quad, a1, a2) -> @(Quad_Cong, a1, a2)]; dec Eq_Quad_Axm2 : !(A1 : Point, B1 : Point, C1 : Point, D1 : Point, A2 : Point, B2 : Point, C2 : Point, D2 : Point) [@(Eq_Quad2, A1, B1, C1, D1, A2, B2, C2, D2) -> @(Quad_Cong2, A1, B1, C1, D1, A2, B2, C2, D2)]; It says that the quadrilaterals which coincide with one another are equal to one another. Euclid had a very geometric use of Common Notion 4, namely to justify a controversial procedure he uses reluctantly on two occassions (Theorem 4 and 8) and which Hilbert, in his reformulation of Euclidean geometry, came to reject altogether – the superposition of figures. Unfortunately there are simple quantitative deduction we would naturally make, and Euclid in fact does make, which are unjustified by any Common Notion. If we knew for instance that ̸ 1 = ̸ 2 and ̸ 3 < ̸ 4, we would naturally conclude that ̸ 1 + ̸ 3 < ̸ 2 + ̸ 4. But no Common Notion says that when equals are added to unequals, the sums are unequal (in the same way). We could perhaps distill some sort of justification out of Common Notions 2 and 5, but the labor of doing so would be considerable, and would have to be repeated several times before we had established all the principles of quantitative reasoning Euclid uses. Another possibility, since we are, after all, in the business of stating baldly some of the things that are only implicit in the Elements, would be to add a series of new “Common Notions”, convering every type of quantitative deduction we might have occassion to make; but such a series would be discouragingly long. As a compromise we will add a single “Common Notion” that recognizes, in general terms, the legitimacy of treating geometric magnitudes like numbers, with the understanding that whenever we apply it we will state the specific numerical principle we have in mind. Common Notion 6. Equations and inequalities involving geometric magnitudes of the same kind of obey the same laws as equations and inequalities involving positive numbers. Thus, to return to our example, if we knew that ̸ 1 = ̸ 2 and ̸ 3 < ̸ 4, we would write the following as the reason for our conclusion that ̸ 1 + ̸ 3 < ̸ 2 + ̸ 4. Common Notion 6. If a = b and c < d then a + c < b + d.

Euclid’s Axioms

107

Technically, Common Notion 6 includes all the other Common Notions except Common Notion 4, Making them redundant. However, we will continue to use these others whenever they apply, reserving Common Notion 6 for situations in which they don’t.

6.1.7

Postulate 6

Postulate 6 This postulate is often called “continuity” axiom which are stated as follows: 1. A circle separates the points of the plane not on the circle into two regions called its outside and inside. 2. Any line drawn from a point outside to a point inside intersects the circle. 3. Any striaght line drawn from a point on the circle to a point inside will, if produced indefinitely beyond the point inside, intersect the circle exactly one more time. We therefore have the following formulas in terms of PowerEpsilon. dec CircAxm3 : !(A : Point, c : Circle0) [@(Not, @(On_Circle0, A, c)) -> @(Or, @(Inside_Circle0, A, c), @(Outside_Circle0, A, c))]; dec Circ_Intersect : !(A : Point, B : Point, c : Circle0) [@(Inside_Circle0, A, c) -> @(Outside_Circle0, B, c) -> ?(C : Point) @(And, @(In_Between, C, A, B), @(On_Circle0, C, c))]; dec Circ_Intersect2 : !(A : Point, B : Point, c : Circle0) [@(On_Circle0, A, c) -> @(Inside_Circle0, B, c) -> ?(C : Point) @(And, @(On_Circle0, C, c), @(In_Between, B, A, C))]; Postulate 6 is called a continuity axiom, because its overall effect is to assure us that circles and triangles are continuous figures, with no gaps between their points. Later we will need another continuity axiom; as it is the analog for straight lines of Postulate 6, we may as well stateit now.

Euclid’s Axioms

6.1.8

108

Postulate 7

Postulate 7 We need another continuity axiom which stated as follows: 1. A straight line extending indefinitely far in both directions separates the points of the plane not on it into two regions called its side. 2. Any line drawn from a point on one side to a point on the other side intersects the infinite straight line. In terms of PowerEpsilon, we have dec LineAxm1 : !(A : Point, a : Line) [@(Not, @(On_Line, A, a)) -> let r = @(Eval_On_Line, A, a) in @(Or, @(RRGs, r, RROO), @(RRLs, r, RROO))]; dec LineAxm2 : !(A : Point, B : Point, a : Line) [@(Not, @(On_Line, A, a)) -> @(Not, @(On_Line, B, a)) -> @(In_Diff_Side, A, B, a) -> ?(C : Point) let AB = @(FLINE_SEG, A, B) in @(And, @(On_FLine, C, AB), @(On_Line, C, a))]; As even finite straight lines are potentially infinite by Postulate 2, we can use part 1 to speak of their “sides” as well. The “sides” of a finite straight line, say BC, are the sides of the infinite straight line consisting of all points through which BC could be produced.

6.1.9

Postulate 8

Postulate 8 If two sides and the included angle of one triangle are equal respectively to two sides and the included angle of another triangle, then the triangles are congruent. In Euclid’s Elements, this axiom is treated as a theorem and he proved this theorem using a very special technique called superposition. However, in recent time, at least since 1550, superposition has been roundly criticized by mathematicians and philosophers alike as subversive of the nature of Elements. There are two versions of SAS axiom, the first one is establised directly based on triangles. dec SAS_Thm :

Euclid’s Axioms

109

!(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in [@(RREq, AB1, AB2) -> @(RREq, CA1, CA2) -> @(Eq_Angle, CAB1, CAB2) -> @(Triang_Cong, t1, t2)];

Instead of dealing with triangles directly, the second one is established based on points from which the triangles being built. dec SAS_Thm2 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(RREq, AB1, AB2) -> @(RREq, BC1, BC2) -> @(Eq_Angle, ABC1, ABC2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)];

6.1.10

Postulate 9

Postulate 9 Congruent triangles have equal area. In terms of PowerEpsilon, we have dec Tri_Cong_Axm : !(t1 : Triangle, t2 : Triangle) [@(Triang_Cong, t1, t2) -> let r1 = @(TRI_AREA, t1), r2 = @(TRI_AREA, t2) in @(RREq, r1, r2)];

Euclid’s Axioms

dec Tri_Cong_Axm2 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) [@(Triang_Cong2, A1, B1, C1, A2, B2, C2) -> let ABC1 = @(TRIANGLE_SEG, A1, B1, C1), ABC2 = @(TRIANGLE_SEG, A2, B2, C2) in let r1 = @(TRI_AREA, ABC1), r2 = @(TRI_AREA, ABC2) in @(RREq, r1, r2)];

6.1.11

Postulate 10

Postulate 10 It is possible to choose a point at random. 1. Between the endpoints of a given finite line. 2. Outside or inside of a given circle (or triangle). 3. On a given side of a finite or infinite straight line. In terms of PowerEpsilon, we have dec IAxm41 : !(a : Finite_Line) ?(A : Point) @(On_FLine, A, a); dec IAxm42 : !(c : Circle0) ?(A : Point) @(Inside_Circle0, A, c); dec IAxm43 : !(c : Circle0) ?(A : Point) @(Outside_Circle0, A, c); dec IAxm44 : !(A : Point, a : Finite_Line) ?(B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in @(JP_FLine, C, a, AB); dec IAxm45 : !(A : Point, a : Line)

110

Euclid’s Axioms

111

?(B : Point, C : Point) let AB = @(LINE_SEG, A, B) in @(JP_Line, C, a, AB);

6.2

Hilbert’s Axioms

The best-known reformulation is Foundations of Geometry by the mathematical giant David Hilbert (1862-1943), first published in 1899 (a 10th edition appeared in 1968 [7]). Hilbert’s primitive terms are point, straight line, plane, on (as in “point C is on straight line AB”), between, and congruent (corresponding to Euclid’s “equal”). His axioms number fifteen (Euclid has ten), and his theorems include suc intuitively obvious statements as

Theorem 4 Of any three points A, B, C on a straight line there is always one that lies between the other two. Thus geometry became “rigorous” beyond the Greek’s widest dreams. By today’s hard-line standards the Elements is indeed a logical sieve. Nevertheless we have organized this book around the Elements rather than Foundations of Geometry, as we feel it will carry us more quickly and pleasantly to the real issues. Caulking every little logical crevice is tedious work, and unless you ave extensive mathematical experience you would likely find it confusing as well. More importantly, it is Euclid’s text, not Hilbert’s, that has been the scientific paradigm for most of scientific history; and it is Euclid’s, not Hilbert’s, to which the inventors of non-Euclidean geometry were responding.

6.2.1

Relational Axioms

The first group of Hilbert’s axioms are called relational axioms which contains eight axioms. Among them, there are three axioms for two-dimensional plane geometry and the rest of five axioms are for three-dimensional space geometry. Here, we will only list the plane geometry axioms. dec IAxm1 : !(A : Point, B : Point) ?(a : Line) @(And, @(On_Line, A, a), @(On_Line, B, a)); dec IAxm10 : !(A : Point, B : Point) ?(a : Finite_Line) @(And, @(On_FLine, A, a), @(On_FLine, B, a));

Euclid’s Axioms

112

dec IAxm2 : !(A : Point, B : Point) ?(a : Line) let p = \(b : Line) @(And, @(On_Line, A, b), @(On_Line, B, b)) in @(And, @(p, a), !(c : Line) [@(p, c) -> @(Equal, Line, a, c)]); dec IAxm31 : !(a : Line) ?(A : Point, B : Point) @(And, @(On_Line, A, a), @(On_Line, B, a)); dec IAxm32 : !(a : Line) !(A : Point, B : Point) [@(And, @(On_Line, A, a), @(On_Line, B, a)) -> ?(C : Point) @(Not, @(On_Line, C, a))];

6.2.2

Sequencing Axioms

The second group of axioms is for sequencing. dec IIAxm11 : !(X : Point, A : Point, B : Point) let a = @(LINE_SEG, A, B) in [@(In_Between, X, A, B) -> @(On_Line, X, a)]; dec IIAxm12 : !(X : Point, A : Point, B : Point) [@(In_Between, X, A, B) -> @(In_Between, X, B, A)]; dec IIAxm2 : !(A : Point, C : Point) ?(B : Point) @(In_Between, C, A, B); dec IIAxm21 : !(A : Point, C : Point, D : Point, E : Point) ?(B : Point) let ab = @(DISTANCE, A, B), de = @(DISTANCE, D, E) in @(And, @(RRGs, ab, de), @(In_Between, C, A, B)); dec IIAxm22 : !(A : Point, C : Point, D : Point, E : Point) ?(B : Point) let cb = @(DISTANCE, C, B), de = @(DISTANCE, D, E) in

Euclid’s Axioms

113

@(And, @(RRGs, cb, de), @(In_Between, C, A, B)); dec IIAxmS2 : !(P : [Point -> Point -> Point -> Prop]) !(A : Point, C : Point) ?(B : Point) @(And, @(P, A, B, C), @(In_Between, C, A, B)); dec IIAxm3 : !(a : Line, A : Point, B : Point, C : Point) [@(On_Line, A, a) -> @(On_Line, B, a) -> @(On_Line, C, a) -> @(Or, @(In_Between, A, B, C), @(Or, @(In_Between, B, A, C), @(In_Between, C, A, B)))]; dec IIAxm4 : !(A : Point, B : Point, C : Point, a : Line) !(r : @(And, !(a : Line) @(Not, @(And, @(On_Line, A, a), @(And, @(On_Line, B, a), @(On_Line, C, a)))), let AB = @(LINE_SEG, A, B), BC = @(LINE_SEG, B, C), CA = @(LINE_SEG, C, A) in @(And, @(JP_Line, A, AB, CA), @(And, @(JP_Line, B, AB, BC), @(JP_Line, C, BC, CA))))) [?(D : Point) @(JP_Line, D, a, @(LINE_SEG, A, B)) -> @(Or1, ?(D : Point) @(JP_Line, D, a, @(LINE_SEG, A, C)), ?(D : Point) @(JP_Line, D, a, @(LINE_SEG, B, C)))];

6.2.3

Congruent Axioms

The third group of axioms is used for defining congruent relation over finite straight lines and angles.

Euclid’s Axioms

dec IIIAxm11 : !(a : Line, A : Point, B : Point) [@(On_Line, A, a) -> @(On_Line, B, a) -> !(A1 : Point) [@(On_Line, A1, a) -> ?(B1 : Point) @(And, @(On_Line, B1, a), let b = @(FLINE_SEG, A, B), c = @(FLINE_SEG, A1, B1) in @(Eq_FLine, b, c))]]; dec IIIAxm12 : !(a : Line, A : Point, B : Point) [@(On_Line, A, a) -> @(On_Line, B, a) -> !(a1 : Line, A1 : Point) [@(On_Line, A1, a1) -> ?(B1 : Point) @(And, @(On_Line, B1, a1), let b = @(FLINE_SEG, A, B), c = @(FLINE_SEG, A1, B1) in @(Eq_FLine, b, c))]]; dec IIIAxm2 : !(A0 : Point, B0 : Point, A1 : Point, B1 : Point, A2 : Point, B2 : Point) let a1 = @(FLINE_SEG, A0, B0), a2 = @(FLINE_SEG, A1, B1), a3 = @(FLINE_SEG, A2, B2) in [@(Eq_FLine, a1, a2) -> @(Eq_FLine, a1, a3) -> @(Eq_FLine, a2, a3)]; dec IIIAxm3 : !(A0 : Point, B0 : Point, C0 : Point, a0 : Line) [@(On_Line, A0, a0) -> @(On_Line, B0, a0) -> @(On_Line, C0, a0) -> let AB0 = @(FLINE_SEG, A0, B0), BC0 = @(FLINE_SEG, B0, C0), AC0 = @(FLINE_SEG, A0, C0) in [!(D0 : Point) [@(Not2, @(Eq_Point, B0, D0)) -> @(Not, @(JP_FLine, D0, AB0, BC0))] -> !(A1 : Point, B1 : Point, C1 : Point, a1 : Line)

114

Euclid’s Axioms

115

[@(On_Line, A1, a1) -> @(On_Line, B1, a1) -> @(On_Line, C1, a1) -> let AB1 = @(FLINE_SEG, A1, B1), BC1 = @(FLINE_SEG, B1, C1), AC1 = @(FLINE_SEG, A1, C1) in [!(D1 : Point) [@(Not2, @(Eq_Point, B1, D1)) -> @(Not, @(JP_FLine, D1, AB1, BC1))] -> [@(Eq_FLine, AB0, AB1) -> @(Eq_FLine, BC0, BC1) -> @(Eq_FLine, AC0, AC1)]]]]]; dec IIIAxm4_Lem1 : !(O : Point, h : Finite_Line, k : Finite_Line) !(t1 : @(On_FLine, O, h), t2 : @(On_FLine, O, k)) @(JP_FLine, O, h, k); dec IIIAxm4 : !(g : Angle) !(O1 : Point, r1 : Line, h1 : Finite_Line) !(t1 : @(On_FLine, O1, h1), s1 : @(FLine_On_Line, h1, r1)) ?(k1 : Finite_Line, x1 : @(On_FLine, O1, k1)) let b1 = @(IIIAxm4_Lem1, O1, h1, k1, t1, x1), g1 = in @(Eq_Angle, g, g1); dec IIIAxm5 : !(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in [@(And0, @(RREq, AB1, AB2), @(RREq, CA1, CA2)) -> @(Eq_Angle, CAB1, CAB2) -> @(Eq_Angle, ABC1, ABC2)];

6.2.4

Parallel Axioms

The fourth group of axioms is the parallel axioms. Axiom 6.1 (Euclidean Axiom) Assume that a is a line, A is a point not on a, there exists at most one line b passing through A and not joining with a. In terms of PowerEpsilon, we have the following:

Euclid’s Axioms

dec IVAxm : !(a : Line, A : Point) [@(Not, @(On_Line, A, a)) -> ?(b : Line) let r = \(c : Line) @(And, @(On_Line, A, c), !(B : Point) @(Not, @(JP_Line, B, a, c))) in @(And, @(r, b), !(d : Line) [@(r, d) -> @(Eq_Line, b, d)])];

6.2.5

Continuity Axioms

The last group of axioms is the continuity axioms. dec MULTI_LINE : [Point -> Finite_Line -> Nat -> Finite_Line]; dec VAxm1 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in ?(n : Nat) let nCD = @(MULTI_LINE, A, CD, n) in ?(E : Point) @(And, @(On_FLine, E, AB), @(And, @(On_FLine, E, nCD), @(In_Between, B, A, E)))

116

Chapter 7

Theorems Proven Without Postulate 5 Euclid seems to have put off using Postulate 5 as long as he could. At any rate, the first 28 theorems of Book I are proven without it, as is Theorem 31 (Book I as 48 theorems in all). We will examine most of the Postulate 5-independent theorems in this section. We will present proof of a theorem first by giving Euclid’s proof and then by giving the proof in terms of PowerEpsilon. We may say that the proof provided by Euclid is the informal one and expressed in terms of PowerEpsilon is the formal one.

7.1

Analytic Proofs and Synthetic Proofs

Euclid’s geometry is called “synthetic” geometry, as opposed to the “analytic” geometry published by Descartes in 1637 and taught today in high school algebraic courses. In analytic geometry straight lines and circles are represented by algebraic equations, a fact that misleads many students into thinking that the term “analytic” is a synonym for “algebraic”. While it is true that Descartes’s geometry is “analytic” as a consequence of its algebraic method, the term “analytic” as used in mathematics is much more general and antedates Descartes’s symbolic algebra by almost two millenia. It refers to any method of working backward by separating a statement whose proof is desired into components that are logically prior. “Synthesis”, the companion term, means proof by combining separate elements into a deductive sequence that culminates in the statement to be proved. High school algebra texts usually recommend that a student construct both proofs, the synthesis as a check that the analysis was correctly done. However most students quickly discover that in algebra analysis is practically foolproof 117

Theorems Proven Without Postulate 5

118

and abandon the synthetic check as redundant. Today’s scientific and engineering mathematics, being mostly algebraic in form, is dominated by analysis. In Greek mathematics, however, synthesis was dominant. Greek mathematics was geometric in form, and analysis is less reliable in that context. It does not proceed as automatically, with every implication reversible, as it does in solving an algebraic equation. Doubtless the Greeks used some sort of (presumably) non-algebraic analysis to discover their proofs – no mathematician can work forward all the time – but they did not consider a proof finished until it had been completely recast in synthetic form. Thus the formidability of Euclid’s proofs. They are syntheses, with the analysis omitted. The scaffolding has been removed and they stand, like the pyramids, leaving us to wonder how they were constructed.

7.2

Geometrical Graphics

Geometrical graphics is not, however, part of the proof – mathematical drawings never are. It does, however, make the reasoning easier to follows.

7.3

Theorem 1

Theorem 1 Theorem 7.1 On a given finite straight line it is possible to construct an equilateral triangle.

Proof 1. Let AB be the given finite straight line. (Hypothesis) 2. Draw a circle with center A and radius AB. (Postulate 3) 3. Draw a circle with center B and radius AB. (Postulate 3) 4. Let C be a point where the circles intersect. (Postulate 6 (2)) 5. Draw AC and BC. (Postulate 1) 6. AC = AB. (Definition “Radius”) 7. BC = AB. (Definition “Radius”) 8. AC = BC. (6, 7, Algebraic Properties) 9. ABC is an equilateral triangle. (6, 7, 8, Algebraic Properties)

Theorems Proven Without Postulate 5

119

10. Therefore, on a given finite straight line it is possible to construct an equilateral triangle. (Generalization) Postulate 1 and 3 empowered us to construct straight lines and circles. This theorem shows those postulates to be more versatile than they appear if we use them together, Apart from the standard last step the proof is in two parts. The triangle is erected in the first five steps. The next four verify that it is equilateral, as advertised. The import of Theorem 1 is of course that equilateral triangles exist. From a logical point of view it is essential to verify this if we are to have equilateral triangles available for future use. Just defining a term, as we did “equilateral triangle”, doesn’t guarantee the existence of any objects to which the term can be applied; it only tells us what to call them should we run into any. We could define a “tetraprime”, for instance, to be “a prime number dividable by 4”. We could even go on to prove theorems about tetraprimes – for example, that no tetraprime is odd, that squares of tetraprimes are always dividable by 16, etc. But we would be literally talking about nothing, as tetraprimes don’t exist. (No prime number is dividable by 4.) And were we to mistakenly assume they did exist, our arithmetic would collapse under a hail of contradictions. To avoid the possibility of either embarrassment Euclid quite sensibly proves the existence of whatever geometric objects he plans to discuss. There is a bit problem regarding Euclid’s original proof with step 4. Since he did not introduce Postulate 6, the existence of point C become the problem. Things can be named as soon as we know they exist, but how do we know point C exists? We grant that the circles interpenetrate, and in drawing it certainly looks as if they share a point, in fact two points. But “see drawing” is not a mathematically acceptable reason. A drawing is not part of a proof, only an aid of following it. And what if we had drawn a different picture? May be the points on the circles have spaces between them. The easy solution is to introduce Postulate 6 as an official record of what we already believe.

Theorem 1 in PowerEpsilon In terms of PowerEpsilon, we have dec Eq_Tri_Thm : !(a : Finite_Line) ?(t : Triangle) @(Equil_Triangle, t); Alternatively, the theorem can be expressed in terms of Point. dec Eq_Tri_Thm2 :

Theorems Proven Without Postulate 5

120

!(A : Point, B : Point) ?(C : Point) let CAB = @(TRIANGLE_SEG, C, A, B) in @(Equil_Triangle, CAB); dec Eq_Tri_Thm3 : !(A : Point, B : Point) ?(C : Point) @(Equil_Triangle2, C, A, B);

Proof in PowerEpsilon To prove the theorem Eq Tri Thm3, we need a lemma Eq Tri Lem3 specified as follows: dec Eq_Tri_Lem3 : !(A : Point, B : Point) let r1 = @(Circle_Lem01, A, B), r2 = @(Circle_Lem02, A, B), r3 = @(Circle_Lem03, A, B), r4 = @(Circle_Lem04, A, B) in let q = @(Circ_Intersect4, A, B, A, B, B, A, r2, r1, r3, r4) in let C = @(FST, q) in let ab = @(DISTANCE, A, B), bc = @(DISTANCE, B, C), ca = @(DISTANCE, C, A) in @(And0, @(RREq, ab, bc), @(RREq, bc, ca));

The lemma Eq Tri Lem3 is very easy to prove. def Eq_Tri_Lem3 = \(A : Point, B : Point) let r1 = @(Circle_Lem01, A, B), r2 = @(Circle_Lem02, A, B), r3 = @(Circle_Lem03, A, B), r4 = @(Circle_Lem04, A, B) in let q = @(Circ_Intersect4, A, B, A, B, B, A, r2, r1, r3, r4) in let C = @(FST, q), r = @(SND, q) in let ab = @(DISTANCE, A, B), ba = @(DISTANCE, B, A), bc = @(DISTANCE, B, C), cb = @(DISTANCE, C, B), ca = @(DISTANCE, C, A) in let R1 = @(On_Circle1, C, A, B), R2 = @(On_Circle1, C, B, A) in

Theorems Proven Without Postulate 5

121

let r1 = @(PRO01, R1, R2, r), r2 = @(PRO02, R1, R2, r) in let s1 = @(Distance_Symm, B, A), s2 = @(Distance_Symm, C, B), s3 = @(RRSymm, cb, ab, r2), s4 = @(RRTran, ca, ba, ab, r1, s1), s5 = @(RRTran, ab, cb, bc, s3, s2), s6 = @(RRSymm, ab, bc, s5), s7 = @(RRSymm, ca, ab, s4), s8 = @(RRTran, bc, ab, ca, s6, s7) in let S1 = @(RREq, ab, bc), S2 = @(RREq, bc, ca) in @(PRODUCT0, S1, S2, s5, s8);

With Eq Tri Lem3, we will be able to prove Eq Tri Thm3: def Eq_Tri_Thm3 = \(A : Point, B : Point) let r1 = @(Circle_Lem01, A, B), r2 = @(Circle_Lem02, A, B), r3 = @(Circle_Lem03, A, B), r4 = @(Circle_Lem04, A, B) in let q = @(Circ_Intersect4, A, B, A, B, B, A, r2, r1, r3, r4) in let C = @(FST, q) in

The correspondences between the informal and formal proofs are given as follows: 1. Let AB be the given finite sraight line. (Hypothesis) \(A : Point, B : Point) 2. Draw a circle with center A and radius AB. (Postulate 3) let r1 = @(Circle_Lem01, A, B), r3 = @(Circle_Lem03, A, B) in 3. Draw a circle with center B and radius AB. (Postulate 3) let r2 = @(Circle_Lem02, A, B), r4 = @(Circle_Lem04, A, B) in

Theorems Proven Without Postulate 5

122

4. Let C be a point where the circles intersect. (Postulate 6 (2)) let q = @(Circ_Intersect4, A, B, A, B, B, A, r2, r1, r3, r4) in let C = @(FST, q), r = @(SND, q) in

5. Draw AC and BC. (Postulate 1) let ab ba bc cb ca

= = = = =

@(DISTANCE, @(DISTANCE, @(DISTANCE, @(DISTANCE, @(DISTANCE,

A, B, B, C, C,

B), A), C), B), A) in

6. AC = AB. (Definition “Radius”) let R1 R2 let r1 r2 let s1 s2 s3 s4

= = = = = = = =

@(On_Circle1, C, A, B), @(On_Circle1, C, B, A) in @(PRO01, R1, R2, r), @(PRO02, R1, R2, r) in @(Distance_Symm, B, A), @(Distance_Symm, C, B), @(RRSymm, cb, ab, r2), @(RRTran, ca, ba, ab, r1, s1) in

7. BC = AB. (Definition “Radius”) let s5 = @(RRTran, ab, cb, bc, s3, s2), s6 = @(RRSymm, ab, bc, s5) in 8. AC = BC. (6, 7, Algebraic Properties) let s7 = @(RRSymm, ca, ab, s4), s8 = @(RRTran, bc, ab, ca, s6, s7) in 9. ABC is an equilateral triangle. (6, 7, 8, Algebraic Properties) let S1 = @(RREq, ab, bc),

Theorems Proven Without Postulate 5

123

S2 = @(RREq, bc, ca) in @(PRODUCT0, S1, S2, s5, s8); 10. Therefore, on a given finite straight line it is possible to construct an equilateral triangle. (Generalization) It is clear that steps 1-4 are for point C construction and the steps 5-10 are for verification. There is a subtlety to Postulate 3 we should take up before going on, or Theorem 2 and 3 won’t make sense. It is this: the metaphorical compass we are given to use in Postulate 3 won’t stay open. When either leg is lifted from the planet it falls shut. It can’t be used as a pair of dividers to transfer distances. That is – dropping the metaphor – Postulate 3 can be used to draw a circle with a given point as center and a given straight line as redius, only if the point is an end point of the straight line. The proposed center and radius must come already attached. In Greeks mathematics there is a difference between saying “the radius is BC” and “the radius is equal to BC”. Nowadays the distinction is lost because we tend to think of a radius as a number, a free-floating entity. According to Definition 5.15, however, a “radius” is one of the equal straight lines emanating from the center of a circle, so strictly speaking it is a geometric object and as such is tied to a particular place. Postulate 3 gives us the power to draw a circle one of whose radii is BC, so there are the two possibilities, but it doesn’t give the power to draw a circle all of whose radii are merely equal to BC. Theorem 2 and 3 say that even though the postulated compass keeps collapsing, it can still be used, albeit in a roundabout way, to do everything a normal compass can.

7.4

Theorem 2

Theorem 2 Theorem 7.2 It is possible to place at a given point as an extremity a straight line equal to a given straight line. Theorem 2 tells us how to attach, to a given point, a segment equal to a given segment located elsewhere. It doesn’t, however, allow us to control the direction in which the constructed segment will be drawn.

Theorems Proven Without Postulate 5

124

Proof 1. Let A be the given point and BC the given straight line. (Hypothesis) 2. Draw AB. (Postulate 1) 3. On AB draw an equivlateral triangle ABD. (Theorem 1) 4. Draw a circle with center B and radius BC. (Postulate 3) 5. Produce DB to a point E outside the circle. (Postulate 2) 6. BE intersects the circle in a point F. (Postulate 6 (2)) 7. Draw a circle with center D and radius DF. (Postulate 3) 8. Produce DA to a point G outside this second circle. (Postulate 2) 9. DG intersects the second circle in a point H. (Postulate 6 (2)) 10. DH = DF. (Definition of “Radius”) 11. DA = DB. (3, Definition of “Equilateral Triangle”) 12. AH = BF. (10, 11, Algebraic Properties) 13. BC = BF. (Definition of “Radius”) 14. AH = BC. (12, 13, Algebraic Properties) 15. AH has the given point A as an extremity and is equal to the given straight line BC. 16. Therefore, it is possible to place at a given point as an extremity a straight line equal to a given straight line. Like that of Theorem 1 the proof is in two parts. Step 1-9 provide the blueprint for the construction, then steps 10-15 check that the outcome AH meets specifications. Note that in step 5, Postulate 2 is invoked to prolong DB by an amount greater than radius BC of the circle. Since BC could have been any length – it was the arbitrary straight line given at the outset – apparently we can produce finite straight lines by as much as we want. They are potentially infinite. In the construction AH is an extension of DA, whose direction is fixed by the given position of A and BC, so we have no control over the direction in which AH is drawn. Notice that Postulate 3 does not allow us to draw a circle with center A and radius merely equal to BC. Now, with Theorem 2, we can: use Theorem 2 to attach to A a straight line AH = BC, then use Postulate 3 to draw a circle with center A and radius AH. As Theorem 3 will show, and you may see already, this is the key to drawing a straight line from A, equal to BC, pointing in any direction we want.

Theorems Proven Without Postulate 5

Theorem 2 in PowerEpsilon In terms of PowerEpsilon, we have dec Pnt_Lin_Thm : !(A : Point, a : Finite_Line) ?(b : Finite_Line) let A1 = @(GET_FLN_A, a), A2 = @(GET_FLN_A, b), B1 = @(GET_FLN_B, a), B2 = @(GET_FLN_B, b) in @(And1, @(Eq_Point, A, A2), @(RREq, @(DISTANCE, A1, B1), @(DISTANCE, A2, B2)));

Alternatively, there is another version of Pnt Lin Thm. dec Pnt_Lin_Thm2 : !(A : Point, B : Point, C : Point) ?(H : Point) let BC = @(DISTANCE, B, C), AH = @(DISTANCE, A, H) in @(RREq, AH, BC);

Proof in PowerEpsilon To prove Pnt Lin Thm2, we need the following lemma Pnt Lin Lem2: dec Pnt_Lin_Lem2 : !(A : Point, B : Point, C : Point) let p = @(Eq_Tri_Thm2, A, B) in let D = @(FST, p), d = @(SND, p) in let bc = @(DISTANCE, B, C) in let c = @(CIRCLE_SEG, B, bc), q = @(IIAxm23, D, B, c) in let E = @(FST, q), e = @(SND, q) in let de = @(DISTANCE, D, E), db = @(DISTANCE, D, B) in let E1 = @(RRGs, de, db), E2 = @(Outside_Circle0, E, c), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let r = @(Circ_Intersect, B, E, c, @(Circle_Lem3, B, C), e2) in let F = @(FST, r), f = @(SND, r) in

125

Theorems Proven Without Postulate 5

126

let df = @(DISTANCE, D, F) in let cc = @(CIRCLE_SEG, D, df), qq = @(IIAxm23, D, A, cc) in let G = @(FST, qq), g = @(SND, qq) in let dg = @(DISTANCE, D, G), da = @(DISTANCE, D, A) in let G1 = @(RRGs, dg, da), G2 = @(Outside_Circle0, G, cc) in let g1 = @(PRO1, G1, G2, g), g2 = @(PRO2, G1, G2, g) in let rr = @(Circ_Intersect, D, G, cc, @(Circle_Lem3, D, F), g2) in let H = @(FST, rr), h = @(SND, rr) in let bc = @(DISTANCE, B, C), ah = @(DISTANCE, A, H) in @(RREq, ah, bc);

We then will be able to show Pnt Lin Thm2: def Pnt_Lin_Thm2 = \(A : Point, B : Point, C : Point) let p = @(Eq_Tri_Thm2, A, B) in let D = @(FST, p), d = @(SND, p) in let bc = @(DISTANCE, B, C) in let c = @(CIRCLE_SEG, B, bc), q = @(IIAxm23, D, B, c) in let E = @(FST, q), e = @(SND, q) in let de = @(DISTANCE, D, E), db = @(DISTANCE, D, B) in let E1 = @(RRGs, de, db), E2 = @(Outside_Circle0, E, c), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let r = @(Circ_Intersect, B, E, c, @(Circle_Lem3, B, C), e2) in let F = @(FST, r), f = @(SND, r) in let df = @(DISTANCE, D, F) in let cc = @(CIRCLE_SEG, D, df), qq = @(IIAxm23, D, A, cc) in let G = @(FST, qq), g = @(SND, qq) in let dg = @(DISTANCE, D, G), da = @(DISTANCE, D, A) in let G1 = @(RRGs, dg, da), G2 = @(Outside_Circle0, G, cc) in let g1 = @(PRO1, G1, G2, g), g2 = @(PRO2, G1, G2, g) in let rr = @(Circ_Intersect, D, G, cc, @(Circle_Lem3, D, F), g2) in let H = @(FST, rr), h = @(SND, rr) in let bc = @(DISTANCE, B, C),

Theorems Proven Without Postulate 5

127

ah = @(DISTANCE, A, H) in ;

7.5

Theorem 3

Theorem 3 Theorem 7.3 Given two unequal straight lines, it is possible to cut off from the greater than a straight line equal to the lesser.

Proof 1. Let AD and BC be the straight lines with, say, AD greater than BC. (Hypothesis) 2. From A draw a finite straight line AE = BC. (Theorem 2) 3. Draw a circle with center A and radius AE. (Postulate 3) 4. AD > AE. (1, 2, Algebraic Properties) 5. The circle intersects AD in a point F. (Postulate 6 (2)) 6. AE = AF. (Definition of “Radius”) 7. AF = BC. (2, 6, Algebraic Properties) 8. AF has been cut off from AD and is equal to BC. (5, 7) We introduce Theorem 3 saying that, given a point A and a straight line BC, it would enable us to draw a straight line from A equal to BC and pointing in any direction we want. Suppose the direction we want is toward point Z. Draw AZ; and if AZ is not longer than BC, produce it by Postulate 2 until it is. Then use Theorem 3 to cut off AF equal to BC.

Theorem 3 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Lin Lin Thm need to be proven. dec Lin_Lin_Thm : !(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1), A2 = @(GET_FLN_A, a2),

Theorems Proven Without Postulate 5

B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> ?(C1 : Point) let d3 = @(DISTANCE, A1, C1) in @(RREq, d3, d2)];

Proof in PowerEpsilon To prove Lin Lin Thm, we need the following lemmas. dec Lin_Lin_Lem1 : !(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1), A2 = @(GET_FLN_A, a2), B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> let AB2 = @(FLINE_SEG, A2, B2) in let q = @(Pnt_Lin_Thm, A1, AB2) in let E1 = @(GET_FLN_B, @(FST, q)) in let AE1 = @(DISTANCE, A1, E1) in let p1 = @(CircAxm1, A1, AE1) in let c1 = @(FST, p1), q1 = @(SND, p1) in @(Inside_Circle0, A1, c1)]; dec Lin_Lin_Lem2 : !(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1), A2 = @(GET_FLN_A, a2), B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> let AB2 = @(FLINE_SEG, A2, B2) in let q = @(Pnt_Lin_Thm, A1, AB2) in let E1 = @(GET_FLN_B, @(FST, q)) in let AE1 = @(DISTANCE, A1, E1) in let p1 = @(CircAxm1, A1, AE1) in let c1 = @(FST, p1), q1 = @(SND, p1) in

128

Theorems Proven Without Postulate 5

@(Outside_Circle0, B1, c1)]; dec Lin_Lin_Lem3 : !(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1), A2 = @(GET_FLN_A, a2), B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in !(p : @(RRGs, d1, d2)) let AB2 = @(FLINE_SEG, A2, B2) in let q = @(Pnt_Lin_Thm, A1, AB2) in let E1 = @(GET_FLN_B, @(FST, q)) in let AE1 = @(DISTANCE, A1, E1) in let p1 = @(CircAxm1, A1, AE1) in let c1 = @(FST, p1), q1 = @(SND, p1) in let r1 = @(Lin_Lin_Lem1, a1, a2, p), r2 = @(Lin_Lin_Lem2, a1, a2, p), r3 = @(Circ_Intersect, A1, B1, c1, r1, r2) in let C1 = @(FST, r3), s = @(SND, r3) in let d3 = @(DISTANCE, A1, C1) in @(RREq, d3, d2);

We then will be able to give the proof of Lin Lin Thm. def Lin_Lin_Thm = \(a1 : Finite_Line, a2 : Finite_Line) let A1 = @(GET_FLN_A, a1), B1 = @(GET_FLN_B, a1), l1 = @(GET_FLN_LN, a1), A2 = @(GET_FLN_A, a2), B2 = @(GET_FLN_B, a2), l2 = @(GET_FLN_LN, a2) in let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in \(p : @(RRGs, d1, d2)) let AB2 = @(FLINE_SEG, A2, B2) in let q = @(Pnt_Lin_Thm, A1, AB2) in let E1 = @(GET_FLN_B, @(FST, q)) in let AE1 = @(DISTANCE, A1, E1) in let p1 = @(CircAxm1, A1, AE1) in let c1 = @(FST, p1), q1 = @(SND, p1) in let r1 = @(Lin_Lin_Lem1, a1, a2, p), r2 = @(Lin_Lin_Lem2, a1, a2, p), r3 = @(Circ_Intersect, A1, B1, c1, r1, r2) in let F = @(FST, r3), s = @(SND, r3) in

129

Theorems Proven Without Postulate 5

130

;

Some alternative versions of Lin Lin Thm can be derived as follows: dec Lin_Lin_Thm2 : !(A1 : Point, B1 : Point, A2 : Point, B2 : Point) let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> ?(C1 : Point) let d3 = @(DISTANCE, B1, C1) in @(RREq, d2, d3)]; dec Lin_Lin_Thm3 : !(A1 : Point, B1 : Point, let d1 = @(DISTANCE, A1, [@(RRGs, d1, d2) -> ?(C1 : Point) let d3 = @(DISTANCE, @(And, @(RREq, d3,

A2 : Point, B2 : Point) B1), d2 = @(DISTANCE, A2, B2) in

A1, C1) in d2), @(In_Between, C1, A1, B1))];

dec Lin_Lin_Thm4 : !(A1 : Point, B1 : Point, A2 : Point, B2 : Point) let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> ?(C1 : Point) let d3 = @(DISTANCE, C1, B1) in @(And, @(On_FLine, C1, @(FLINE_SEG, A1, B1)), @(RREq, d3, d2))]; dec Lin_Lin_Thm5 : !(A1 : Point, B1 : Point, A2 : Point, B2 : Point) let d1 = @(DISTANCE, A1, B1), d2 = @(DISTANCE, A2, B2) in [@(RRGs, d1, d2) -> ?(C1 : Point) let d3 = @(DISTANCE, A1, C1) in @(And, @(On_FLine, C1, @(FLINE_SEG, A1, B1)), @(RREq, d3, d2))]

7.6

Theorem 4

Theorem 4 Theorem 7.4 If two sides and the included angle of one triangle are equal respectively to two sides and the included angle of another triangle, then the

Theorems Proven Without Postulate 5

131

triangles are congruent. This is the first Theorem to give us power to infer rather than power to construct. Here is Euclid’s proof.

Proof 1. Let ABC and DEF be the two triangles with, say, AB = DE, AC = DF, and BAC = ̸ EDF. (Hypothesis)

̸

2. Pick up △ ABC and set it down on △ DEF so that point A coincides with point D and AB runs along DE. 3. B will coincide with E. (1 AB = DE) 4. AC will run along DF. (1 △ BAC = △ EDF) 5. C will coincide with F. (1 AC = DF) 6. There can be only one straight line joining the point B = E to the point C = F. (Postulate 1) 7. Therefore BC will coincide with EF. (6) 8. △ ABC = △ DEF, △ ACB = △ DFE, BC = EF. (Algebraic Properties) 9. Triangles ABC and DEF are congruent. (1, 8, Definition of “Congruent”) In step 2 Euclid is using “superposition”, a technique going back 300 years to Thales. In recent times, at least since 1550, superposition has been roundly criticized by mathematicians and philosophers alike as subversive of the nature of the Elements. The philosopher Arthur Schopenhauer, for example, made this observation in 1818: I am surprised that, instead of the fifth Postulate, the fourth Common Notion is not rather attacked: “Figures which coincide are equal to one another”. For coincidence is either mere tautology, or something entirely empirical, which belongs, not to pure intuition, but to external sensuous experience. — The World as Will and Idea, Book II Others objected because they saw the essence of geometry to be the comparison of figures at a distance, a program that would be vitiated if figures were carried around and compared directly; and certainly the applicability of geometry to science and engineering derived from its conclusions about figures that are inaccessible.

Theorems Proven Without Postulate 5

132

The Greeks themselves may have had misgivings. Superposition seems to have been used less and less frequently as time went on. Euclid’s own reluctance to use it in Book I is clear. There are theorems he could have proven by superposition, and such proofs would have been considerably shorter than the ones he actually presents, but he uses the technique only twice – here and in Theorem 8. The proof has a formal problem as well. Apart from the question of whether we want to allow superposition, the fact is that no Common Notion or Postulate does. Euclid gives no reason for step 2. Commentators on the Elements are agreed that he probably interpreted Common Notion 4 as permitting superposition – this is why Schopenhauer linked the two in the passage quoted above – but even so step 2 is problematic because the Common Notion doesn’t explicitly say that figures may be moved. Our own opinions is that Euclid was in blind. He needed the SAS congruence criterion, as it is fundamental to his geometric system. He could either make it a axiom and assume it, or make it a theorem and prove it. His readers would expect him to prove it, for in previous geometry books SAS had always been a theorem (proven by superposition). Besides, SAS sounded like a theorem – it didn’t have the simplicity it seemed an axiom ought to have, and Euclid knew he was already in trouble on this score with his complicated Postulate 5. No, SAS would have to be a theorem. But he could devise no proof to replace the traditional superposition proof! He could have justified his use of superposition by postulating, unequivocally, that figures may be superposed, but he didn’t want to endorse a technique that seemed inconsistent with the generally static character of his system. So he took what must have seemed the only way out: he used superposition, which he knew his readers would accept, but diplomatically called as little attention to it as possible. Complicated though the SAS criterion is, Hilbert and most other modern geometers make it an axiom. We will do the same. There is now a blank between Theorem 3 and 5. Theorem 4 has vanished, SAS has been promoted to postulate, and superposition has been banished from the system. Even so we should hang onto Euclid’s superposition argument; it won’t have the status of a proof, but it will be nice to have as an extra-systemic explanation we can show people who doubt the complicated new postulate.

7.7

Theorem 5

Theorem 5 Theorem 7.5 In isosceles triangles the angles at the base are equal to one another.

Theorems Proven Without Postulate 5

133

Proof It is amazing Euclid was able to prove this theorem so early! To see what we mean, close the book and try to invent a proof that uses only what we have done. Modern texts reverse this theorem until more tools are at hand. 1. Let ABC be an isosceles triangle with, say, AB = AC. (Hypothesis, Definition “Isosceles”) 2. Produce AB to D. (Postulate 2) 3. Produce AC to E so that CE > BD. (Postulate 2) 4. From CE cut off CF = BD. (3, Theorem 3) 5. Draw DC and FB. (Postulate 1) 6. AD = AF. (1, 4, Algebraic Properties) ̸

7.

A=

̸

A. (Algebraic Properties)

8. Triangles ABF and ADC are congruent. (1, 7, 6, SAS (Postulate 8)) ̸

9.

̸

BFC =

BDC, BF = DC. (Definition “Congruent”)

10. Triangles BCF and DBC are congruent. (4, 9, SAS) 11.

̸

ABC +

̸

CBF =

12.

̸

CBF =

̸

BCD. (10, Definition “Congruent”)

13.

̸

ABC =

̸

ACB. (11, 12, Algebraic Properties)

̸

ACB +

̸

BCD. (8, Definition “Congruent”)

14. In △ ABC the angles at the base are equal to each other. (13) Theorem 5 is said to have been proven by Thales himself. His method, however, must have been different – there is persuasive evidence in Aristotle’s Prio Analytics (I 24, 41 b 13-22) that the standard proof fifty years before Euclid had employed another, less rigorous, strategy, making it likely that the proof just rehearsed was fairly new when the Elements was composed, and may be Euclid’s own. In the late Middle Ages Theorem 5, accompanied by Euclid’s figure and proof, came to be called the Pons Asinorum, “Bridge of Asses”. The origin of this nickname seems to have had something to do with the theorem’s perceived difficulty. The figure suggests a bridge and, dependening on one’s interpretation, the “asses” were either those who were sure-footed enough to make their way safely across, or those unable to proceed.

Theorems Proven Without Postulate 5

134

Theorem 5 in PowerEpsilon In terms of PowerEpsilon, we have dec Isos_Thm : !(t : Triangle) [@(Isosc_Triangle, t) -> let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in @(Eq_Angle, ABC, BCA)]; and its alternative version in terms of Point. dec Isos_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C) in [@(RREq, @(DISTANCE, A, B), @(DISTANCE, A, C)) -> let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in @(Eq_Angle, ABC, BCA)];

Proof in PowerEpsilon In order to prove Isos Thm2, we need the following five lemmas. dec Isos_Lem21 : !(A : Point, B : Point, C : Point, D : Point, F : Point) let ab = @(DISTANCE, A, B), ac = @(DISTANCE, A, C), da = @(DISTANCE, D, A), fa = @(DISTANCE, F, A), cf = @(DISTANCE, C, F), bd = @(DISTANCE, B, D) in [@(RREq, ab, ac) -> @(RREq, cf, bd) -> @(RREq, fa, da)];

The lemma Isos Lem21 corresponds to step 6 in the informal proof. dec Isos_Lem22 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let FAB = @(ANGLE_SEG, A, F, B), DAC = @(ANGLE_SEG, A, D, C) in [@(In_Between, C, A, E) -> @(In_Between, F, C, E) -> @(In_Between, B, A, D) -> @(Eq_Angle, FAB, DAC)];

Theorems Proven Without Postulate 5

135

The lemma Isos Lem22 corresponds to step 7 in the informal proof. The step 7 says that ̸ A = ̸ A. However, the congruence of FAB and DAC is not obvious when reasoning in PowerEpsilon. dec Isos_Lem23 : !(B : Point, C : Point, D : Point, F : Point) let cf = @(DISTANCE, C, F), bd = @(DISTANCE, B, D), db = @(DISTANCE, D, B), fc = @(DISTANCE, F, C) in [@(RREq, cf, bd) -> @(RREq, fc, db)];

The lemma Isos Lem23 corresponds to a variant of step 4 in the informal proof. dec Isos_Lem24 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let BFA = @(ANGLE_SEG, F, B, A), CDA = @(ANGLE_SEG, D, C, A), BFC = @(ANGLE_SEG, F, B, C), CDB = @(ANGLE_SEG, D, C, B) in [@(Eq_Angle, BFA, CDA) -> @(In_Between, C, A, E) -> @(In_Between, F, C, E) -> @(In_Between, B, A, D) -> @(Eq_Angle, BFC, CDB)];

The lemma Isos Lem24 corresponds to step 9 in the informal proof. Graphically, it is obvious that BFA is equal to BFA and CDA is equal to CDB. However, we have to verify this when dealing with formal logic. dec Isos_Lem25 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F let ABF = @(ANGLE_SEG, B, A, F), ACD = @(ANGLE_SEG, C, A, CBF = @(ANGLE_SEG, B, C, F), BCD = @(ANGLE_SEG, C, B, ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, [@(Eq_Angle, ABF, ACD) -> @(In_Between, C, A, E) -> @(In_Between, F, C, E) -> @(In_Between, B, A, D) -> @(Eq_Angle, CBF, BCD) -> @(Eq_Angle, ABC, BCA)];

: Point) D), D), A) in

The lemma Isos Lem25 corresponds to step 13 in the informal proof. We then will be able to give the proof of Isos Thm2: def Isos_Thm2 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C),

Theorems Proven Without Postulate 5

ab = @(DISTANCE, A, B), ac = @(DISTANCE, A, C) in \(p : @(RREq, ab, ac)) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in let q = @(IIAxm2, A, B), D = @(FST, q), d = @(SND, q), r = @(IIAxm22, A, C, B, D), E = @(FST, r), e = @(SND, r) in let ce = @(DISTANCE, C, E), bd = @(DISTANCE, B, D) in let E1 = @(RRGs, ce, bd), E2 = @(In_Between, C, A, E), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let s = @(Lin_Lin_Thm3, C, E, B, D, e1), F = @(FST, s), f = @(SND, s) in let cf = @(DISTANCE, C, F) in let F1 = @(RREq, cf, bd), F2 = @(In_Between, F, C, E), f1 = @(PRO1, F1, F2, f), f2 = @(PRO2, F1, F2, f), t1 = @(Isos_Lem21, A, B, C, D, F, p, f1), t2 = @(Isos_Lem22, A, B, C, D, E, F, e2, f2, d) in let u = @(SAS_Thm3, A, B, F, A, C, D, p, t1, t2) in let u1 = @(TC_Cond1, A, B, F, A, C, D, u), u2 = @(TC_Cond2, A, B, F, A, C, D, u), u3 = @(TC_Cond3, A, B, F, A, C, D, u), u4 = @(TC_Cond4, A, B, F, A, C, D, u), u5 = @(TC_Cond5, A, B, F, A, C, D, u), u6 = @(TC_Cond6, A, B, F, A, C, D, u) in let v = @(SAS_Thm2, B, F, C, C, D, B, u2, @(Isos_Lem23, A, B, C, D, E, F, u3, e2, f2, d), @(Isos_Lem24, A, B, C, D, E, F, u5, e2, f2, d)) in let v1 = @(TC_Cond1, B, F, C, C, D, B, v), v2 = @(TC_Cond2, B, F, C, C, D, B, v),

136

Theorems Proven Without Postulate 5

137

v3 = @(TC_Cond3, B, F, C, C, D, B, v), v4 = @(TC_Cond4, B, F, C, C, D, B, v), v5 = @(TC_Cond5, B, F, C, C, D, B, v), v6 = @(TC_Cond6, B, F, C, C, D, B, v) in @(Isos_Lem25, A, B, C, D, E, F, u4, e2, f2, d, v6);

7.8

Theorem 6

Theorem 6 Theorem 7.6 If in a triangle two angles be equal to one another, the side which subtend the angles will also be equal to one another. This theorem is the first in the Elements to be proved by contradiction. It is the “converse” of Theorem 5. The converse of a conditional statement is obtained by interchanging the hypothesis and conclusion. The converse of “If H, then C” is “If C, then H”. Though they can seem to say almost the same thing, a statement and its converse say things which, logicallym are very different. For example, the converse of “‘If one is a woman then one is a human being” is “If one is a human being then one is a woman”. For this reason the converse of a theorem need not be true and, even if it is, requires its own proof. Theorem 6 is the converse of Theorem 5 because in Theorem 6 were are given a triangle with two equal angles (Theorem 5’s conclusion) and conclude that it is isosceles (Theorem 5’s hypothesis).

Proof 1. Let ABC be a triangle with, say,

̸

ACB =

̸

ABC. (Hypothesis)

2. Pretend AB ̸= AC, say AB > AC. (RAA Hypothesis) 3. From BA cut off BD = CA. (Theorem 3) 4. Draw DC. (Postulate 1) 5. BC = BC. (Algebraic Properties) 6. Triangles DBC and ACB are congruent. (3, 1, 5, SAS) 7. area of △ DBC = area of △ ACB. (6) 8. But area of △ DBC > area of △ ACB. (Algebraic Properties) 9. Contradiction. (7 and 8) 10. Therefore AB = AC. (2-9, Logic)

Theorems Proven Without Postulate 5

138

In step 2, in order to be specific, Euclid took AB > AC, so the contradiction in step 9 actually implies only that AB is not greater than AC. But he knew an argument similar to steps 2-9 could be inserted between steps 9 and 10, showing that AB is not less than AC either.

Theorem 6 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration of theorem AS Thm: dec AS_Thm : !(t : Triangle) let AB = @(GET_TRI_AB, t), BC = @(GET_TRI_BC, t), CA = @(GET_TRI_CA, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in [@(Eq_Angle, ABC, BCA) -> @(RREq, AB, CA)]; In terms of Point instead of Triangle, we have dec AS_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(Eq_Angle, ABC, BCA) -> @(RREq, AB, CA)];

Proof in PowerEpsilon In order to prove AS Thm2, we need the following three lemmas. The first lemma AS Lem21 is very easy to prove. def AS_Lem21 = \(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in

Theorems Proven Without Postulate 5

139

\(p : @(Eq_Angle, ABC, BCA)) \(q : @(RREq, AB, CA)) q;

To prove lemma AS Lem22, two lemmas are needed, namely, Ang Lin Lem and Ang Area Lem. Intuitively, these two lemmas are easy to verify with picture drawing. However, they are not logically obvious and are also not trivial to prove. dec Ang_Lin_Lem : !(A : Point, B : Point, C : Point, G : Point) let ABC = @(ANGLE_SEG, B, A, C), GBC = @(ANGLE_SEG, B, G, C) in let AB = @(FLINE_SEG, A, B) in [@(On_FLine, G, AB) -> @(Eq_Angle, GBC, ABC)];

The lemma Ang Lin Lem says that if point G is on finite straight line AB, then △ GBC = △ ABC. dec Ang_Area_Lem : !(A : Point, B : Point, C : Point, G : Point) let ACB = @(TRIANGLE_SEG, A, C, B), GBC = @(TRIANGLE_SEG, G, B, C) in let AB = @(FLINE_SEG, A, B) in let ab = @(DISTANCE, A, B), ca = @(DISTANCE, C, A), gb = @(DISTANCE, G, B) in [@(On_FLine, G, AB) -> @(RRGs, ab, ca) -> @(RREq, gb, ca) -> @(Not, @(RREq, @(TRI_AREA, GBC), @(TRI_AREA, ACB)))];

The proof of lemma AS Lemm22 is given as follows: def AS_Lem22 = \(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AC = @(DISTANCE, A, C) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), ACB = @(ANGLE_SEG, C, A, B), CAB = @(ANGLE_SEG, A, C, B) in \(p : @(Eq_Angle, ABC, BCA), q : @(RRGs, AB, CA)) let r = @(Lin_Lin_Thm4, A, B, C, A, q), D = @(FST, r), d = @(SND, r) in

Theorems Proven Without Postulate 5

let DB = @(DISTANCE, D, B) in let DBC = @(ANGLE_SEG, B, D, C) in let U1 = @(On_FLine, D, @(FLINE_SEG, A, B)), U2 = @(RREq, DB, CA) in let u1 = @(PRO1, U1, U2, d), u2 = @(PRO2, U1, U2, d) in let s = @(SAS_Thm2, D, B, C, A, C, B, @(RRTran, DB, CA, AC, u2, @(Distance_Symm, C, A)), @(Distance_Symm, B, C), @(Eq_Angle_Tran, DBC, BCA, ACB, @(Eq_Angle_Tran, DBC, ABC, BCA, @(Ang_Lin_Lem, A, B, C, D, u1), p), @(Angle_Symm, B, C, A))) in let t = @(Tri_Cong_Axm2, D, B, C, A, C, B, s), w = @(Ang_Area_Lem, A, B, C, D, u1, q, u2) in @(w, t, @(RREq, AB, CA));

The proof of lemma AS Lemm23 is given as follows: def AS_Lem23 = \(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AC = @(DISTANCE, A, C) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), ACB = @(ANGLE_SEG, C, A, B), CAB = @(ANGLE_SEG, A, C, B) in \(p : @(Eq_Angle, ABC, BCA)) \(q : @(RRLs, AB, CA)) @(RREq_Lem, A, B, C, @(AS_Lem22,

140

Theorems Proven Without Postulate 5

141

A, C, B, @(Angle_Eq_Symm0, A, B, C, p), @(RRLs_Lem, A, B, C, q)));

We then will be able to give the proof of AS Thm2: def AS_Thm2 = \(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in \(p : @(Eq_Angle, ABC, BCA)) @(WHEN31, @(RREq, AB, CA), @(RRGs, AB, CA), @(RRLs, AB, CA), @(RREq, AB, CA), @(Excl_RR, AB, CA), \(u : @(RREq, AB, CA)) @(AS_Lem21, A, B, C, p, u), \(u : @(RRGs, AB, CA)) @(AS_Lem22, A, B, C, p, u), \(u : @(RRLs, AB, CA)) @(AS_Lem23, A, B, C, p, u));

7.9

Theorem 7

Theorem 7 Theorem 7.7 Given two straight lines constructed on a straight line from it extremities and meeting in a point, there cannot be constructed on the same straight line from its extremities, and on the same side of it, two other straight lines meeting in another point and equal to the former two respectively, namely each to that which has the same extremity with it.

Proof 1. Let AC and BC be the two straight lines constructed on the straight line AB from its extremities and meeting in the point C. (Hypothesis)

Theorems Proven Without Postulate 5

142

2. Pretend there is another point D on the same side of AB as C such that when AD and BD are drawn. AD = AC and BD = BC. (RAA) 3. Draw DC. (Postulate 1) 4.

̸

ADC
@(Ls_Angle, BCD, ACD) -> @(Ls_Angle, ADC, ACD)]; dec Ls_Not_Eq : !(A : Point, C : Point, D : Point) let ADC = @(ANGLE_SEG, D, A, C), CDA = @(ANGLE_SEG, D, C, A), ACD = @(ANGLE_SEG, C, A, D) in [@(Ls_Angle, ADC, ACD) -> @(Not3, @(Eq_Angle, ACD, CDA))];

We then give the proof of two lemmas which will be used in the proof of LL Thm. def LL_Lem1 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in \(p : @(Not, @(On_FLine, C, AB))) let AC = @(DISTANCE, A, C), BC = @(DISTANCE, B, C) in let P = ?(D : Point) @(And, @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))),

Theorems Proven Without Postulate 5

@(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD)))) in \(q : P) let D = @(FST, q), d = @(SND, q) in let D1 = @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), D2 = @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD))) in let d1 = @(PRO1, D1, D2, d), d2 = @(PRO2, D1, D2, d) in let D11 = @(In_Same_FSide, C, D, AB), D12 = @(Not2, @(Eq_Point, C, D)) in let d11 = @(PRO1, D11, D12, d1), d12 = @(PRO2, D11, D12, d1) in let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in let D21 = @(Not, @(On_FLine, D, AB)), D22 = @(And, @(RREq, AC, AD), @(RREq, BC, BD)) in let d21 = @(PRO1, D21, D22, d2), d22 = @(PRO2, D21, D22, d2) in let D221 = @(RREq, AC, AD), D222 = @(RREq, BC, BD), d221 = @(PRO1, D221, D222, d22), d222 = @(PRO2, D221, D222, d22) in let ADC = @(ANGLE_SEG, D, A, C), BDC = @(ANGLE_SEG, D, B, C), ACD = @(ANGLE_SEG, C, A, D), BCD = @(ANGLE_SEG, C, B, D) in \(r : @(And, @(Ls_Angle, ADC, BDC), @(Ls_Angle, BCD, ACD))) let s1 = d221, s2 = d222 in let R1 = @(Ls_Angle, ADC, BDC), R2 = @(Ls_Angle, BCD, ACD) in let r1 = @(PRO1, R1, R2, r), r2 = @(PRO2, R1, R2, r) in let t1 = @(Isos_Thm2, B, C, D, s2), t2 = @(Ang_Ls_Eq_Tran, A, B, C, D, r1, t1), t3 = @(Ang_Ls_Tran, A, B, C, D, t2, r2), t4 = @(Isos_Thm2, A, C, D, s1), t5 = @(Ls_Not_Eq, A, C, D, t3) in @(t5, t4, @(Not1, P));

144

Theorems Proven Without Postulate 5

def LL_Lem2 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in \(p : @(Not, @(On_FLine, C, AB))) let AC = @(DISTANCE, A, C), BC = @(DISTANCE, B, C) in let P = ?(D : Point) @(And, @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD)))) in \(q : P) let D = @(FST, q), d = @(SND, q) in let D1 = @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), D2 = @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD))) in let d1 = @(PRO1, D1, D2, d), d2 = @(PRO2, D1, D2, d) in let D11 = @(In_Same_FSide, C, D, AB), D12 = @(Not2, @(Eq_Point, C, D)) in let d11 = @(PRO1, D11, D12, d1), d12 = @(PRO2, D11, D12, d1) in let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in let D21 = @(Not, @(On_FLine, D, AB)), D22 = @(And, @(RREq, AC, AD), @(RREq, BC, BD)) in let d21 = @(PRO1, D21, D22, d2), d22 = @(PRO2, D21, D22, d2) in let D221 = @(RREq, AC, AD), D222 = @(RREq, BC, BD), d221 = @(PRO1, D221, D222, d22), d222 = @(PRO2, D221, D222, d22) in let ADC = @(ANGLE_SEG, D, A, C), BDC = @(ANGLE_SEG, D, B, C), ACD = @(ANGLE_SEG, C, A, D), BCD = @(ANGLE_SEG, C, B, D) in \(r : @(And, @(Ls_Angle, BDC, ADC), @(Ls_Angle, ACD, BCD))) let s1 = d222, s2 = d221 in

145

Theorems Proven Without Postulate 5

146

let R1 = @(Ls_Angle, BDC, ADC), R2 = @(Ls_Angle, ACD, BCD) in let r1 = @(PRO1, R1, R2, r), r2 = @(PRO2, R1, R2, r) in let t1 = @(Isos_Thm2, A, C, D, s2), t2 = @(Ang_Ls_Eq_Tran, B, A, C, D, r1, t1), t3 = @(Ang_Ls_Tran, B, A, C, D, t2, r2), t4 = @(Isos_Thm2, B, C, D, s1), t5 = @(Ls_Not_Eq, B, C, D, t3) in @(t5, t4, @(Not1, P));

A special form of Excluded-Middle Rule is presented here which will also be used in the proof of LL Thm. dec Excl_Ang_Axm : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B) in [@(In_Same_FSide, C, D, AB) -> @(Not2, @(Eq_Point, C, D)) -> let ADC = @(ANGLE_SEG, D, A, C), BDC = @(ANGLE_SEG, D, B, C), ACD = @(ANGLE_SEG, C, A, D), BCD = @(ANGLE_SEG, C, B, D) in @(Or, @(And, @(Ls_Angle, ADC, BDC), @(Ls_Angle, BCD, ACD)), @(And, @(Ls_Angle, BDC, ADC), @(Ls_Angle, ACD, BCD)))];

The proof of LL Thm is a constructive one. To verify its constructive result, we need a lemma LL Lem: def LL_Lem = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in \(p : @(Not, @(On_FLine, C, AB))) let AC = @(DISTANCE, A, C), BC = @(DISTANCE, B, C) in let P = ?(D : Point) @(And, @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in

Theorems Proven Without Postulate 5

@(And, @(RREq, AC, AD), @(RREq, BC, BD)))) in \(q : P) let D = @(FST, q), d = @(SND, q) in let D1 = @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), D2 = @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD))) in let d1 = @(PRO1, D1, D2, d), d2 = @(PRO2, D1, D2, d) in let D11 = @(In_Same_FSide, C, D, AB), D12 = @(Not2, @(Eq_Point, C, D)), d11 = @(PRO1, D11, D12, d1), d12 = @(PRO2, D11, D12, d1) in let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in let D21 = @(Not, @(On_FLine, D, AB)), D22 = @(And, @(RREq, AC, AD), @(RREq, BC, BD)), d21 = @(PRO1, D21, D22, d2), d22 = @(PRO2, D21, D22, d2) in let D221 = @(RREq, AC, AD), D222 = @(RREq, BC, BD), d221 = @(PRO1, D221, D222, d22), d222 = @(PRO2, D221, D222, d22) in let ADC = @(ANGLE_SEG, D, A, C), BDC = @(ANGLE_SEG, D, B, C), ACD = @(ANGLE_SEG, C, A, D), BCD = @(ANGLE_SEG, C, B, D) in @(WHEN3, @(And, @(Ls_Angle, ADC, BDC), @(Ls_Angle, BCD, ACD)), @(And, @(Ls_Angle, BDC, ADC), @(Ls_Angle, ACD, BCD)), @(Not1, P), @(Excl_Ang_Axm, A, B, C, D, d11, d12), \(u : @(And, @(Ls_Angle, ADC, BDC), @(Ls_Angle, BCD, ACD))) @(LL_Lem1, A, B, C, p, q, u), \(u : @(And, @(Ls_Angle, BDC, ADC), @(Ls_Angle, ACD, BCD))) @(LL_Lem2, A, B, C, p, q, u));

We finally will be able to give the proof of LL Thm: def LL_Thm = \(A : Point, B : Point, C : Point)

147

Theorems Proven Without Postulate 5

148

let AB = @(FLINE_SEG, A, B) in \(p : @(Not, @(On_FLine, C, AB))) let AC = @(DISTANCE, A, C), BC = @(DISTANCE, B, C) in let P = ?(D : Point) @(And, @(And, @(In_Same_FSide, C, D, AB), @(Not2, @(Eq_Point, C, D))), @(And, @(Not, @(On_FLine, D, AB)), let AD = @(DISTANCE, A, D), BD = @(DISTANCE, B, D) in @(And, @(RREq, AC, AD), @(RREq, BC, BD)))) in @(WHEN3, P, @(Not1, P), @(Not1, P), @(Excl_Axm1, P), \(u : P) @(LL_Lem, A, B, C, p, u), \(u : @(Not1, P)) u);

7.10

Theorem 8

Theorem 8 Theorem 7.8 If the three sides of one triangle are equal respectively to the three sides of another triangle, then the triangles are congruent. Euclid’s proof involves his other use of superposition, and presents the same difficulties we discussed in connection with his proof of Theorem 4. We could avoid them, as we did in that case, by making the Theorem and axiom. This time, however, there is a less drastic measure that will suffice. We will postpone proving Theorem 8 until we have established Theorem 23, then use Theorem 23 to construct a new proof of Theorem 8 that does not involve superposition. Of course, to avoid circular reasoning, this means we will have to refrain from using SSS in the meantime.

Theorem 8 in PowerEpsilon In terms of PowerEpsilon, we have dec SSS_Thm :

Theorems Proven Without Postulate 5

149

!(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in [@(RREq, AB1, AB2) -> @(RREq, BC1, BC2) -> @(RREq, CA1, CA2) -> @(Triang_Cong, t1, t2)]; Alternatively, the theorem can be expressed in terms of Point. dec SSS_Thm2 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(RREq, AB1, AB2) -> @(RREq, BC1, BC2) -> @(RREq, CA1, CA2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)]

7.11

Theorem 9

Right now, we have the power to do five things: draw straight lines (Postulate 1), prolong them (Postulate 2), draw circles (Postulate 3), construct equilateral triangles (Theorem 1), and copy finite straight lines (Theorem 2 and 3). In the next four theorems we acquire four new powers.

Theorem 9 Theorem 7.9 It is possible to bisect a given rectilinear angle. We who have been trained to think of angles as measured by numbers, which exist in their own realm apart from geometry, find it particularly obvious that an angle can be cut into two, three, or however many equal pieces because

Theorems Proven Without Postulate 5

150

the corresponding numbers can be immediately divided by 2, 3, or any other number. To Euclid, however, the measure of an angle – he would have said its “magnitude” – was not representable outside geometry. To “bisect” an angle was to cut it in half geometrically by a straight line through the vertex. Since geometry’s existence criterion was constructability with compass and straightedge, and it is not obvious those tools are adequate to construct the straight line in question, this theorem was, in Euclid’s time, as worthy of careful proof as any other. (In fact, when the Elements was composed Greeks mathematicians had been trying without success to trisect an angle – cut it in thirds – for years! In the 19th century it was finally shown that with compass and straightedge only, most angles cannot be trisect, and Euclid’s existence criterion came to be seen as too restrictive. Under modern existence criteria angles can be cut into any number of equal pieces.) Euclid begins his proof by choosing a point “at random” on one side of the angle. He does a similar thing in the proof of Theorem 12. Metaphorically he is setting down one leg of his compass, but not quite at random because there are restrictions – here it has to land on a given straight line, and in Theorem 12 off a given infinite straight line but on a given side of it. We will acknowledge this new power of the compass by framing the Postulate 9.

Proof 1. Let BAC be the given rectlinear angle. (Hypothesis) 2. Choose a point D at random on AB. (Postulate 10 (2)) 3. Produce AC, if necessary, to make it longer than AD. (Postulate 2) 4. From AC, or AC produced, cut off AE = AD. (Theorem 3) 5. Draw DE. (Postulate 1) 6. On DE construction an equilateral triangle DEF. (Theorem 1) 7. Draw AF. (Postulate 1) 8. DF = EF. (Definition “Equilateral Triangle”) 9.

̸

ADE =

̸

AED. (4, Theorem 5)

10.

̸

FDE =

̸

FED. (8, Theorem 5)

11.

̸

ADF =

̸

AEF. (9, 10, Algebraic Properties)

12. Triangles ADF = AEF are congruent. (4, 11, 8, SAS) 13.

̸

DAF =

̸

14. AF bisects

̸

EAF. (Definition “Congruent”) BAC. (13)

Theorems Proven Without Postulate 5

151

Theorem 9 in PowerEpsilon In terms of PowerEpsilon, we have dec Bisect_Ang_Thm : !(a : Angle) ?(l : Finite_Line) @(Bisect_Angle, l, a); Alternatively, the theorem can be expressed in terms of Point. dec Bisect_Ang_Thm2 : !(A : Point, B : Point, C : Point) ?(D : Point) @(Bisect_Angle2, D, A, B, C);

Proof in PowerEpsilon To prove Bisect Ang Thm2, we need three lemmas Bisect Ang Lem21, BisectAng Lem22 and Bisect Ang Lem23. dec Bisect_Ang_Pr21 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in [@(On_FLine, D, AB) -> @(RREq, ac, ad) -> let r = @(Eq_Tri_Thm3, D, C) in let F = @(FST, r), f = @(SND, r) in @(Bisect_Angle2, F, B, A, C)]; dec Angle_Sum_Lem : !(A : Point, C : Point, D : Point, F : Point) let ACD = @(ANGLE_SEG, C, A, D), CDA = @(ANGLE_SEG, D, C, A), FCD = @(ANGLE_SEG, C, F, D), CDF = @(ANGLE_SEG, D, C, F), FDA = @(ANGLE_SEG, D, F, A), FCA = @(ANGLE_SEG, C, F, A) in [@(Eq_Angle, ACD, CDA) -> @(Eq_Angle, FCD, CDF) -> @(Eq_Angle, FDA, FCA)]; dec Dist_Eq_Symm : !(A : Point, C : Point, D : Point) let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D), ca = @(DISTANCE, C, A), da = @(DISTANCE, D, A) in [@(RREq, ac, ad) -> @(RREq, da, ca)];

Theorems Proven Without Postulate 5

dec Angle_Eq_Lem1 : !(A : Point, B : Point, C : Point, D : Point, F : Point) let AB = @(FLINE_SEG, A, B) in let DAF = @(ANGLE_SEG, A, D, F), CAF = @(ANGLE_SEG, A, C, F), BAF = @(ANGLE_SEG, A, B, F), FAC = @(ANGLE_SEG, A, F, C) in [@(On_FLine, D, AB) -> @(Eq_Angle, DAF, CAF) -> @(Eq_Angle, BAF, FAC)]; def Bisect_Ang_Pr21 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(d : @(On_FLine, D, AB), p : @(RREq, ac, ad)) let r = @(Eq_Tri_Thm3, D, C) in let F = @(FST, r), f = @(SND, r) in let dc = @(DISTANCE, D, C), cf = @(DISTANCE, C, F), fc = @(DISTANCE, F, C), fd = @(DISTANCE, F, D) in let F1 = @(RREq, fd, dc), F2 = @(RREq, dc, cf) in let f1 = @(PRO01, F1, F2, f), f2 = @(PRO02, F1, F2, f), f3 = @(RRTran, fd, dc, cf, f1, f2), f4 = @(Distance_Symm, C, F), f5 = @(RRTran, fd, cf, fc, f3, f4), f6 = @(RRSymm, fd, fc, f5), q1 = @(Isos_Thm2, A, C, D, p), q2 = @(Isos_Thm2, F, C, D, f6), r1 = @(Angle_Sum_Lem, A, C, D, F, q1, q2), r2 = @(Dist_Eq_Symm, A, C, D, p), r3 = @(SAS_Thm3, D, A, F, C, A, F, r2, f5, r1), r4 = @(TC_Cond4, D, A, F, C, A, F, r3) in @(Angle_Eq_Lem1, A, B, C, D, F, d, r4); def Bisect_Ang_Lem21 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let p = @(IAxm41, AB) in let D = @(FST, p), d = @(SND, p) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(q : @(RREq, ac, ad)) let r = @(Eq_Tri_Thm3, D, C) in let F = @(FST, r), f = @(SND, r) in ;

152

Theorems Proven Without Postulate 5

153

dec Bisect_Ang_Pr22 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in [@(On_FLine, D, AB) -> !(q : @(RRGs, ac, ad)) let s = @(Lin_Lin_Thm5, A, C, A, D, q) in let E = @(FST, s), e = @(SND, s) in let r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in @(Bisect_Angle2, F, B, A, C)]; dec Angle_Eq_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C) in let DAF = @(ANGLE_SEG, A, D, F), EAF = @(ANGLE_SEG, A, E, F), BAF = @(ANGLE_SEG, A, B, F), FAC = @(ANGLE_SEG, A, F, C) in [@(On_FLine, D, AB) -> @(On_FLine, E, AC) -> @(Eq_Angle, DAF, EAF) -> @(Eq_Angle, BAF, FAC)]; def Bisect_Ang_Pr22 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), BC = @(FLINE_SEG, B, C), ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(d : @(On_FLine, D, AB), q : @(RRGs, ac, ad)) let s = @(Lin_Lin_Thm5, A, C, A, D, q) in let E = @(FST, s), e = @(SND, s) in let ae = @(DISTANCE, A, E) in let E1 = @(On_FLine, E, AC), E2 = @(RREq, ae, ad), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in let de = @(DISTANCE, D, E), ef = @(DISTANCE, E, F), fe = @(DISTANCE, F, E), fd = @(DISTANCE, F, D) in let F1 = @(RREq, fd, de),

Theorems Proven Without Postulate 5

F2 = @(RREq, de, ef), f1 = @(PRO01, F1, F2, f), f2 = @(PRO02, F1, F2, f), f3 = @(RRTran, fd, de, ef, f1, f2), f4 = @(Distance_Symm, E, F), f5 = @(RRTran, fd, ef, fe, f3, f4), f6 = @(RRSymm, fd, fe, f5), q1 = @(Isos_Thm2, A, E, D, e2), q2 = @(Isos_Thm2, F, E, D, f6), r1 = @(Angle_Sum_Lem, A, E, D, F, q1, q2), r2 = @(Dist_Eq_Symm, A, E, D, e2), r3 = @(SAS_Thm3, D, A, F, E, A, F, r2, f5, r1), r4 = @(TC_Cond4, D, A, F, E, A, F, r3) in @(Angle_Eq_Lem2, A, B, C, D, E, F, d, e1, r4); def Bisect_Ang_Lem22 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let p = @(IAxm41, AB) in let D = @(FST, p), d = @(SND, p) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(q : @(RRGs, ac, ad)) let s = @(Lin_Lin_Thm5, A, C, A, D, q) in let E = @(FST, s), e = @(SND, s) in let r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in ; dec Bisect_Ang_Pr23 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in [@(On_FLine, D, AB) -> @(RRLs, ac, ad) -> let s = @(IIAxm21, A, C, A, D) in let G = @(FST, s), g = @(SND, s) in let ag = @(DISTANCE, A, G) in let U1 = @(RRGs, ag, ad), U2 = @(In_Between, C, A, G) in let u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let t = @(Lin_Lin_Thm5, A, G, A, D, u1) in let E = @(FST, t), e = @(SND, t) in let r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in @(Bisect_Angle2, F, B, A, C)];

154

Theorems Proven Without Postulate 5

dec Angle_Eq_Lem3 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point) let AB = @(FLINE_SEG, A, B), AG = @(FLINE_SEG, A, G) in let DAF = @(ANGLE_SEG, A, D, F), EAF = @(ANGLE_SEG, A, E, F), BAF = @(ANGLE_SEG, A, B, F), FAC = @(ANGLE_SEG, A, F, C) in [@(On_FLine, D, AB) -> @(On_FLine, E, AG) -> @(In_Between, C, A, G) -> @(Eq_Angle, DAF, EAF) -> @(Eq_Angle, BAF, FAC)]; def Bisect_Ang_Pr23 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(d : @(On_FLine, D, AB), q : @(RRLs, ac, ad)) let s = @(IIAxm21, A, C, A, D) in let G = @(FST, s), g = @(SND, s) in let AG = @(FLINE_SEG, A, G), ag = @(DISTANCE, A, G) in let U1 = @(RRGs, ag, ad), U2 = @(In_Between, C, A, G), u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let t = @(Lin_Lin_Thm5, A, G, A, D, u1) in let E = @(FST, t), e = @(SND, t) in let ae = @(DISTANCE, A, E) in let E1 = @(On_FLine, E, AG), E2 = @(RREq, ae, ad), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in let de = @(DISTANCE, D, E), ef = @(DISTANCE, E, F), fe = @(DISTANCE, F, E), fd = @(DISTANCE, F, D) in let F1 = @(RREq, fd, de), F2 = @(RREq, de, ef), f1 = @(PRO01, F1, F2, f), f2 = @(PRO02, F1, F2, f), f3 = @(RRTran, fd, de, ef, f1, f2), f4 = @(Distance_Symm, E, F), f5 = @(RRTran, fd, ef, fe, f3, f4),

155

Theorems Proven Without Postulate 5

f6 = @(RRSymm, fd, fe, f5), q1 = @(Isos_Thm2, A, E, D, e2), q2 = @(Isos_Thm2, F, E, D, f6), r1 = @(Angle_Sum_Lem, A, E, D, F, q1, q2), r2 = @(Dist_Eq_Symm, A, E, D, e2), r3 = @(SAS_Thm3, D, A, F, E, A, F, r2, f5, r1), r4 = @(TC_Cond4, D, A, F, E, A, F, r3) in @(Angle_Eq_Lem3, A, B, C, D, E, F, G, d, e1, u2, r4); def Bisect_Ang_Lem23 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let p = @(IAxm41, AB) in let D = @(FST, p), d = @(SND, p) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in \(q : @(RRLs, ac, ad)) let s = @(IIAxm21, A, C, A, D) in let G = @(FST, s), g = @(SND, s) in let ag = @(DISTANCE, A, G) in let U1 = @(RRGs, ag, ad), U2 = @(In_Between, C, A, G), u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let r = @(Lin_Lin_Thm5, A, G, A, D, u1) in let E = @(FST, r), e = @(SND, r), r = @(Eq_Tri_Thm3, D, E) in let F = @(FST, r), f = @(SND, r) in ;

We finally will be able to give the proof of Bisect Ang Thm2: def Bisect_Ang_Thm2 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C) in let p = @(IAxm41, AB) in let D = @(FST, p), d = @(SND, p) in let ac = @(DISTANCE, A, C), ad = @(DISTANCE, A, D) in @(WHEN31, @(RREq, ac, ad), @(RRGs, ac, ad), @(RRLs, ac, ad), ?(F : Point) @(Bisect_Angle2, F, B, A, C), @(Excl_RR, ac, ad), \(u : @(RREq, ac, ad)) @(Bisect_Ang_Lem21, A, B, C, u), \(u : @(RRGs, ac, ad))

156

Theorems Proven Without Postulate 5

157

@(Bisect_Ang_Lem22, A, B, C, u), \(u : @(RRLs, ac, ad)) @(Bisect_Ang_Lem23, A, B, C, u));

7.12

Theorem 10

Theorem 10 Theorem 7.10 It is possible to bisect a given finite straight line.

Proof 1. Let AB be the given finite straight line. (Hypothesis) 2. On AB construct an equilateral triangle ABC. (Theorem 1) 3. Draw CD to bisect

̸

ACB. (Theorem 9)

4. Produce CD until it intersects AB in a point E. (Postulate 2, Postulate 6 (2), Postulate 1) 5. AC = BC. (Definition “Equilateral Triangle”) 6. CE = CE. (Algebraic Properties) 7.

̸

ACE =

̸

BCE are congruent. (5, 3, 6, SAS)

8. AE = EB. (Definition “Congruent”) 9. E bisects AB. (8) Note that while the “bisector” of an angle is a straight line, the “bisector” of a finite straight line is just a point. You may have been puzzled by the reason for step 4. When late 19th-century geometers went over the Elements with a fine-toothed comb looking for logical crevices, one dismaying discovery was of how frequently Euclid was guilty of reasoning from the diagram. The very presence of geometrical diagrams is in fact the reason so many of Euclid’s tacit assumptions lay unnoticed for so long. Using a diagram to follow an argument, we (Euclid too) unconsciously accept as proven any extra assertions it may make about the we are studying. These assertions are subtle because they are made, and accepted, without ever being put into words. Step 4 is a good example.

Theorems Proven Without Postulate 5

158

Theorem 10 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Bisect Lin Thm need to be proven. dec Bisect_Lin_Thm : !(a : Finite_Line) ?(E : Point) @(Bisect_FLine, E, a); Alternatively, the theorem can be expressed in terms of Point. dec Bisect_Lin_Thm2 : !(A : Point, B : Point) ?(E : Point) @(Bisect_FLine2, E, A, B);

Proof in PowerEpsilon To prove Bisect Lin Thm2, we need two lemmas, namely, Bisect Lin Lem21 and Bisect Lin Lem22. dec Bisect_Lin_Lem21 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B) in [@(Equil_Triangle2, C, A, B) -> @(Bisect_Angle2, D, A, C, B) -> ?(E : Point) let CE = @(FLINE_SEG, C, E) in @(JP_FLine, E, CE, AB)]; The lemma Bisect Lin Lem21 corresponds to step 4. dec Bisect_Lin_Lem22 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), CE = @(FLINE_SEG, C, E) in [@(Equil_Triangle2, C, A, B) -> @(Bisect_Angle2, D, A, C, B) -> @(JP_FLine, E, CE, AB) -> @(Bisect_FLine2, E, A, B)]; The lemma Bisect Lin Lem22 is the verification part of the proof. Its proof is given as follows:

Theorems Proven Without Postulate 5

def Bisect_Lin_Lem22 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), CE = @(FLINE_SEG, C, E) in \(p1 : @(Equil_Triangle2, C, A, B), p2 : @(Bisect_Angle2, D, A, C, B), p3 : @(JP_FLine, E, CE, AB)) let ca = @(DISTANCE, C, A), ac = @(DISTANCE, A, C), ab = @(DISTANCE, A, B), bc = @(DISTANCE, B, C), ce = @(DISTANCE, C, E), ae = @(DISTANCE, A, E), ea = @(DISTANCE, E, A), eb = @(DISTANCE, E, B) in let U1 = @(RREq, ca, ab), U2 = @(RREq, ab, bc) in let u1 = @(PRO01, U1, U2, p1), u2 = @(PRO02, U1, U2, p1) in let v1 = @(RRTran, ca, ab, bc, u1, u2), v2 = @(Distance_Symm, A, C), v3 = @(RRTran, ac, ca, bc, v2, v1), v4 = @(RRRefl, ce) in let ACD = @(ANGLE_SEG, C, A, D), DCB = @(ANGLE_SEG, C, D, B), BCD = @(ANGLE_SEG, C, B, D) in let w1 = @(Angle_Symm, D, C, B), w2 = @(Eq_Angle_Tran, ACD, DCB, BCD, p2, w1), w3 = @(Bisect_Lin_Lem20, A, B, C, D, E, w2, p3), w4 = @(SAS_Thm2, A, C, E, B, C, E, v3, v4, w3), w5 = @(TC_Cond3, A, C, E, B, C, E, w4), w6 = @(Distance_Symm, A, E), w7 = @(RRTran, ae, ea, eb, w6, w5) in let R1 = @(On_FLine, E, CE), R2 = @(On_FLine, E, AB), R3 = @(RREq, ae, eb) in let r1 = @(PRO1, R1, R2, p3), r2 = @(PRO2, R1, R2, p3) in @(PRODUCT, R2, R3, r2, w7);

We then will be able to give the proof for Bisect Lin Thm2. def Bisect_Lin_Thm2 = \(A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in let p = @(Eq_Tri_Thm3, A, B) in let C = @(FST, p), q = @(SND, p) in let r = @(Bisect_Ang_Thm2, C, A, B) in let D = @(FST, r), s = @(SND, r) in let u = @(Bisect_Lin_Lem21, A, B, C, D, q, s) in let E = @(FST, u), v = @(SND, u) in ;

159

Theorems Proven Without Postulate 5

7.13

160

Theorem 11

Our earlier discussions involving the notion of “right angle” were contingent, for their significance, on the existence of right angles, something that so far has not been explicitly established, though a pair did make an unacknowledged appearance in the proof of Theorem 10. Theorem 11 exploits the same idea to tie up this loose end.

Theorem 11 Theorem 7.11 It is possible to draw a straight line at right angles to a given straight line from a given point on it.

Proof 1. Let AB be the given straight line with C the given point on it. (Hypothesis) 2. Choose D at random on AC. (Postulate 10 (2)) 3. Produce CB, if necessary, to make it longer than DC. (Postulate 2) 4. From CB, or CB produced, cut off CE = DC. (Theorem 3) 5. On DE construct an equilateral triangle FDC. (Theorem 1) 6. Draw FC. (Postulate 1) 7. FD = FE. (Definition “Equilateral Triangle”) ̸

8.

̸

FDC =

FEC. (Theorem 5)

9. Triangles FDC and FEC are congruent. (7, 8, 4, SAS) 10.

̸

FCD =

̸

FCE. (Definition “Congruent”)

11. FC is at right angles to AB. (10, Definition “Right Angle”)

Theorem 11 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Right Ang Thm and Right Ang Thm2 need to be proven. dec Right_Ang_Thm : !(C : Point, a : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a) in [@(On_FLine, C, a) -> ?(F : Point) let a1 = @(ANGLE_SEG, C, F, A),

Theorems Proven Without Postulate 5

a2 = @(ANGLE_SEG, C, F, B) in @(At_Right_Angle, a1, a2)]; Alternatively, the theorem can be expressed in terms of Point. dec Right_Ang_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> ?(F : Point) @(At_Right_Angle2, F, C, A, B)];

Proof in PowerEpsilon The proofs are typically constructive. dec Right_Ang_Lem1 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in [@(On_FLine, C, AB) -> let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in !(s : @(RRGs, cb, dc)) let t = @(Lin_Lin_Thm3, C, B, D, C, s) in let E = @(FST, t), u = @(SND, t) in let CE = @(FLINE_SEG, C, E) in let ce = @(DISTANCE, C, E) in let v = @(Eq_Tri_Thm2, D, E) in let F = @(FST, v), w = @(SND, v) in @(At_Right_Angle2, F, C, A, B)]; dec Right_Ang_Lem2 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in [@(On_FLine, C, AB) -> let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C),

161

Theorems Proven Without Postulate 5

cb = @(DISTANCE, C, B) in [@(RRLs, cb, dc) -> let a = @(IIAxm21, C, B, D, C) in let G = @(FST, a), g = @(SND, a) in let cg = @(DISTANCE, C, G) in let U1 = @(RRGs, cg, dc), U2 = @(In_Between, B, C, G) in let u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let t = @(Lin_Lin_Thm3, C, G, D, C, u1) in let E = @(FST, t), u = @(SND, t) in let CE = @(FLINE_SEG, C, E) in let ce = @(DISTANCE, C, E) in let v = @(Eq_Tri_Thm2, D, E) in let F = @(FST, v), w = @(SND, v) in @(At_Right_Angle2, F, C, A, B)]]; dec Right_Ang_Lem3 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in [@(On_FLine, C, AB) -> let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in [@(RREq, cb, dc) -> let v = @(Eq_Tri_Thm2, D, B) in let F = @(FST, v), w = @(SND, v) in @(At_Right_Angle2, F, C, A, B)]]; def Right_Ang_Thm21 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in \(p : @(On_FLine, C, AB)) let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in \(s : @(RREq, cb, dc)) let v = @(Eq_Tri_Thm2, D, B) in let F = @(FST, v), w = @(SND, v) in

162

Theorems Proven Without Postulate 5

163

; def Right_Ang_Thm22 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in \(p : @(On_FLine, C, AB)) let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in \(s : @(RRGs, cb, dc)) let t = @(Lin_Lin_Thm3, C, B, D, let E = @(FST, t), u = @(SND, t) let CE = @(FLINE_SEG, C, E) in let ce = @(DISTANCE, C, E) in let v = @(Eq_Tri_Thm2, D, E) in let F = @(FST, v), w = @(SND, v) ;

def Right_Ang_Thm23 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), CB = @(FLINE_SEG, C, B) in \(p : @(On_FLine, C, AB)) let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in \(s : @(RRLs, cb, dc)) let a = @(IIAxm21, C, B, D, C) in let G = @(FST, a), g = @(SND, a) in let cg = @(DISTANCE, C, G) in let U1 = @(RRGs, cg, dc), U2 = @(In_Between, B, C, G) in let u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let t = @(Lin_Lin_Thm3, C, G, D, C, u1), E = @(FST, t), u = @(SND, t) in let CE = @(FLINE_SEG, C, E), ce = @(DISTANCE, C, E) in let v = @(Eq_Tri_Thm2, D, E),

Theorems Proven Without Postulate 5

164

F = @(FST, v), w = @(SND, v) in ; def Right_Ang_Thm2 = \(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in \(p : @(On_FLine, C, AB)) let q = @(IAxm41, AB) in let D = @(FST, q), r = @(SND, q) in let DC = @(FLINE_SEG, D, C) in let dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in @(WHEN31, @(RREq, cb, dc), @(RRGs, cb, dc), @(RRLs, cb, dc), ?(F : Point) @(At_Right_Angle2, @(Excl_RR, cb, dc), \(u : @(RREq, cb, dc)) @(Right_Ang_Thm21, A, B, C, p, \(u : @(RRGs, cb, dc)) @(Right_Ang_Thm22, A, B, C, p, \(u : @(RRLs, cb, dc)) @(Right_Ang_Thm23, A, B, C, p,

7.14

F, C, A, B),

u), u), u))

Theorem 12

Theorem 12 Theorem 7.12 To a given infinite straight line, from a given point which is not on it, it is possible to draw a perpendicular straight line. Having just learned to construct a perpendicular “from the bottom up”, we now learn to do so “from the top down”. Euclid makes the straight line infinite to be sure the portion on which the perpendicular will land has already been drawn.

Proof 1. Let AB be the infinite straight line and C the point not on it. (Hypothesis) 2. Choose a point D at random on the other side of AB. (Postulate 10 (4)) 3. Draw CD. (Postulate 1) 4. CD intersects AB in a point E. (Postulate 7 (2))

Theorems Proven Without Postulate 5

165

5. Draw a circle with center C and radius CD. (Postulate 3) 6. EB intersects the circle in a point F. (Postulate 6 (2)) 7. FE produced (i.e., FA) intersects the circle in a point G. (Postulate 6 (3)) 8. Bisect GF at H. (Theorem 10) 9. Draw CG, CF and CH. (Postulate 1) 10. CG = CF. (Definition “Radius”) ̸

11.

̸

CGH =

CFH. (Theorem 5)

12. Triangles CGH abd CFH are congruent. (10, 11, 8, SAS) 13.

̸

CHG =

̸

CHF. (Definition “Congruent”)

14. CH is perpendicular to AB. (Definition “Perpendicular”)

Theorem 12 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Perpend Thm and Perpend Thm2 need to be proven. dec Perpend_Thm : !(C : Point, a : Finite_Line) [@(Not, @(On_FLine, C, a)) -> ?(b : Finite_Line) @(Perpend_FLine, b, a)]; Alternatively, the theorem can be expressed in terms of Point. dec Perpend_Thm2 : !(C : Point, A : Point, B let AB = @(FLINE_SEG, A, [@(Not, @(On_FLine, C, ?(H : Point) @(Perpend_FLine2, C,

: Point) B) in AB)) -> H, A, B)];

Proof in PowerEpsilon This is also a constructive proof. dec Perpend_Lem21 : !(C : Point, A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in [@(Not, @(On_FLine, C, AB)) ->

Theorems Proven Without Postulate 5

let q = @(IAxm44, C, AB) in let D = @(FST, q), E = @(FST, @(SND, q)), r = @(SND, @(SND, q)) in let cd = @(DISTANCE, C, D) in let circ = @(CIRCLE_SEG, C, cd) in @(Inside_Circle0, E, circ)]; dec Perpend_Lem22 : !(C : Point, A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in [@(Not, @(On_FLine, C, AB)) -> let q = @(IAxm44, C, AB) in let D = @(FST, q), E = @(FST, @(SND, q)), r = @(SND, @(SND, q)) in let cd = @(DISTANCE, C, D) in let circ = @(CIRCLE_SEG, C, cd) in @(Outside_Circle0, B, circ)]; dec Perpend_Lem23 : !(C : Point, A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in !(p : @(Not, @(On_FLine, C, AB))) let q = @(IAxm44, C, AB) in let D = @(FST, q), E = @(FST, @(SND, q)), r = @(SND, @(SND, q)) in let cd = @(DISTANCE, C, D) in let circ = @(CIRCLE_SEG, C, cd) in let s1 = @(Perpend_Lem21, C, A, B, p), s2 = @(Perpend_Lem22, C, A, B, p) in let s = @(Circ_Intersect, E, B, circ, s1, s2) in let F = @(FST, s), f = @(SND, s) in let U1 = @(In_Between, F, E, B), U2 = @(On_Circle0, F, circ) in let f1 = @(PRO1, U1, U2, f), f2 = @(PRO2, U1, U2, f) in let u = @(Circ_Intersect2, F, E, circ, f2, s1) in let G = @(FST, u), g = @(SND, u) in let V1 = @(On_Circle0, G, circ), V2 = @(In_Between, E, F, G) in let g1 = @(PRO1, V1, V2, g), g2 = @(PRO2, V1, V2, g) in let v = @(Bisect_Lin_Thm2, G, F) in let H = @(FST, v), h = @(SND, v) in @(Perpend_FLine2, C, H, A, B);

166

Theorems Proven Without Postulate 5

167

def Perpend_Thm2 = \(C : Point, A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in \(p : @(Not, @(On_FLine, C, AB))) let q = @(IAxm44, C, AB) in let D = @(FST, q), E = @(FST, @(SND, q)), r = @(SND, @(SND, q)) in let cd = @(DISTANCE, C, D) in let circ = @(CIRCLE_SEG, C, cd) in let s1 = @(Perpend_Lem21, C, A, B, p), s2 = @(Perpend_Lem22, C, A, B, p) in let s = @(Circ_Intersect, E, B, circ, s1, s2) in let F = @(FST, s), f = @(SND, s) in let U1 = @(In_Between, F, E, B), U2 = @(On_Circle0, F, circ) in let f1 = @(PRO1, U1, U2, f), f2 = @(PRO2, U1, U2, f) in let u = @(Circ_Intersect2, F, E, circ, f2, s1) in let G = @(FST, u), g = @(SND, u) in let V1 = @(On_Circle0, G, circ), V2 = @(In_Between, E, F, G) in let g1 = @(PRO1, V1, V2, g), g2 = @(PRO2, V1, V2, g) in let v = @(Bisect_Lin_Thm2, G, F), H = @(FST, v), h = @(SND, v) in ;

7.15

Theorem 13

Theorem 13 Theorem 7.13 If a straight line set up on a straight line make angles, it will make either two right angles or angles equal to two right angles. Euclid’s careful distinction between the possibilities reflects his altitude that an angle’s magnitude is somehow attached to the specific angle itself and cannot be discussed independently as we would a number. The discussion, no longer considered important, is left behind if we rephrase the theorem in the customary way: “Supplementary angles add up to 180o ”. Though the significance of Theorem 13 depends on Theorem 11 and Postulate 4 – because it requires the existence and constancy of 180o as a standard to which angle-sums can be referred – you may think we have had possession

Theorems Proven Without Postulate 5

168

of at least the bold truth of the theorem since the Definition of “right angle”. Admittedly, if the straight line set up on the other makes angles that are equal, we have; but should the angles be unequal, we have not. Only with Theorem 11 have we acquired the tool crucial to interring that the space occupied by two unequal angles can also be occupied by two right angles.

Proof 1. Let AB be the straight line set up on the straight line CD, making the angles ABC and ABD. (Hypothesis) 2. If ̸ ABC = Angle”)

̸

ABD then AB makes two right angles. (Definition “Right

3. If ̸ ABC ̸= ̸ ABD, say (Theorem 11) ̸

ABC >

4.

̸

ABC =

̸

EBC +

̸

ABE,

5.

̸

ABC +

̸

ABD =

̸

EBC +

6.

̸

ABE +

̸

ABD =

̸

EBD,

7.

̸

ABC +

̸

ABD =

̸

EBC +

8.

̸

EBC and

̸

̸

̸

ABD, draw BE at right angles to CD. ̸

ABD = ̸

ABD. (Algebraic Properties)

̸

ABE +

̸

EBC =

̸

̸

ABD. (4, Algebraic Properties) EBC. (Algebraic Properties)

EBD. (5, 7, Algebraic Properties)

EBD are right angles. (3)

9. Therefore, AB makes angles equal to two right angles. (8, 9)

Theorem 13 in PowerEpsilon In terms of PowerEpsilon, we have dec Ang_Sum_Thm : !(a : Finite_Line, b : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b) in [@(JP_FLine, B, a, b) -> let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let d1 = @(GET_ANGLE, ABC), d2 = @(GET_ANGLE, ABD) in @(RREq, @(RRADD, d1, d2), RRPI)]; Alternatively, the theorem can be expressed in terms of Point. dec Ang_Sum_Thm2 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B),

Theorems Proven Without Postulate 5

169

CD = @(FLINE_SEG, C, D) in [@(JP_FLine, B, AB, CD) -> let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let d1 = @(GET_ANGLE, ABC), d2 = @(GET_ANGLE, ABD) in @(RREq, @(RRADD, d1, d2), RRPI)];

Proof in PowerEpsilon The following axiom establishing the relationship between right angles and 180o . It says that if ̸ ABC and ̸ ABD are at right angles, then the sum of their degree is equal to 180o . dec Right_Angle_Axm : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let d1 = @(GET_ANGLE, ABC), d2 = @(GET_ANGLE, ABD) in [@(At_Right_Angle2, A, B, C, D) -> @(RREq, @(RRADD, d1, d2), RRPI)];

To prove Ang Sum Thm2, we need the following three lemmas: Ang Sum Lem21, Ang Sum Lem22 and Ang Sum Lem23. dec Ang_Sum_Lem21 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in [@(JP_FLine, B, AB, CD) -> let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in [@(And, @(Eq_Angle, ABC, RIGHT_ANGLE), @(Eq_Angle, ABD, RIGHT_ANGLE)) -> @(RREq, @(RRADD, abc, abd), RRPI)]]; def Ang_Sum_Lem21 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in \(p : @(JP_FLine, B, AB, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in \(q : @(And,

Theorems Proven Without Postulate 5

@(Eq_Angle, ABC, RIGHT_ANGLE), @(Eq_Angle, ABD, RIGHT_ANGLE))) @(Right_Angle_Axm, A, B, C, D, q); dec Ang_Sum_Lem1 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in !(p : @(On_FLine, B, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in [@(Gs_Angle, ABC, ABD) -> let r = @(Right_Ang_Thm2, C, D, B, p) in let E = @(FST, r), s = @(SND, r) in let EBA = @(ANGLE_SEG, B, E, A), EBC = @(ANGLE_SEG, B, E, C), EBD = @(ANGLE_SEG, B, E, D) in let eba = @(GET_ANGLE, EBA), ebc = @(GET_ANGLE, EBC), ebd = @(GET_ANGLE, EBD) in @(RREq, @(RRADD, abc, abd), @(RRADD, ebc, ebd))]; dec Ang_Sum_Lem2 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in !(p : @(On_FLine, B, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in [@(Ls_Angle, ABC, ABD) -> let r = @(Right_Ang_Thm2, C, D, B, p) in let E = @(FST, r), s = @(SND, r) in let EBA = @(ANGLE_SEG, B, E, A), EBC = @(ANGLE_SEG, B, E, C), EBD = @(ANGLE_SEG, B, E, D) in let eba = @(GET_ANGLE, EBA), ebc = @(GET_ANGLE, EBC), ebd = @(GET_ANGLE, EBD) in @(RREq, @(RRADD, abc, abd), @(RRADD, ebc, ebd))]; def Ang_Sum_Lem22 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B),

170

Theorems Proven Without Postulate 5

CD = @(FLINE_SEG, C, D) in \(p : @(On_FLine, B, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in \(q : @(Gs_Angle, ABC, ABD)) let r = @(Right_Ang_Thm2, C, D, B, p) in let E = @(FST, r), s = @(SND, r) in let EBA = @(ANGLE_SEG, B, E, A), EBC = @(ANGLE_SEG, B, E, C), EBD = @(ANGLE_SEG, B, E, D) in let eba = @(GET_ANGLE, EBA), ebc = @(GET_ANGLE, EBC), ebd = @(GET_ANGLE, EBD) in let u = @(Ang_Sum_Lem1, A, B, C, D, p, q), v = @(Right_Angle_Axm, E, B, C, D, s) in @(RRTran, @(RRADD, abc, abd), @(RRADD, ebc, ebd), RRPI, u, v); def Ang_Sum_Lem23 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in \(p : @(On_FLine, B, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in \(q : @(Ls_Angle, ABC, ABD)) let r = @(Right_Ang_Thm2, C, D, B, p) in let E = @(FST, r), s = @(SND, r) in let EBA = @(ANGLE_SEG, B, E, A), EBC = @(ANGLE_SEG, B, E, C), EBD = @(ANGLE_SEG, B, E, D) in let eba = @(GET_ANGLE, EBA), ebc = @(GET_ANGLE, EBC), ebd = @(GET_ANGLE, EBD) in let u = @(Ang_Sum_Lem2, A, B, C, D, p, q), v = @(Right_Angle_Axm, E, B, C, D, s) in @(RRTran, @(RRADD, abc, abd), @(RRADD, ebc, ebd),

171

Theorems Proven Without Postulate 5

172

RRPI, u, v);

The following is a special form of Excluded-Middle Rule defined on angles. dec Excl_Ang : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in @(Sum3, @(And, @(Eq_Angle, ABC, RIGHT_ANGLE), @(Eq_Angle, ABD, RIGHT_ANGLE)), @(Gs_Angle, ABC, ABD), @(Ls_Angle, ABC, ABD));

We then will be able to prove the theorem Ang Sum Thm2. def Ang_Sum_Thm2 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in \(p : @(JP_FLine, B, AB, CD)) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let abc = @(GET_ANGLE, ABC), abd = @(GET_ANGLE, ABD) in let U = @(On_FLine, B, AB), V = @(On_FLine, B, CD) in let p1 = @(PRO1, U, V, p), p2 = @(PRO2, U, V, p) in @(WHEN3, @(And, @(Eq_Angle, ABC, RIGHT_ANGLE), @(Eq_Angle, ABD, RIGHT_ANGLE)), @(Gs_Angle, ABC, ABD), @(Ls_Angle, ABC, ABD), @(RREq, @(RRADD, abc, abd), RRPI), @(Excl_Ang, A, B, C, D), \(u : @(And, @(Eq_Angle, ABC, RIGHT_ANGLE), @(Eq_Angle, ABD, RIGHT_ANGLE))) @(Ang_Sum_Lem21, A, B, C, D, p, u), \(u : @(Gs_Angle, ABC, ABD)) @(Ang_Sum_Lem22, A, B, C, D, p2, u), \(u : @(Ls_Angle, ABC, ABD))

Theorems Proven Without Postulate 5

173

@(Ang_Sum_Lem23, A, B, C, D, p2, u));

Two variants of theorem Ang Sum Thm2 are described as follows. They will be used in the proofs of subsequent theorems. dec Ang_Sum_Thm3 : !(A : Point, B : Point, c : Finite_Line) let AB = @(FLINE_SEG, A, B) in [@(JP_FLine, B, AB, c) -> let C = @(GET_FLN_A, c), D = @(GET_FLN_B, c) in let CBA = @(ANGLE_SEG, B, C, A), DBA = @(ANGLE_SEG, B, D, A) in let d1 = @(GET_ANGLE, CBA), d2 = @(GET_ANGLE, DBA) in @(RREq, @(RRADD, d1, d2), RRPI)]; dec Ang_Sum_Thm4 : !(A : Point, B : Point, c : Finite_Line) let AB = @(FLINE_SEG, A, B) in [@(JP_FLine, B, AB, c) -> let C = @(GET_FLN_A, c), D = @(GET_FLN_B, c) in let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in let d1 = @(GET_ANGLE, ABC), d2 = @(GET_ANGLE, ABD) in @(RREq, @(RRADD, d2, d1), RRPI)];

7.16

Theorem 14

Neither Theorem 14, which is the converse of Theorem 13, nor Theorem 15, attributed to Thales, is difficult to prove. For each we shall start the proof and leave the rest as an exercise.

Theorem 14 Theorem 7.14 If with any straight line, and at point on it, two straight lines not lying on the same side make the adjacent angles equal to two right angles, then the two straight lines will be in a straight line with one another.

Proof 1. Let AB be the straight line and C the point on it at which the two straight lines DC and EC, not lying on the same side of AB, make the adjacent angles DCA and ECA add up to 180o . (Hypothesis) 2. Pretend DCE is not single straight line. (RAA)

Theorems Proven Without Postulate 5

174

3. Produce DC in a straight line to F. (Postulate 2) 4. Now use Theorem 13 and some algebraic properties to derive a contradiction.

Theorem 14 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Cros_Thm : !(a : Finite_Line) !(C : Point, D : Point, E : Point) [@(On_FLine, C, a) -> @(In_Diff_FSide2, D, E, a) -> let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a) in let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in [@(RREq, @(RRADD, d1, d2), RRPI) -> @(JP_FLine, C, AC, DE)]];

Alternatively, the theorem can be expressed in terms of Point. dec Lin_Cros_Thm2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> @(In_Diff_FSide2, D, E, AB) -> let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in [@(RREq, @(RRADD, d1, d2), RRPI) -> @(JP_FLine, C, AC, DE)]];

Proof in PowerEpsilon First, we need the following three auxiliary lemmas which are straightforward to prove. dec On_JF_Lem : !(A : Point, B : Point, D let AB = @(FLINE_SEG, A, AC = @(FLINE_SEG, A, DF = @(FLINE_SEG, D,

: Point, F : Point, C : Point) B), C), F) in

Theorems Proven Without Postulate 5

175

[@(On_FLine, C, AB) -> @(In_Between, C, D, F) -> @(JP_FLine, C, AC, DF)]; dec Ang_NEq_Lem1 : !(A : Point, C : Point, D : Point, E : Point, F : Point) let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E), ACF = @(ANGLE_SEG, C, A, F) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE), d3 = @(GET_ANGLE, ACF) in [@(RRGs, d2, d3) -> @(RREq, @(RRADD, d1, d3), RRPI) -> @(Not, @(RREq, @(RRADD, d1, d2), RRPI))]; dec Ang_NEq_Lem2 : !(A : Point, C : Point, D : Point, E : Point, F : Point) let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E), ACF = @(ANGLE_SEG, C, A, F) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE), d3 = @(GET_ANGLE, ACF) in [@(RRLs, d2, d3) -> @(RREq, @(RRADD, d1, d3), RRPI) -> @(Not, @(RREq, @(RRADD, d1, d2), RRPI))];

We then need to prove main lemmas which are important for proving LinCros Thm2. def Lin_Cros_Lem21 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B) in \(p1 : @(On_FLine, C, AB), p2 : @(In_Diff_FSide2, D, E, AB)) let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in \(p3 : @(RREq, @(RRADD, d1, d2), RRPI)) \(q : @(Not, @(JP_FLine, C, AC, DE))) let r = @(IIAxm2, D, C) in let F = @(FST, r), f = @(SND, r) in let DF = @(FLINE_SEG, D, F) in let ACF = @(ANGLE_SEG, C, A, F) in let s1 = @(On_JF_Lem, A, B, D, F, C, p1, f),

Theorems Proven Without Postulate 5

176

s2 = @(Ang_Sum_Thm2, A, C, D, F, s1) in let d3 = @(GET_ANGLE, ACF) in \(t : @(RRGs, d2, d3)) let u = @(Ang_NEq_Lem1, A, C, D, E, F, t, s2) in @(u, p3, @(JP_FLine, C, AC, DE)); def Lin_Cros_Lem22 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B) in \(p1 : @(On_FLine, C, AB), p2 : @(In_Diff_FSide2, D, E, AB)) let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in \(p3 : @(RREq, @(RRADD, d1, d2), RRPI)) \(q : @(Not, @(JP_FLine, C, AC, DE))) let r = @(IIAxm2, D, C) in let F = @(FST, r), f = @(SND, r) in let DF = @(FLINE_SEG, D, F) in let ACF = @(ANGLE_SEG, C, A, F) in let s1 = @(On_JF_Lem, A, B, D, F, C, p1, f), s2 = @(Ang_Sum_Thm2, A, C, D, F, s1) in let d3 = @(GET_ANGLE, ACF) in \(t : @(RRLs, d2, d3)) let u = @(Ang_NEq_Lem2, A, C, D, E, F, t, s2) in @(u, p3, @(JP_FLine, C, AC, DE));

The following Excluded-Middle Rule is quite special. dec Excl_Angle_Axm : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E), ACF = @(ANGLE_SEG, C, A, F) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE), d3 = @(GET_ANGLE, ACF) in [@(On_FLine, C, AB) -> @(In_Diff_FSide2, D, E, AB) -> @(Not, @(JP_FLine, C, AC, DE)) -> @(Or, @(RRGs, d2, d3), @(RRLs, d2, d3))];

We finally will be able to give the proof of Lin Cros Thm2.

Theorems Proven Without Postulate 5

def Lin_Cros_Lem2 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B) in \(p1 : @(On_FLine, C, AB), p2 : @(In_Diff_FSide2, D, E, AB)) let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in \(p3 : @(RREq, @(RRADD, d1, d2), RRPI)) \(q : @(Not, @(JP_FLine, C, AC, DE))) let r = @(IIAxm2, D, C), F = @(FST, r), f = @(SND, r) in let DF = @(FLINE_SEG, D, F) in let ACF = @(ANGLE_SEG, C, A, F) in let s1 = @(On_JF_Lem, A, B, D, F, C, p1, f), s2 = @(Ang_Sum_Thm2, A, C, D, F, s1), d3 = @(GET_ANGLE, ACF) in @(WHEN, @(RRGs, d2, d3), @(RRLs, d2, d3), @(JP_FLine, C, AC, DE), @(Excl_Angle_Axm, A, B, C, D, E, F, p1, p2, q), \(u : @(RRGs, d2, d3)) @(Lin_Cros_Lem21, A, B, C, D, E, p1, p2, p3, q, u), \(u : @(RRLs, d2, d3)) @(Lin_Cros_Lem22, A, B, C, D, E, p1, p2, p3, q, u)); def Lin_Cros_Thm2 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B) in \(p1 : @(On_FLine, C, AB), p2 : @(In_Diff_FSide2, D, E, AB)) let AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in let ACD = @(ANGLE_SEG, C, A, D), ACE = @(ANGLE_SEG, C, A, E) in let d1 = @(GET_ANGLE, ACD), d2 = @(GET_ANGLE, ACE) in \(p3 : @(RREq, @(RRADD, d1, d2), RRPI)) @(WHEN, @(JP_FLine, C, AC, DE), @(Not, @(JP_FLine, C, AC, DE)), @(JP_FLine, C, AC, DE), @(Excl_Axm, @(JP_FLine, C, AC, DE)), \(u : @(JP_FLine, C, AC, DE)) u, \(u : @(Not, @(JP_FLine, C, AC, DE)))

177

Theorems Proven Without Postulate 5

178

let v = @(Lin_Cros_Lem2, A, B, C, D, E, p1, p2, p3, u) in @(u, v, @(JP_FLine, C, AC, DE)));

7.17

Theorem 15

Theorem 15 Theorem 7.15 If two straight lines cut one another, they make the vertical angles equal to one another.

Proof 1. Let AB and CD be the straight lines that cut one another at E. (Hypothesis) 2.

̸

AED = ̸ CEB and ̸ AEC = ̸ DEB. (Theorem 13 and Algebraic Properties)

Theorem 15 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Ang_Thm : !(a : Finite_Line, b : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b) in !(E : Point) [@(JP_FLine, E, a, b) -> let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D) in @(And, @(Eq_Angle, AED, BEC), @(Eq_Angle, AEC, BED))];

Alternatively, the theorem can be expressed in terms of Point. dec Lin_Ang_Thm2 : !(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in !(E : Point) [@(JP_FLine, E, AB, CD) -> let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D) in @(And, @(Eq_Angle, AED, BEC), @(Eq_Angle, AEC, BED))];

Theorems Proven Without Postulate 5

Proof in PowerEpsilon dec Lin_Ang_Lem1 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in [@(JP_FLine, E, AB, CD) -> let AE = @(FLINE_SEG, A, E) in @(JP_FLine, E, AE, CD)]; dec Lin_Ang_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D), DEA = @(ANGLE_SEG, E, D, A), CEB = @(ANGLE_SEG, E, C, B), CEA = @(ANGLE_SEG, E, C, A), DEB = @(ANGLE_SEG, E, D, B) in let TAED = @(GET_ANGLE, AED), TBEC = @(GET_ANGLE, BEC), TAEC = @(GET_ANGLE, AEC), TBED = @(GET_ANGLE, BED), TDEA = @(GET_ANGLE, DEA), TCEB = @(GET_ANGLE, CEB), TCEA = @(GET_ANGLE, CEA), TDEB = @(GET_ANGLE, DEB) in [@(RREq, @(RRADD, TAEC, TAED), RRPI) -> @(RREq, @(RRADD, TCEB, TCEA), RRPI) -> @(RREq, @(RRADD, TBED, TBEC), RRPI) -> @(RREq, @(RRADD, TDEA, TDEB), RRPI) -> @(And, @(Eq_Angle, AED, BEC), @(Eq_Angle, AEC, BED))];

To prove Lin Ang Lem2, we need the following two trivial lemmas. dec RREq_Add_Lem1 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D), DEA = @(ANGLE_SEG, E, D, A), CEB = @(ANGLE_SEG, E, C, B), CEA = @(ANGLE_SEG, E, C, A), DEB = @(ANGLE_SEG, E, D, B) in let TAED = @(GET_ANGLE, AED),

179

Theorems Proven Without Postulate 5

TBEC = @(GET_ANGLE, BEC), TAEC = @(GET_ANGLE, AEC), TBED = @(GET_ANGLE, BED), TDEA = @(GET_ANGLE, DEA), TCEB = @(GET_ANGLE, CEB), TCEA = @(GET_ANGLE, CEA), TDEB = @(GET_ANGLE, DEB) in [@(RREq, @(RRADD, TAEC, TAED), @(RRADD, TCEB, TCEA)) -> @(Eq_Angle, AED, BEC)]; dec RREq_Add_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D), DEA = @(ANGLE_SEG, E, D, A), CEB = @(ANGLE_SEG, E, C, B), CEA = @(ANGLE_SEG, E, C, A), DEB = @(ANGLE_SEG, E, D, B) in let TAED = @(GET_ANGLE, AED), TBEC = @(GET_ANGLE, BEC), TAEC = @(GET_ANGLE, AEC), TBED = @(GET_ANGLE, BED), TDEA = @(GET_ANGLE, DEA), TCEB = @(GET_ANGLE, CEB), TCEA = @(GET_ANGLE, CEA), TDEB = @(GET_ANGLE, DEB) in [@(RREq, @(RRADD, TBED, TBEC), @(RRADD, TDEA, TDEB)) -> @(Eq_Angle, AEC, BED)];

The proof of Lin Ang Lem2 is given as follows: def Lin_Ang_Lem2 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AED = @(ANGLE_SEG, E, A, D), BEC = @(ANGLE_SEG, E, B, C), AEC = @(ANGLE_SEG, E, A, C), BED = @(ANGLE_SEG, E, B, D), DEA = @(ANGLE_SEG, E, D, A), CEB = @(ANGLE_SEG, E, C, B), CEA = @(ANGLE_SEG, E, C, A), DEB = @(ANGLE_SEG, E, D, B) in let TAED = @(GET_ANGLE, AED), TBEC = @(GET_ANGLE, BEC), TAEC = @(GET_ANGLE, AEC), TBED = @(GET_ANGLE, BED),

180

Theorems Proven Without Postulate 5

181

TDEA = @(GET_ANGLE, DEA), TCEB = @(GET_ANGLE, CEB), TCEA = @(GET_ANGLE, CEA), TDEB = @(GET_ANGLE, DEB) in \(p1 : @(RREq, @(RRADD, TAEC, TAED), RRPI), p2 : @(RREq, @(RRADD, TCEB, TCEA), RRPI), p3 : @(RREq, @(RRADD, TBED, TBEC), RRPI), p4 : @(RREq, @(RRADD, TDEA, TDEB), RRPI)) let q1 = @(RREq_Lem1, @(RRADD, TAEC, TAED), @(RRADD, TCEB, TCEA), RRPI, p1, p2), q2 = @(RREq_Lem1, @(RRADD, TBED, TBEC), @(RRADD, TDEA, TDEB), RRPI, p3, p4) in let U = @(Eq_Angle, AED, BEC), V = @(Eq_Angle, AEC, BED) in let u = @(RREq_Add_Lem1, A, B, C, D, E, q1), v = @(RREq_Add_Lem2, A, B, C, D, E, q2) in @(PRODUCT, U, V, u, v);

The following three lemmas describing the properties of joint-point of finite straight lines. dec JP_FLine_LemX1 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), BA = @(FLINE_SEG, B, A) in [@(JP_FLine, E, AB, CD) -> @(JP_FLine, E, CD, BA)]; dec JP_FLine_LemX2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), BA = @(FLINE_SEG, B, A), DC = @(FLINE_SEG, D, C) in [@(JP_FLine, E, AB, CD) -> @(JP_FLine, E, BA, DC)]; dec JP_FLine_LemX3 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B),

Theorems Proven Without Postulate 5

182

CD = @(FLINE_SEG, C, D), DC = @(FLINE_SEG, D, C) in [@(JP_FLine, E, AB, CD) -> @(JP_FLine, E, DC, AB)];

The proof of Lin Ang Thm2 is then presented as follows: def Lin_Ang_Thm2 = \(A : Point, B : Point, C : Point, D : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D) in \(E : Point, p : @(JP_FLine, E, AB, CD)) let o1 = @(JP_FLine_LemX1, A, B, C, D, E, p), o2 = @(JP_FLine_LemX2, A, B, C, D, E, p), o3 = @(JP_FLine_LemX3, A, B, C, D, E, p) in let p1 = @(Lin_Ang_Lem1, A, B, C, D, E, p), p2 = @(Lin_Ang_Lem1, C, D, B, A, E, o1), p3 = @(Lin_Ang_Lem1, B, A, D, C, E, o2), p4 = @(Lin_Ang_Lem1, D, C, A, B, E, o3) in let q1 = @(Ang_Sum_Thm2, A, E, C, D, p1), q2 = @(Ang_Sum_Thm2, C, E, B, A, p2), q3 = @(Ang_Sum_Thm2, B, E, D, C, p3), q4 = @(Ang_Sum_Thm2, D, E, A, B, p4) in @(Lin_Ang_Lem2, A, B, C, D, E, q1, q2, q3, q4);

7.18

Theorem 16

Theorem 16 Theorem 7.16 In any triangle, if one of the sides be produced, the exterior angle is greater than either of the interior and opposite angles.

Proof 1. Let ABC be the triangle with, say, BC produced to D. (Hypothesis) 2. Bisect AC at E. (Theorem 10) 3. Draw BE. (Postulate 1) 4. Produce BE to F so that EF > BE. (Postulate 2) 5. From EF cut off EG = BE. (Theorem 3) 6. Draw GC. (Postulate 1) 7.

̸

AEB =

̸

GEC. (Theorem 15)

8. Triangles AEB and GEC are congruent. (2, 7, 5, SAS)

Theorems Proven Without Postulate 5

9.

̸

BAC =

̸

ACG. (Definition “Congruent”)

10.

̸

ACD >

̸

ACG. (Algebraic Properties)

11.

̸

ACD >

̸

BAC. (9, 10, Algebraic Properties)

183

Theorem 16 in PowerEpsilon In terms of PowerEpsilon, we have dec Tri_Ext_Thm : !(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in !(D : Point) [@(In_Between, C, B, D) -> let ACD = @(ANGLE_SEG, C, A, D) in @(And, @(Gs_Angle, ACD, CAB), @(Gs_Angle, ACD, ABC))];

Alternatively, the theorem can be expressed in terms of Point. dec Tri_Ext_Thm2 : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in [@(In_Between, C, B, D) -> @(And, @(Gs_Angle, ACD, CAB), @(Gs_Angle, ACD, ABC))];

Proof in PowerEpsilon dec JP_FL_Lem : !(A : Point, B : Point, C : Point, E : Point, F : Point, G : Point) let AC = @(FLINE_SEG, A, C), BG = @(FLINE_SEG, B, G) in [@(Bisect_FLine2, E, A, C) -> @(In_Between, E, B, F) -> @(In_Between, G, E, F) -> @(JP_FLine, E, AC, BG)];

Theorems Proven Without Postulate 5

184

The following lemmas are redundant for verifying that ec and ce are equal. dec Eq_FL_Lem1 : !(A : Point, C : Point, E : Point) let ae = @(DISTANCE, A, E), ec = @(DISTANCE, E, C), ce = @(DISTANCE, C, E) in [@(RREq, ae, ec) -> @(RREq, ae, ce)]; dec Eq_FL_Lem2 : !(B : Point, G : Point, E : Point) let be = @(DISTANCE, B, E), eb = @(DISTANCE, E, B), eg = @(DISTANCE, E, G) in [@(RREq, eg, be) -> @(RREq, eb, eg)];

The following lemma is also easy to prove if the proof is carried out graphically. dec Ang_Ext_Lin : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point) let AC = @(FLINE_SEG, A, C) in let BAE = @(ANGLE_SEG, A, B, E), GCE = @(ANGLE_SEG, C, G, E), ACD = @(ANGLE_SEG, C, A, D), CAB = @(ANGLE_SEG, A, C, B) in [@(In_Between, C, B, D) -> @(On_FLine, E, AC) -> @(In_Between, E, B, F) -> @(In_Between, G, E, F) -> @(Eq_Angle, BAE, GCE) -> @(Gs_Angle, ACD, CAB)];

The following are two main lemmas for proving Tri Ext Thm2. def Tri_Ext_Lem21 = \(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in \(p : @(In_Between, C, B, D)) let q = @(Bisect_Lin_Thm2, A, C), E = @(FST, q), e = @(SND, q) in let ae = @(DISTANCE, A, E),

Theorems Proven Without Postulate 5

ec = @(DISTANCE, E, C), be = @(DISTANCE, B, E) in let E1 = @(On_FLine, E, @(FLINE_SEG, A, C)), E2 = @(RREq, ae, ec), e1 = @(PRO1, E1, E2, e), e2 = @(PRO2, E1, E2, e) in let r = @(IIAxm22, B, E, B, E), F = @(FST, r), f = @(SND, r) in let ef = @(DISTANCE, E, F) in let F1 = @(RRGs, ef, be), F2 = @(In_Between, E, B, F), f1 = @(PRO1, F1, F2, f), f2 = @(PRO2, F1, F2, f) in let s = @(Lin_Lin_Thm3, E, F, B, E, f1), G = @(FST, s), g = @(SND, s) in let eg = @(DISTANCE, E, G) in let G1 = @(RREq, eg, be), G2 = @(In_Between, G, E, F), g1 = @(PRO1, G1, G2, g), g2 = @(PRO2, G1, G2, g) in let t = @(JP_FL_Lem, A, B, C, E, F, G, e, f2, g2), u = @(Lin_Ang_Thm2, A, C, B, G, E, t) in let AEG = @(ANGLE_SEG, E, A, G), CEB = @(ANGLE_SEG, E, C, B), AEB = @(ANGLE_SEG, E, A, B), CEG = @(ANGLE_SEG, E, C, G) in let U1 = @(Eq_Angle, AEG, CEB), U2 = @(Eq_Angle, AEB, CEG), u1 = @(PRO1, U1, U2, u), u2 = @(PRO2, U1, U2, u) in let v = @(SAS_Thm2, A, E, B, C, E, G, @(Eq_FL_Lem1, A, C, E, e2), @(Eq_FL_Lem2, B, G, E, g1), u2) in let v6 = @(TC_Cond6, A, E, B, C, E, G, v) in @(Ang_Ext_Lin, A, B, C, D, E, F, G, p, e1, f2, g2, v6); dec Tri_Ext_Lem22 : !(A : Point, B : Point, C : Point, D : Point)

185

Theorems Proven Without Postulate 5

let ABC = @(ANGLE_SEG, BCA = @(ANGLE_SEG, CAB = @(ANGLE_SEG, ACD = @(ANGLE_SEG, [@(In_Between, C, B,

B, C, A, C, D)

A, B, C, A, ->

186

C), A), B), D) in @(Gs_Angle, ACD, ABC)];

We finally will be give the proof of Tri Ext Thm2. def Tri_Ext_Thm2 = \(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in \(p : @(In_Between, C, B, D)) let U = @(Gs_Angle, ACD, CAB), V = @(Gs_Angle, ACD, ABC) in let u = @(Tri_Ext_Lem21, A, B, C, D, p), v = @(Tri_Ext_Lem22, A, B, C, D, p) in @(PRODUCT, U, V, u, v);

Theorem 16 is called the “Exterior Angle Theorem”. It is frequently useful, though the opportunities are easy to overlook.

7.19

Theorem 17

Theorem 17 Theorem 7.17 In any triangle two angles taken together in any manner are less than two right angles. That is, the sum of any two angles of a triangle is less than 180◦ . In the context of a straight line falling on two others this is the converse of Postulate 5. Postulate 5 says that if ̸ 1+ ̸ 2 < 180◦ then the straight lines will meet, forming a triangle. Theorem 17 says that if a triangle is formed then ̸ 1 + ̸ 2 < 180◦ .

Proof 1. Let ABC be a triangle with, say ̸ ABC and ̸ ACB the two angles. (Hypothesis) 2. Produce BC to D. (Postulate 2)

Theorems Proven Without Postulate 5

Theorem 17 in PowerEpsilon dec Tri_AAA_Thm : !(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in @(And, @(RRLs, @(RRADD, bca, abc), RRPI), @(And, @(RRLs, @(RRADD, abc, cab), RRPI), @(RRLs, @(RRADD, cab, bca), RRPI)));

Alternatively, the theorem can be expressed in terms of Point. dec Tri_AAA_Thm2 : !(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in @(And, @(RRLs, @(RRADD, bca, abc), RRPI), @(And, @(RRLs, @(RRADD, abc, cab), RRPI), @(RRLs, @(RRADD, cab, bca), RRPI)));

Proof in PowerEpsilon dec Tri_AAA_Lem2 : !(A : Point, B : Point, let ABC = @(ANGLE_SEG, BCA = @(ANGLE_SEG, CAB = @(ANGLE_SEG, ACD = @(ANGLE_SEG, let abc = @(GET_ANGLE,

C : Point, D : Point) B, A, C), C, B, A), A, C, B), C, A, D) in ABC),

187

Theorems Proven Without Postulate 5

bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in [@(In_Between, C, B, D) -> @(Gs_Angle, ACD, CAB) -> @(Gs_Angle, ACD, ABC) -> @(RRLs, @(RRADD, abc, cab), RRPI)]; def Tri_AAA_Lem21 = \(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in let p = @(IIAxm2, B, C) in let D = @(FST, p), d = @(SND, p) in let q = @(Tri_Ext_Thm2, A, B, C, D, d) in let ACD = @(ANGLE_SEG, C, A, D) in let D1 = @(Gs_Angle, ACD, CAB), D2 = @(Gs_Angle, ACD, ABC) in let d1 = @(PRO1, D1, D2, q), d2 = @(PRO2, D1, D2, q) in @(Tri_AAA_Lem2, A, B, C, D, d, d1, d2); def Tri_AAA_Lem22 = \(A : Point, B : Point, C : Point) @(Tri_AAA_Lem21, B, C, A); def Tri_AAA_Lem23 = \(A : Point, B : Point, C : Point) @(Tri_AAA_Lem21, C, A, B); def Tri_AAA_Thm2 = \(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in let U1 = @(RRLs, @(RRADD, bca, abc), RRPI), U2 = @(RRLs, @(RRADD, abc, cab), RRPI), U3 = @(RRLs, @(RRADD, cab, bca), RRPI) in let u1 = @(Tri_AAA_Lem22, A, B, C), u2 = @(Tri_AAA_Lem21, A, B, C), u3 = @(Tri_AAA_Lem23, A, B, C) in

188

Theorems Proven Without Postulate 5

189

@(PRODUCT, U1, @(And, U2, U3), u1, @(PRODUCT, U2, U3, u2, u3));

7.20

Theorem 18

Theorem 18 and 19 complete the stories begun in Theorem 5 and 6 respectively. In Theorem 5 we were given that two sides of a triangle were equal, and in Theorem 6 that two angles were equal; Theorem 18 and 19 tell us what can be deduced if two sides or two angles are unequal.

Theorem 18 Theorem 7.18 In any triangle the greater side subtends the greater angle.

Proof 1. Let ABC be a triangle with, say, AC > AB. (Hypothesis) 2. From AC cut off AD = AB. (Theorem 3) 3. Draw BD. (Postulate 1) 4.

̸

ABC >

̸

ABD. (Algebraic Properties)

5.

̸

ABD =

̸

ADB. (Theorem 5)

6.

̸

ABC >

̸

ADB. (4, 5, Algebraic Properties)

7.

̸

ABD >

̸

ACB. (Theorem 16 (△ DBC))

8. Therefore

̸

ABC >

̸

ACB. (6, 7, Algebraic Properties)

Theorem 18 in PowerEpsilon In terms of PowerEpsilon, we have dec Tri_SA_Thm : !(t : Triangle) let AB = @(GET_TRI_AB, t), BC = @(GET_TRI_BC, t), CA = @(GET_TRI_CA, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t),

Theorems Proven Without Postulate 5

CAB = @(GET_TRI_CAB, t) in [@(RRGs, CA, AB) -> @(Gs_Angle, ABC, BCA)];

Alternatively, the theorem can be expressed in terms of Point. dec Tri_SA_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(RRGs, AC, AB) -> @(Gs_Angle, ABC, BCA)]

Proof in PowerEpsilon dec Tri_SA_Lem1 : !(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in !(p : @(RRGs, ca, ab)) let q = @(Lin_Lin_Thm2, C, A, A, B, p) in let D = @(FST, q) in @(In_Between, D, C, A); dec Tri_SA_Lem2 : !(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in !(p : @(RRGs, ca, ab)) let q = @(Lin_Lin_Thm2, C, A, A, B, p) in let D = @(FST, q) in let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D) in @(Gs_Angle, ABC, ABD); dec Tri_SA_Lem3 :

190

Theorems Proven Without Postulate 5

191

!(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in !(p : @(RRGs, ca, ab)) let q = @(Lin_Lin_Thm2, C, A, A, B, p) in let D = @(FST, q) in let BDA = @(ANGLE_SEG, D, B, A), BCD = @(ANGLE_SEG, C, B, D), BCA = @(ANGLE_SEG, C, B, A) in [@(Gs_Angle, BDA, BCD) -> @(Gs_Angle, BDA, BCA)];

Two additional lemmas are needed. The first one, Angle GE Lem, describes the transitive property for Gs Angle and Eq Angle. dec Angle_GE_Lem : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), ABD = @(ANGLE_SEG, B, A, D), BDA = @(ANGLE_SEG, D, B, A) in [@(Gs_Angle, ABC, ABD) -> @(Eq_Angle, ABD, BDA) -> @(Gs_Angle, ABC, BDA)];

The second one, Angle Tran Lem, describe the transitive property of GsAngle. dec Angle_Tran_Lem : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), BDA = @(ANGLE_SEG, D, B, A), BCA = @(ANGLE_SEG, C, B, A) in [@(Gs_Angle, ABC, BDA) -> @(Gs_Angle, BDA, BCA) -> @(Gs_Angle, ABC, BCA)];

We finally will be able to give the proof of Tri SA Thm. def Tri_SA_Thm = \(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in

Theorems Proven Without Postulate 5

192

let ab = @(GET_TRI_AB, t), bc = @(GET_TRI_BC, t), ca = @(GET_TRI_CA, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CA = @(FLINE_SEG, C, A) in \(p : @(RRGs, ca, ab)) let q = @(Lin_Lin_Thm2, C, A, A, B, p) in let D = @(FST, q), r = @(SND, q) in let u = @(Isos_Thm2, A, B, D, r), v = @(Tri_SA_Lem1, t, p), w = @(Tri_Ext_Thm2, B, C, D, A, v), x = @(Tri_SA_Lem2, t, p), y = @(Angle_GE_Lem, A, B, C, D, x, u) in let BDA = @(ANGLE_SEG, D, B, A), DBC = @(ANGLE_SEG, B, D, C), BCD = @(ANGLE_SEG, C, B, D) in let W1 = @(Gs_Angle, BDA, DBC), W2 = @(Gs_Angle, BDA, BCD) in let w1 = @(PRO1, W1, W2, w), w2 = @(PRO2, W1, W2, w) in let z = @(Tri_SA_Lem3, t, p, w2) in @(Angle_Tran_Lem, A, B, C, D, y, z);

7.21

Theorem 19

Theorem 19 Theorem 7.19 In any triangle the greater angle is subtended by the greater side. This is of course the converse of Theorem 18. The two are easily confused because this theorem’s passive construction (“is subtended by”) tempts us to interpret it as Theorem 18. Just remember that in each theorem the first ting mentioned is the hypothesis.

Proof 1. Let AB be a triangle with, say

̸

ABC >

2. Pretend AC = AB. (RAA Hypothesis) 3. Then

̸

ABC =

̸

ACB. (Theorem 5)

̸

ACB. (Hypothesis)

Theorems Proven Without Postulate 5

193

4. Contradiction. (1 and 3) 5. Therefore AC ̸= AB. (2-4, Logic) 6. Now pretend AC < AB. (RAA Hypothesis) 7. Then

̸

ABC
AB. (5, 9, Algebraic Properties) This kind of proof is called proof “by double contradiction”. Euclid wants AC > AB. Unable to prove this directly, he sets out to disprove the alternatives instead. But pursuing them leads him down dissimilar paths, so both contradictions have to be explicitly derived.

Theorem 19 in PowerEpsilon In terms of PowerEpsilon, we have dec Tri_AS_Thm : !(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in [@(Gs_Angle, ABC, BCA) -> @(RRLs, AB, AC)]; Alternatively, the theorem can be expressed in terms of Point. dec Tri_AS_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(Gs_Angle, ABC, BCA) -> @(RRLs, AB, AC)];

Theorems Proven Without Postulate 5

194

Proof in PowerEpsilon First, we need two propositions relating Eq Angle and Gs Angle. dec Angle_Eq_Not_Gs : !(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(Eq_Angle, ABC, BCA) -> @(Not, @(Gs_Angle, ABC, BCA))]; dec Angle_Gs_Not_Gs : !(A : Point, B : Point, C : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(Gs_Angle, BCA, ABC) -> @(Not, @(Gs_Angle, ABC, BCA))];

To prove Tri AS Thm, two lemmas are needed, namely, Tri AS Lem1 and Tri AS Lem2. def Tri_AS_Lem1 = \(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in \(p : @(Gs_Angle, ABC, BCA)) \(q : @(RREq, AB, AC)) let r = @(Angle_Eq_Not_Gs, A, B, C, @(Isos_Thm2, A, B, C, q)) in @(r, p, @(Not, @(RREq, AB, AC))); def Tri_AS_Lem2 = \(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t) in let CBA = @(ANGLE_SEG, B, C, A), ACB = @(ANGLE_SEG, C, A, B) in \(p : @(Gs_Angle, ABC, BCA)) \(q : @(RRGs, AB, AC)) let r = @(Tri_SA_Thm2, A, C, B, q) in

Theorems Proven Without Postulate 5

195

let s = @(Gs_Angle_Cong, ACB, BCA, CBA, ABC, @(Angle_Symm, A, C, B), @(Angle_Symm, C, B, A), r) in let u = @(Angle_Gs_Not_Gs, A, B, C, s) in @(u, p, @(Not, @(RRGs, AB, AC)));

The following is a special form of Excluded-Middle Rule defined on finite straight lines. dec Excl_FLine : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in @(Sum3, @(RREq, AB, AC), @(RRGs, AB, AC), @(RRLs, AB, AC));

We then will be able to give the proof of Tri AS Thm. def Tri_AS_Thm = \(t : Triangle) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let AB = @(DISTANCE, A, B), AC = @(DISTANCE, A, C) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in \(p : @(Gs_Angle, ABC, BCA)) @(WHEN3, @(RREq, AB, AC), @(RRGs, AB, AC), @(RRLs, AB, AC), @(RRLs, AB, AC), @(Excl_FLine, A, B, C), \(u : @(RREq, AB, AC)) let r = @(Tri_AS_Lem1, t, p, u) in @(r, u, @(RRLs, AB, AC)), \(v : @(RRGs, AB, AC)) let r = @(Tri_AS_Lem2, t, p, v) in @(r, v, @(RRLs, AB, AC)), \(w : @(RRLs, AB, AC)) w);

Theorems Proven Without Postulate 5

7.22

196

Theorem 20

Theorem 20 Theorem 7.20 In any triangle two sides taken together in any manner are greater than the remaining one. That is, the sum of any two sides of a triangle is greater than the third side. This theorem is called the “Triangle Inequality”.

Proof 1. Let ABC be a triangle with, say, AB and AC the two sides. (Hypothesis) 2. Produce BA to D so that AD > AC. (Postulate 2) 3. From AD cut off AE = AC. (Theorem 3) 4. Draw EC. (Postulate 1) 5. AB + AC > BC. Theorem 20 is the closest Euclid ever comes to saying “a straight line is the shortest path between two points”, though this is often ascribed to him. It was the habit of the Epicureans, says, Proclus, to ridicule this theorem as being evident even to an ass and requiring no proof, and their allegation that the theorem was “known” even to an ass was based on the fact that, if fodder is placed at one angular point and te ass at another, he does not, in order to get his food, traverse the two sides of the triangle but only the one side separating them .... Proclus replies truly that a mere perception of the truth of the theorem is a different thing from a scientific proof of it and a knowledge of the reason why it is true. Moreover ... the number of axioms should not be increased without necessity. — Sir Thomas L. Heath in Euclid, page 287

Theorem 20 in PowerEpsilon In terms of PowerEpsilon, we have dec Tri_SSS_Thm : !(t : Triangle) let AB = @(GET_TRI_AB, t), BC = @(GET_TRI_BC, t), CA = @(GET_TRI_CA, t) in

Theorems Proven Without Postulate 5

197

@(And, @(RRGs, @(RRADD, AB, BC), CA), @(And, @(RRGs, @(RRADD, AB, CA), BC), @(RRGs, @(RRADD, BC, CA), AB))); Alternatively, the theorem can be expressed in terms of Point. dec Tri_SSS_Thm2 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in @(And, @(RRGs, @(RRADD, AB, BC), CA), @(And, @(RRGs, @(RRADD, AB, CA), BC), @(RRGs, @(RRADD, BC, CA), AB)));

Proof in PowerEpsilon To prove Tri SSS Thm2, we need to prove three theorems Tri SSS Thm21, TriSSS Thm22, and Tri SSS Thm23. dec Tri_SSS_Thm21 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in @(RRGs, @(RRADD, AB, BC), CA); dec Tri_SSS_Thm22 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in @(RRGs, @(RRADD, AB, CA), BC); dec Tri_SSS_Thm23 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in @(RRLs, @(RRADD, BC, CA), AB);

Theorems Proven Without Postulate 5

198

We will give here the proof of Tri SSS Thm22 only. Before proving it, we present first a trivial lemma In Between Lem which states a transitive property of predicate In Between. dec In_Between_Lem : !(A : Point, B : Point, D : Point, E : Point) [@(In_Between, A, B, D) -> @(In_Between, E, A, D) -> @(In_Between, A, B, E)];

Four lemmas are needed to prove Tri SSS Thm22. dec Tri_SSS_Lem221 : !(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in ?(D : Point) let AD = @(DISTANCE, A, D) in @(And, @(In_Between, A, B, D), @(RRGs, AD, CA)); dec Tri_SSS_Lem222 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AE = @(DISTANCE, A, E) in [@(In_Between, A, B, D) -> @(In_Between, E, A, D) -> @(RREq, AE, CA) -> let BCE = @(ANGLE_SEG, C, B, E), CEB = @(ANGLE_SEG, E, C, B) in @(Gs_Angle, BCE, CEB)]; dec Tri_SSS_Lem223 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AE = @(DISTANCE, A, E), BE = @(DISTANCE, B, E) in [@(In_Between, A, B, E) -> @(RREq, AE, CA) -> @(RRLs, BC, BE) -> @(RRGs, @(RRADD, AB, CA), BC)]; dec Tri_SSS_Lem224 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(DISTANCE, A, B),

Theorems Proven Without Postulate 5

199

BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AE = @(DISTANCE, A, E) in [@(In_Between, A, B, D) -> @(In_Between, E, A, D) -> @(RREq, AE, CA) -> @(RRGs, @(RRADD, AB, CA), BC)]; def Tri_SSS_Lem224 = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A), AE = @(DISTANCE, A, E), CE = @(DISTANCE, C, E) in \(p1 : @(In_Between, A, B, D), p2 : @(In_Between, E, A, D), p3 : @(RREq, AE, CA)) let q1 = @(In_Between_Lem, A, B, D, E, p1, p2), q2 = @(Tri_SSS_Lem222, A, B, C, D, E, p1, p2, p3), q3 = @(Tri_AS_Thm2, B, C, E, q2) in @(Tri_SSS_Lem223, A, B, C, D, E, q1, p3, q3);

We finally are able to give the proof of Tri SSS Thm22. def Tri_SSS_Thm22 = \(A : Point, B : Point, C : Point) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let p = @(Tri_SSS_Lem221, A, B, C) in let D = @(FST, p), q = @(SND, p) in let AD = @(DISTANCE, A, D) in let U = @(In_Between, A, B, D), V = @(RRGs, AD, CA) in let u = @(PRO1, U, V, q), v = @(PRO2, U, V, q) in let r = @(Lin_Lin_Thm3, A, D, C, A, v) in let E = @(FST, r), s = @(SND, r) in let AE = @(DISTANCE, A, E) in let S1 = @(RREq, AE, CA), S2 = @(In_Between, E, A, D) in let s1 = @(PRO1, S1, S2, s), s2 = @(PRO2, S1, S2, s) in @(Tri_SSS_Lem224, A, B, C, D, E, u, s2, s1);

7.23

Theorem 23

We are going to pass over Theorem 21 and 22 because we won’t be needing them. This brings us to Theorem 23 directly.

Theorems Proven Without Postulate 5

200

Theorem 23 Theorem 7.21 On a given straight line and at a point on it, it is possible to construct a rectilinear angle equal to a given rectilinear angle. This is the angle analog of Theorem 3: it gives us the power to make a copy, here, of an angle located elsewhere. Recall that “rectilinear” means only than an angle is made up of two straight lines (as always), contributing nothing to our discussion. Theorem 23 is the theorem we need to fashion a superposition-free proof of SSS (Theorem 8). Ironically, Euclid’s proof of Theorem 23 depends on SSS, and this time the dependence is basic! Before – in Theorem 9, 11, and 12 – we were able to circumvent Euclid’s use of SSS by only slight modifying his proof; now we will ave to substitute an entirely new proof. It is long, but never difficult.

Proof What we have to show is that we can construct a straight line through C making an angle equal to ̸ DEF. The proof is really three separate proofs – one for the case that ̸ DEF is right, one for the case that it is acute, and one for the case that it is obtuse. When a proof is broken up into cases, each case provides an extra hypothesis that is used only within that case. 1. Let AB be the given straight line, C the point on it, and DEF the given angle. (Hypothesis) ̸

2. Case 1.

DEF is right.

(a) Draw CJ at right angles to AB. (Theorem 11) ̸

(b)

̸

JCB =

3. Case 2.

̸

DEF. (Hypothesis of Case 1, 2, Postulate 4)

DEF is acute.

(a) Draw DG perpendicular to EF (produced if necessary). (Postulate 2, Theorem 12) (b) Pretend G is on the other side of E from F. (RAA Hypothesis) (c)

̸

DGE = 90o . (a)

(d)

̸

DEF >

(e)

̸

DEF > 90o . (c, d, Algebraic Properties)

(f) But

̸

̸

DGE. (Theorem 16)

DEF < 90o . (Hypothesis of Case 2)

(g) Contradiction. (e, f) (h) Therefore G is not on the other side of E from F. (b-g, Logic) (i) Now pretend G coincides with E. (RAA Hypothesis)

Theorems Proven Without Postulate 5

(j) (k) (l) (m) (n) (o) (p) (q) (r) (s) (t) (u) (v) (w)

201

DG coincides with DE. (Postulate 1) ̸ DGF = 90o . (a) ̸ DEF < 90o . (Hypothesis of Case 2) ̸ DGF > ̸ DEF. (l, m, Algebraic Properties) Contradiction. (k, n) Therefore G does not coincide with E. (i-o, Logic) Therefore G is on the same side of E as F. (h, p) From CB, or CB produced, cut off CH = EG. (Postulate 2, Theorem 3) Through H draw a straight line at right angles to AB, and produce it to I so that HI > DG. (Theorem 11, Postulate 2) From HI cut off HJ = DG. (Theorem 3) Draw CJ. (Postulate 1) ̸ JHC = ̸ DGE. (a, s, Postulate 4) Triangles JHC and DEG are congruent. (r, v, t, SAS) ̸ JCB = ̸ DEF. (Definition “Congruent”)

4. Case 3.

̸

DEF is obtuse.

(a) Produce FE to a point G. (Postulate 2) (b) ̸ DEG + ̸ DEF = 180o . (Theorem 13) (c) ̸ DEF > 90o . (Hypothesis of Case 3) (d) ̸ DEF < 90o . (b, c, Algebraic Properties) (e) Draw CJ so that ̸ JCA = ̸ DEG. (d, Case 2) (f) ̸ JCA + ̸ JCB = 180o . (Theorem 13) (g) ̸ JCA + ̸ JCB = ̸ DEG + ̸ DEF. (f, b, Algebraic Properties) (h) ̸ JCB = ̸ DEF. (g, e, Algebraic Properties) 5. As ̸ DEF can only be right, acute, obtuse, we have considered every possibility. Therefore, in any case, we can construct an equal angle JCB, and we have proven Theorem 23.

Theorem 23 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_AA_Thm : !(a : Finite_Line, C : Point, b : Angle) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a) in [@(On_FLine, C, a) -> ?(D : Point) let DCB = @(ANGLE_SEG, C, D, B) in @(Eq_Angle, DCB, b)];

Theorems Proven Without Postulate 5

202

Alternatively, the theorem can be expressed in terms of Point. dec Lin_AA_Thm2 : !(A : Point, B : Point, C : Point, b : Angle) let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> ?(D : Point) let DCB = @(ANGLE_SEG, C, D, B) in @(Eq_Angle, DCB, b)]; dec Lin_AA_Thm3 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let DEF = @(ANGLE_SEG, E, D, F) in let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> ?(G : Point) let GCB = @(ANGLE_SEG, C, G, B) in @(Eq_Angle, GCB, DEF)]

Proof in PowerEpsilon To prove Lin AA Thm3, we need three lemmas, namely, Lin AA Lem31, Lin AALem32 and Lin AA Lem33. We only give here the proof of Lin AA Lem31 and leave Lin AA Lem32 and Lin AA Lem33 as exercises to the readers. def Lin_AA_Lem31 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let DEF = @(ANGLE_SEG, E, D, F) in let AB = @(FLINE_SEG, A, B) in \(p : @(On_FLine, C, AB)) \(q : @(Is_Right_Angle4, DEF)) let r = @(Right_Ang_Thm2, A, B, C, p) in let J = @(FST, r), j = @(SND, r) in ; dec Lin_AA_Lem32 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point)

Theorems Proven Without Postulate 5

203

let DEF = @(ANGLE_SEG, E, D, F) in let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> @(Acute_Angle2, DEF) -> ?(J : Point) let JCA = @(ANGLE_SEG, C, J, A), JCB = @(ANGLE_SEG, C, J, B) in @(Eq_Angle, JCB, DEF)]; dec Lin_AA_Lem33 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let DEF = @(ANGLE_SEG, E, D, F) in let AB = @(FLINE_SEG, A, B) in [@(On_FLine, C, AB) -> @(Obtuse_Angle2, DEF) -> ?(J : Point) let JCA = @(ANGLE_SEG, C, J, A), JCB = @(ANGLE_SEG, C, J, B) in @(Eq_Angle, JCB, DEF)];

The following is a special form of Excluded-Middle Rule on any angle to determine if it is right angle, or acute angle, or obtuse angle. dec Excl_RAnd_Axm : !(D : Point, E : Point, F : Point) let DEF = @(ANGLE_SEG, E, D, F) in @(Sum31, @(Is_Right_Angle4, DEF), @(Acute_Angle2, DEF), @(Obtuse_Angle2, DEF));

The proof Lin AA Thm3 is then given as follows: def Lin_AA_Thm3 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let DEF = @(ANGLE_SEG, E, D, F) in let AB = @(FLINE_SEG, A, B) in \(p : @(On_FLine, C, AB)) @(WHEN31, @(Is_Right_Angle4, DEF), @(Acute_Angle2, DEF), @(Obtuse_Angle2, DEF), ?(J : Point) let JCA = @(ANGLE_SEG, C, J, A), JCB = @(ANGLE_SEG, C, J, B) in @(Eq_Angle, JCB, DEF), @(Excl_RAnd_Axm, D, E, F), \(q : @(Is_Right_Angle4, DEF)) @(Lin_AA_Lem31, A, B, C, D, E, F, p, q),

Theorems Proven Without Postulate 5

204

\(q : @(Acute_Angle2, DEF)) @(Lin_AA_Lem32, A, B, C, D, E, F, p, q), \(q : @(Obtuse_Angle2, DEF)) @(Lin_AA_Lem33, A, B, C, D, E, F, p, q));

Proof Theorem 8 At last we can prove SSS with Theorem 23. 1. Let ABC and DEF be the two triangles with, say, AB = DE, BC = EF, and AC = DF. (Hypothesis) 2. Pretend

ABC ̸= ̸

̸

DEF, say

̸

ABC >

̸

DEF. (RAA Hypothesis)

3. On the straight line BC and at the point B, draw BG so that DEF. (Theorem 23) 4.

̸

ABC >

̸

̸

GBC =

̸

GBC. (2, 3, Algebraic Properties)

5. BG is between BA and BC. (4) 6. Produce BG to so that BH > DE. (Postulate 2) 7. From BH cut off BI = DE. (Theorem 3) 8. Draw CI. (Postulate 1) 9. Triangles IBC and DEF are congruent. (7, 3, 1, SAS) 10. A and I are different points. (5, Postulate 1) 11. BA = BI. (1, 7, Algebraic Properties) 12. Given two straight lines (BA and CA) constructed on a straight line (BC) from its extremities and meeting in a point (A), we have constructed on the same straight line (BC), from its extremities and on the same side of it, two other straight lines (BI and CI) meeting in another point (I) and equal to the former two respectively, namely each to that which has the same extremity with it (BA = BI and CA = CI). 13. Contradiction. (14 and Theorem 7) 14. Therefore

̸

ABC =

̸

DEF. (2-15, Logic)

15. Therefore triangles ABC and DEF are congruent. (1, 16, SAS)

Theorems Proven Without Postulate 5

205

Proof Theorem 8 in PowerEpsilon To prove SSS Thm2, we need three lemmas, namely, SSS Lem21, SSS Lem22 and SSS Lem23. The lemma SSS Lem21 is easy to prove. def SSS_Lem21 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2)) \(q : @(Eq_Angle, ABC1, ABC2)) @(SAS_Thm2, A1, B1, C1, A2, B2, C2, p1, p2, q);

The lemma SSS Lem22 is declared as follows: dec SSS_Lem22 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(RREq, AB1, AB2) -> @(RREq, BC1, BC2) -> @(RREq, CA1, CA2) -> @(Gs_Angle, ABC1, ABC2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)];

To prove it, we need first three trivial lemmas. dec Gs_Angle_Tran : !(a1 : Angle, a2 : Angle, a3 : Angle) [@(Gs_Angle, a1, a2) -> @(Eq_Angle, a3, a2) -> @(Gs_Angle, a1, a3)];

Theorems Proven Without Postulate 5

dec Angle_Ext_Lem : !(G1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point, H1 : Point, I1 : Point) let GBC1 = @(ANGLE_SEG, B1, G1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), IBC1 = @(ANGLE_SEG, B1, I1, C1) in [@(Eq_Angle, GBC1, ABC2) -> @(In_Between, G1, B1, H1) -> @(In_Between, I1, B1, H1) -> @(Eq_Angle, IBC1, ABC2)]; dec NOn_FLine_Lem : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2) in let BC1 = @(FLINE_SEG, B1, C1) in [@(Gs_Angle, ABC1, ABC2) -> @(Not, @(On_FLine, A1, BC1))];

Then two main lemmas SSS Lem221 and SSS Lem222 are presented. def SSS_Lem221 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2), p4 : @(Gs_Angle, ABC1, ABC2)) let q = @(FLine_Seg_Lem, B1, C1) in let bc1 = @(FLINE_SEG, B1, C1) in let Q1 = @(On_FLine, B1, bc1), Q2 = @(On_FLine, C1, bc1), q1 = @(PRO1, Q1, Q2, q), q2 = @(PRO2, Q1, Q2, q) in let r = @(Lin_AA_Thm3, B1, C1, B1, A2, B2, C2, q1) in let G1 = @(FST, r), g1 = @(SND, r) in let GBC1 = @(ANGLE_SEG, B1, G1, C1) in let s = @(Gs_Angle_Tran, ABC1, ABC2, GBC1, p4, g1),

206

Theorems Proven Without Postulate 5

t = @(IIAxm21, B1, G1, A2, B2) in let H1 = @(FST, t), h1 = @(SND, t) in let BH1 = @(DISTANCE, B1, H1) in let T1 = @(RRGs, BH1, AB2), T2 = @(In_Between, G1, B1, H1), t1 = @(PRO1, T1, T2, h1), t2 = @(PRO2, T1, T2, h1) in let u = @(Lin_Lin_Thm1, B1, H1, A2, B2, t1) in let I1 = @(FST, u), i1 = @(SND, u) in let IB1 = @(DISTANCE, I1, B1), BI1 = @(DISTANCE, B1, I1) in let J1 = @(RREq, BI1, AB2), J2 = @(In_Between, I1, B1, H1), j1 = @(PRO1, J1, J2, i1), j2 = @(PRO2, J1, J2, i1), u1 = @(Distance_Symm, I1, B1), u2 = @(RRTran, IB1, BI1, AB2, u1, j1), u3 = @(Angle_Ext_Lem, G1, B1, C1, A2, B2, C2, H1, I1, g1, t2, j2) in @(SAS_Thm2, I1, B1, C1, A2, B2, C2, u2, p2, u3); dec SSS_Lem222 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in !(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2), p4 : @(Gs_Angle, ABC1, ABC2)) let q = @(FLine_Seg_Lem, B1, C1) in let bc1 = @(FLINE_SEG, B1, C1) in let Q1 = @(On_FLine, B1, bc1), Q2 = @(On_FLine, C1, bc1), q1 = @(PRO1, Q1, Q2, q), q2 = @(PRO2, Q1, Q2, q) in let r = @(Lin_AA_Thm3, B1, C1, B1, A2, B2, C2, q1) in let G1 = @(FST, r), g1 = @(SND, r) in let GBC1 = @(ANGLE_SEG, B1, G1, C1) in let s = @(Gs_Angle_Tran, ABC1, ABC2, GBC1, p4, g1),

207

Theorems Proven Without Postulate 5

t = @(IIAxm21, B1, G1, A2, B2) in let H1 = @(FST, t), h1 = @(SND, t) in let BH1 = @(DISTANCE, B1, H1) in let T1 = @(RRGs, BH1, AB2), T2 = @(In_Between, G1, B1, H1), t1 = @(PRO1, T1, T2, h1), t2 = @(PRO2, T1, T2, h1) in let u = @(Lin_Lin_Thm1, B1, H1, A2, B2, t1) in let I1 = @(FST, u), i1 = @(SND, u) in @(And, @(And, @(In_Same_FSide, A1, I1, bc1), @(Not2, @(Eq_Point, A1, I1))), @(And, @(Not, @(On_FLine, I1, bc1)), let BI1 = @(DISTANCE, B1, I1), CI1 = @(DISTANCE, C1, I1), BA1 = @(DISTANCE, B1, A1), CA1 = @(DISTANCE, C1, A1) in @(And, @(RREq, BA1, BI1), @(RREq, CA1, CI1))));

The proof of lemma SSS Lem22 is then described as follows: def SSS_Lem22 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2), p4 : @(Gs_Angle, ABC1, ABC2)) let q = @(FLine_Seg_Lem, B1, C1) in let bc1 = @(FLINE_SEG, B1, C1) in let Q1 = @(On_FLine, B1, bc1), Q2 = @(On_FLine, C1, bc1), q1 = @(PRO1, Q1, Q2, q), q2 = @(PRO2, Q1, Q2, q) in let r = @(Lin_AA_Thm3, B1, C1, B1, A2, B2, C2, q1) in let G1 = @(FST, r), g1 = @(SND, r) in let GBC1 = @(ANGLE_SEG, B1, G1, C1) in let s = @(Gs_Angle_Tran, ABC1, ABC2, GBC1, p4,

208

Theorems Proven Without Postulate 5

209

g1), t = @(IIAxm21, B1, G1, A2, B2) in let H1 = @(FST, t), h1 = @(SND, t) in let BH1 = @(DISTANCE, B1, H1) in let T1 = @(RRGs, BH1, AB2), T2 = @(In_Between, G1, B1, H1), t1 = @(PRO1, T1, T2, h1), t2 = @(PRO2, T1, T2, h1) in let u = @(Lin_Lin_Thm1, B1, H1, A2, B2, t1) in let I1 = @(FST, u), i1 = @(SND, u) in let v1 = , v2 = @(NOn_FLine_Lem, A1, B1, C1, A2, B2, C2, p4), v3 = @(LL_Thm, B1, C1, A1, v2) in @(v3, v1, @(Triang_Cong2, A1, B1, C1, A2, B2, C2));

The lemma SSS Lem23 is declared as follows: dec SSS_Lem23 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(RREq, AB1, AB2) -> @(RREq, BC1, BC2) -> @(RREq, CA1, CA2) -> @(Ls_Angle, ABC1, ABC2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)];

To prove lemma SSS Lem23, we need an auxiliary lemma which is used simply to relate Ls Angle and Gs Angle. dec Ls_Angle_Rev : !(a1 : Angle, a2 : Angle) [@(Ls_Angle, a1, a2) -> @(Gs_Angle, a2, a1)];

The proof of lemma SSS Lem23 is then given as follows: def SSS_Lem23 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1),

Theorems Proven Without Postulate 5

210

ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2), p4 : @(Ls_Angle, ABC1, ABC2)) @(Tri_Cong_Sym, A2, B2, C2, A1, B1, C1, @(SSS_Lem22, A2, B2, C2, A1, B1, C1, @(RRSymm, AB1, AB2, p1), @(RRSymm, BC1, BC2, p2), @(RRSymm, CA1, CA2, p3), @(Ls_Angle_Rev, ABC1, ABC2, p4)));

The final proof of SSS Thm2 need the Excluded-Middle Rule which is represented as a special form: dec Excl_Angle3 : !(a : Angle, b : Angle) @(Sum31, @(Eq_Angle, a, b), @(Gs_Angle, a, b), @(Ls_Angle, a, b));

Finally we will be able to give the proof of SSS Thm2. def SSS_Thm2 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1),

Theorems Proven Without Postulate 5

211

BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(RREq, AB1, AB2), p2 : @(RREq, BC1, BC2), p3 : @(RREq, CA1, CA2)) @(WHEN31, @(Eq_Angle, ABC1, ABC2), @(Gs_Angle, ABC1, ABC2), @(Ls_Angle, ABC1, ABC2), @(Triang_Cong2, A1, B1, C1, A2, B2, C2), @(Excl_Angle3, ABC1, ABC2), \(u : @(Eq_Angle, ABC1, ABC2)) @(SSS_Lem21, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(Gs_Angle, ABC1, ABC2)) @(SSS_Lem22, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(Ls_Angle, ABC1, ABC2)) @(SSS_Lem23, A1, B1, C1, A2, B2, C2, p1, p2, p3, u));

7.24

Theorem 26

If two triangles have the two angles equal to two angles respectively, and one side equal to one side, namely, either the side adjoining the equal angles, or that subtending one of the equal angles, they will also have the remaining sides equal to the remaining sides and the remaining angle to the remaining angle.

Theorem 26 (ASA) Theorem 7.22 If two angles and the included side of one triangle are equal respectively to two angles and the included side of another triangle, then the triangles are congruent.

Proof 1. Let ABC and DEF be the triangles with, say, ̸ ACB = ̸ DEF. (Hypothesis)

̸

ABC =

2. Pretend AB ̸= DE, say AB > DE. (RAA Hypothesis) 3. From AB cut off GB = DE. (Theorem 3) 4. Draw GC. (Postulate 1) 5. Therefore AB = DE. Use SAS, we go to it.

̸

DEF, BC = EF, and

Theorems Proven Without Postulate 5

212

Theorem 26 (ASA) in PowerEpsilon In terms of PowerEpsilon, we have dec ASA_Thm : !(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in [@(Eq_Angle, ABC1, ABC2) -> @(Eq_Angle, BCA1, BCA2) -> @(RREq, BC1, BC2) -> @(Triang_Cong, t1, t2)];

Alternatively, the theorem can be expressed in terms of Point. dec ASA_Thm2 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(Eq_Angle, ABC1, ABC2) -> @(Eq_Angle, BCA1, BCA2) -> @(RREq, BC1, BC2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)];

Proof in PowerEpsilon The whole proving process is divided into three hierarchies. At the lowest level, we need to prove two auxiliary lemmas: dec Ang_Lin_Cut_Lem : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point, let AB1 = @(DISTANCE, A1, B1), AB2 = BC1 = @(DISTANCE, B1, C1), BC2 = CA1 = @(DISTANCE, C1, A1), CA2 = let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2),

G1 : Point) @(DISTANCE, A2, B2), @(DISTANCE, B2, C2), @(DISTANCE, C2, A2) in

Theorems Proven Without Postulate 5

BCA1 = @(ANGLE_SEG, C1, B1, BCA2 = @(ANGLE_SEG, C2, B2, CAB1 = @(ANGLE_SEG, A1, C1, CAB2 = @(ANGLE_SEG, A2, C2, let GBC1 = @(ANGLE_SEG, B1, G1, [@(Eq_Angle, ABC1, ABC2) -> @(On_FLine, G1, @(FLINE_SEG, @(Eq_Angle, GBC1, ABC2)];

213

A1), A2), B1), B2) in C1) in A1, B1)) ->

dec Ang_SA_Eq_Lem : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point, G1 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in let GB1 = @(DISTANCE, G1, B1), CG1 = @(DISTANCE, C1, G1) in let GBC1 = @(ANGLE_SEG, B1, G1, C1), BCG1 = @(ANGLE_SEG, C1, B1, G1), CGB1 = @(ANGLE_SEG, G1, C1, B1) in [@(Eq_Angle, BCG1, BCA2) -> @(On_FLine, G1, @(FLINE_SEG, A1, B1)) -> @(RREq, GB1, AB2) -> @(Not3, @(Eq_Angle, BCA1, BCA2))];

Then three lemmas, namely, ASA Lem21, ASA Lem22 and ASA Lem23 are proven. def ASA_Lem21 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, BC1, BC2)) \(q : @(RRGs, AB1, AB2)) let r = @(Lin_Lin_Thm4, A1, B1, A2, B2, q) in let G1 = @(FST, r), g = @(SND, r) in

Theorems Proven Without Postulate 5

let GB1 = @(DISTANCE, G1, B1) in let U1 = @(On_FLine, G1, @(FLINE_SEG, A1, B1)), U2 = @(RREq, GB1, AB2) in let g1 = @(PRO1, U1, U2, g), g2 = @(PRO2, U1, U2, g) in let u = @(SAS_Thm2, G1, B1, C1, A2, B2, C2, g2, p3, @(Ang_Lin_Cut_Lem, A1, B1, C1, A2, B2, C2, G1, p1, g1)) in let GB1 = @(DISTANCE, G1, B1), CG1 = @(DISTANCE, C1, G1) in let GBC1 = @(ANGLE_SEG, B1, G1, C1), BCG1 = @(ANGLE_SEG, C1, B1, G1), CGB1 = @(ANGLE_SEG, G1, C1, B1) in let V1 = @(And1, @(RREq, GB1, AB2), @(And0, @(RREq, BC1, BC2), @(RREq, CG1, CA2))), V2 = @(And1, @(Eq_Angle, GBC1, ABC2), @(And0, @(Eq_Angle, BCG1, BCA2), @(Eq_Angle, CGB1, CAB2))) in let v1 = @(PRO41, V1, V2, u), v2 = @(PRO42, V1, V2, u) in let W1 = @(Eq_Angle, GBC1, ABC2), W2 = @(Eq_Angle, BCG1, BCA2), W3 = @(Eq_Angle, CGB1, CAB2) in let w1 = @(PRO11, W1, @(And0, W2, W3), v2), w2 = @(PRO01, W2, W3, @(PRO12, W1, @(And0, W2, W3), v2)), w3 = @(PRO02, W2, W3, @(PRO12, W1, @(And0, W2, W3), v2)) in let s = @(Ang_SA_Eq_Lem, A1, B1, C1, A2, B2, C2, G1, w2, g1, g2) in @(s, p2, @(Triang_Cong2, A1, B1, C1, A2, B2, C2)); def ASA_Lem22 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2),

214

Theorems Proven Without Postulate 5

p3 : @(RREq, BC1, BC2)) \(q : @(RRGs, AB2, AB1)) @(Tri_Cong_Sym, A2, B2, C2, A1, B1, C1, @(ASA_Lem21, A2, B2, C2, A1, B1, C1, @(Eq_Angle_Sym, ABC1, ABC2, p1), @(Eq_Angle_Sym, BCA1, BCA2, p2), @(RRSymm, BC1, BC2, p3), q)); def ASA_Lem23 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, BC1, BC2)) \(q : @(RREq, AB1, AB2)) @(SAS_Thm2, A1, B1, C1, A2, B2, C2, q, p3, p1);

We finally will be able to prove ASA Thm2. def ASA_Thm2 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2),

215

Theorems Proven Without Postulate 5

216

p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, BC1, BC2)) @(WHEN31, @(RRGs, AB1, AB2), @(RRGs, AB2, AB1), @(RREq, AB1, AB2), @(Triang_Cong2, A1, B1, C1, A2, B2, C2), @(Excl_RR2, AB1, AB2), \(u : @(RRGs, AB1, AB2)) @(ASA_Lem21, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(RRGs, AB2, AB1)) @(ASA_Lem22, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(RREq, AB1, AB2)) @(ASA_Lem23, A1, B1, C1, A2, B2, C2, p1, p2, p3, u));

Theorem 26 (AAS) Theorem 7.23 If two angles of one triangle are equal respectively to two angles of another triangle, and the sides subtending one pair of equal angles are equal, then the triangles are congruent.

Proof For most of readers, the AAS congruence crirerion is probably less familiar with. If authors of modern textbooks explicitly mention it at all, they usually wait until they have proven that the angle-sum of a triangle is 180o – Euclid’s Theorem 32 – because that fact, together with ASA, instantly entails AAS. AAS then appears to be a minor theorem, not worthy of much attention. However, even though the validity of AAS carries over non-Euclidean geometry Theorem 32 is false. As students of both geometries we would not want to use such a proof, only to have to reprove AAS later. Fortunately Euclid comes to our rescue by proving AAS now. His proof is of course independent of Theorem 32 and will remain valid in non-Euclidean geometry. 1. Let ABC and DEF be the triangles with, say, DFE, and AB = DE. (Hypothesis)

̸

ABC =

̸

DEF,

̸

ACB =

̸

2. Pretend BC ̸= EF, say BC > EF. (RAA Hypothesis) 3. From BC cut off BG = EF. (Theorem 3) 4. Draw AG. (Postulate 1) 5. Triangles ABG and DEF are congruent. (1 (AB = DE, SAS)

̸

ABC =

̸

DEF), 3,

Theorems Proven Without Postulate 5

6. Therefore 7. Hence 8. But

̸

̸

̸

AGB =

AGB =

AGB >

̸

̸

̸

217

DFE. (Definition “Congruent”)

ACB. (1 (̸ ACB =

̸

DFE), 6, Algebraic Properties)

ACB. (Theorem 16 (△ AGC))

9. Contradiction. (7 and 8) 10. Therefore BC = EF. (2-9, Logic) 11. Therefore triangles ABC and DEF are congruent. (1, 10, ASA or 1, 10, SAS)

Theorem 26 (AAS) in PowerEpsilon In terms of PowerEpsilon, we have dec AAS_Thm : !(t1 : Triangle, t2 : Triangle) let AB1 = @(GET_TRI_AB, t1), AB2 = @(GET_TRI_AB, t2), BC1 = @(GET_TRI_BC, t1), BC2 = @(GET_TRI_BC, t2), CA1 = @(GET_TRI_CA, t1), CA2 = @(GET_TRI_CA, t2) in let ABC1 = @(GET_TRI_ABC, t1), ABC2 = @(GET_TRI_ABC, t2), BCA1 = @(GET_TRI_BCA, t1), BCA2 = @(GET_TRI_BCA, t2), CAB1 = @(GET_TRI_CAB, t1), CAB2 = @(GET_TRI_CAB, t2) in [@(Eq_Angle, ABC1, ABC2) -> @(Eq_Angle, BCA1, BCA2) -> @(RREq, AB1, AB2) -> @(Triang_Cong, t1, t2)];

Alternatively, the theorem can be expressed in terms of Point. dec AAS_Thm2 : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in [@(Eq_Angle, ABC1, ABC2) -> @(Eq_Angle, BCA1, BCA2) -> @(RREq, AB1, AB2) -> @(Triang_Cong2, A1, B1, C1, A2, B2, C2)]

Theorems Proven Without Postulate 5

218

Proof in PowerEpsilon To prove AAS Thm2, we need three lemmas, namely, AAS Lem21, AAS Lem22 and AAS Lem23. The lemma AAS Lem21 is easy to prove. def AAS_Lem21 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, AB1, AB2)) \(q : @(RREq, BC1, BC2)) @(ASA_Thm2, A1, B1, C1, A2, B2, C2, p1, p2, q);

To prove AAS Lem22, we need the following three auxiliary lemmas. dec Ang_Cut_Lin_Lem : !(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point, G1 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in let ABG1 = @(ANGLE_SEG, B1, A1, G1) in [@(Eq_Angle, ABC1, ABC2) -> @(In_Between, G1, B1, C1) -> @(Eq_Angle, ABG1, ABC2)]; dec In_Bet_Sym : !(C : Point, A : Point, B : Point) [@(In_Between, C, A, B) -> @(In_Between, C, B, A)]; dec Gs_Eq_Ang_Lem : !(A : Point, B : Point, C : Point, G : Point) let ABG = @(ANGLE_SEG, B, A, G),

Theorems Proven Without Postulate 5

BGA = @(ANGLE_SEG, G, B, A), BCA = @(ANGLE_SEG, C, B, A), GAB = @(ANGLE_SEG, A, G, B), AGB = @(ANGLE_SEG, G, A, B), ACG = @(ANGLE_SEG, C, A, G), GAC = @(ANGLE_SEG, A, G, C) in [@(In_Between, G, B, C) -> @(Gs_Angle, AGB, ACG) -> @(Not, @(Eq_Angle, BGA, BCA))];

The proof of lemma AAS Lem22 is given as follows. def AAS_Lem22 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, AB1, AB2)) \(q : @(RRGs, BC1, BC2)) let r = @(Lin_Lin_Thm3, B1, C1, B2, C2, q) in let G1 = @(FST, r), g = @(SND, r) in let BG1 = @(DISTANCE, B1, G1) in let U1 = @(RREq, BG1, BC2), U2 = @(In_Between, G1, B1, C1), u1 = @(PRO1, U1, U2, g), u2 = @(PRO2, U1, U2, g) in let u = @(SAS_Thm2, A1, B1, G1, A2, B2, C2, p3, u1, @(Ang_Cut_Lin_Lem, A1, B1, C1, A2, B2, C2, G1, p1, u2)) in let GA1 = @(DISTANCE, G1, A1) in let ABG1 = @(ANGLE_SEG, B1, A1, G1), BGA1 = @(ANGLE_SEG, G1, B1, A1), GAB1 = @(ANGLE_SEG, A1, G1, B1), AGB1 = @(ANGLE_SEG, G1, A1, B1), ACG1 = @(ANGLE_SEG, C1, A1, G1), GAC1 = @(ANGLE_SEG, A1, G1, C1) in let V1 = @(And1, @(RREq, AB1, AB2),

219

Theorems Proven Without Postulate 5

@(And0, @(RREq, BG1, BC2), @(RREq, GA1, CA2))), V2 = @(And1, @(Eq_Angle, ABG1, ABC2), @(And0, @(Eq_Angle, BGA1, BCA2), @(Eq_Angle, GAB1, CAB2))), v1 = @(PRO41, V1, V2, u), v2 = @(PRO42, V1, V2, u) in let W1 = @(Eq_Angle, ABG1, ABC2), W2 = @(Eq_Angle, BGA1, BCA2), W3 = @(Eq_Angle, GAB1, CAB2), w1 = @(PRO11, W1, @(And0, W2, W3), v2), w2 = @(PRO01, W2, W3, @(PRO12, W1, @(And0, W2, W3), v2)), w3 = @(PRO02, W2, W3, @(PRO12, W1, @(And0, W2, W3), v2)) in let s1 = @(Eq_Angle_Sym, BCA1, BCA2, p2), s2 = @(Eq_Angle_Tran, BGA1, BCA2, BCA1, w2, s1) in let t = @(Tri_Ext_Thm2, A1, C1, G1, B1, @(In_Bet_Sym, G1, B1, C1, u2)) in let T1 = @(Gs_Angle, AGB1, GAC1), T2 = @(Gs_Angle, AGB1, ACG1), t1 = @(PRO1, T1, T2, t), t2 = @(PRO2, T1, T2, t) in let z = @(Gs_Eq_Ang_Lem, A1, B1, C1, G1, u2, t2) in @(z, s2, @(Triang_Cong2, A1, B1, C1, A2, B2, C2));

The lemma AAS Lem22 can be proven using AAS Lem23. def AAS_Lem23 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, AB1, AB2)) \(q : @(RRGs, BC2, BC1)) let r = @(AAS_Lem22, A2, B2,

220

Theorems Proven Without Postulate 5

221

C2, A1, B1, C1, @(Eq_Angle_Sym, ABC1, ABC2, p1), @(Eq_Angle_Sym, BCA1, BCA2, p2), @(RRSymm, AB1, AB2, p3), q) in @(Tri_Cong_Sym, A2, B2, C2, A1, B1, C1, r);

We then will be able to prove AAS Thm2. def AAS_Thm2 = \(A1 : Point, B1 : Point, C1 : Point, A2 : Point, B2 : Point, C2 : Point) let AB1 = @(DISTANCE, A1, B1), AB2 = @(DISTANCE, A2, B2), BC1 = @(DISTANCE, B1, C1), BC2 = @(DISTANCE, B2, C2), CA1 = @(DISTANCE, C1, A1), CA2 = @(DISTANCE, C2, A2) in let ABC1 = @(ANGLE_SEG, B1, A1, C1), ABC2 = @(ANGLE_SEG, B2, A2, C2), BCA1 = @(ANGLE_SEG, C1, B1, A1), BCA2 = @(ANGLE_SEG, C2, B2, A2), CAB1 = @(ANGLE_SEG, A1, C1, B1), CAB2 = @(ANGLE_SEG, A2, C2, B2) in \(p1 : @(Eq_Angle, ABC1, ABC2), p2 : @(Eq_Angle, BCA1, BCA2), p3 : @(RREq, AB1, AB2)) @(WHEN31, @(RRGs, BC1, BC2), @(RRGs, BC2, BC1), @(RREq, BC1, BC2), @(Triang_Cong2, A1, B1, C1, A2, B2, C2), @(Excl_RR2, BC1, BC2), \(u : @(RRGs, BC1, BC2)) @(AAS_Lem22, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(RRGs, BC2, BC1)) @(AAS_Lem23, A1, B1, C1, A2, B2, C2, p1, p2, p3, u), \(u : @(RREq, BC1, BC2)) @(AAS_Lem21, A1, B1, C1, A2, B2, C2, p1, p2, p3, u));

7.25

Theorem 27

Lemma Lemma 7.1 If a straight line falling on two straight lines causes any one of the eight aforementioned angle relationships to occur, then it causes the other seven to occur as well.

Theorems Proven Without Postulate 5

222

Lemma in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Par_Lem : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEG = @(ANGLE_SEG, E, A, G), BEG = @(ANGLE_SEG, E, B, G), AEH = @(ANGLE_SEG, E, A, H), BEH = @(ANGLE_SEG, E, B, H), CFG = @(ANGLE_SEG, F, C, G), DFG = @(ANGLE_SEG, F, D, G), CFH = @(ANGLE_SEG, F, C, H), DFH = @(ANGLE_SEG, F, D, H) in [@(Eq_Angle, AEH, DFG) -> @(And, @(Eq_Angle, BEH, CFG), @(And, @(And, @(Eq_Angle, AEG, CFG), @(Eq_Angle, BEG, DFG)), @(And, @(And, @(Eq_Angle, CFH, AEH), @(Eq_Angle, DFH, BEH)), @(And, @(RREq, @(RRADD, @(GET_ANGLE, AEH), @(GET_ANGLE, CFG)), RRPI), @(RREq, @(RRADD, @(GET_ANGLE, BEH), @(GET_ANGLE, DFG)), RRPI)))))]];

Theorem 27/28 Theorem 7.24 If a straight line falling on two straighht lines causes any one of the eight angle relationships to occur, then the two straigt lines are parallel.

Proof 1. Let AB and CD be the two straight lines and EF the straight line intersecting them – at E and F respectively – that causes any one of the eight angle relationships to occur. (Hypothesis) 2. Then

̸

AEF =

̸

EFD. (Lemma)

3. Pretend that AB and CD, when produced, meet at a point G which is, say, on the side of EF containing B and D. (RAA Hypothesis) 4.

̸

AEF =

̸

EFD. (Theorem 16 (△ EFG))

5. Contradiction. (2 and 4)

Theorems Proven Without Postulate 5

223

6. Therefore AB and CD, if produced, will not meet on the side of EF containing B and D. (3-5, Logic) 7. Therefore AB and CD are parallel. (Definition “Parallel”)

Theorem 27/28 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Par_Thm1 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEG = @(ANGLE_SEG, E, A, G), BEG = @(ANGLE_SEG, E, B, G), FEA = @(ANGLE_SEG, E, F, A), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), EFD = @(ANGLE_SEG, F, E, D), CFH = @(ANGLE_SEG, F, C, H), DFH = @(ANGLE_SEG, F, D, H) in [@(Eq_Angle, FEA, EFD) -> @(Parallel_FLine, a, b)]];

Alternatively, the theorem can be expressed in terms of Point. dec Lin_Par_Thm11 : !(A : Point, B : Point, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let a = @(FLINE_SEG, A, B) in let C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEG = @(ANGLE_SEG, E, A, G), BEG = @(ANGLE_SEG, E, B, G), AEF = @(ANGLE_SEG, E, A, F), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), EFD = @(ANGLE_SEG, F, E, D), CFH = @(ANGLE_SEG, F, C, H), DFH = @(ANGLE_SEG, F, D, H) in [@(Eq_Angle, AEF, EFD) -> @(Parallel_FLine, a, b)]]; dec Lin_Par_Thm12 : !(A : Point, B : Point, C : Point, D : Point,

Theorems Proven Without Postulate 5

224

G : Point, H : Point, E : Point, F : Point) let a = @(FLINE_SEG, A, B), b = @(FLINE_SEG, C, D), c = @(FLINE_SEG, G, H) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEG = @(ANGLE_SEG, E, A, G), BEG = @(ANGLE_SEG, E, B, G), AEF = @(ANGLE_SEG, E, A, F), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), DFE = @(ANGLE_SEG, F, D, E), CFH = @(ANGLE_SEG, F, C, H), DFH = @(ANGLE_SEG, F, D, H) in [@(Eq_Angle, AEF, DFE) -> @(Parallel_FLine, a, b)]];

Proof in PowerEpsilon To prove Lin Par Thm1, we need two main lemmas, namely, Ang Lin Lem1 and Ang Lin Lem2. dec Ang_Lin_Lem1 : !(I : Point, D : Point, F : Point, E : Point) !(a : Finite_Line, b : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b) in let FEA = @(ANGLE_SEG, E, F, A), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), EFD = @(ANGLE_SEG, F, E, D), EFI = @(ANGLE_SEG, F, E, I), FIE = @(ANGLE_SEG, I, F, E) in let l1 = @(GET_FLN_LN, a), l2 = @(GET_FLN_LN, b) in [@(JP_Line, I, l1, l2) -> @(Gs_Angle, FEA, EFI) -> @(Not, @(Eq_Angle, FEA, EFD))]; dec Ang_Lin_Lem2 : !(I : Point, D : Point, F : Point, E : Point) !(a : Finite_Line, b : Finite_Line) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b) in let FEA = @(ANGLE_SEG, E, F, A), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), EFD = @(ANGLE_SEG, F, E, D), FEI = @(ANGLE_SEG, E, F, I), EIF = @(ANGLE_SEG, I, E, F) in

Theorems Proven Without Postulate 5

225

let l1 = @(GET_FLN_LN, a), l2 = @(GET_FLN_LN, b) in [@(JP_Line, I, l1, l2) -> @(Gs_Angle, EFD, FEI) -> @(Not, @(Eq_Angle, FEA, EFD))];

The following formula Excl Par Line is a specialized Excluded Middle Rule for parallel lines. dec Excl_Par_Line : !(a : Finite_Line, b : Finite_Line) @(Or, @(Parallel_FLine, a, b), @(Not, @(Parallel_FLine, a, b)));

The folliwing Excluded Middle Rule is not easy to derive. dec Excl_Line_Side : !(a : Finite_Line, b : Finite_Line, c : Finite_Line, E : Point, F : Point, I : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let l1 = @(GET_FLN_LN, a), l2 = @(GET_FLN_LN, b) in [@(JP_Line, I, l1, l2) -> @(Or, @(In_Between, E, I, A), @(In_Between, F, I, D))]];

The following lemma Not All Ex PLin says that if two finite straight lines a and b are in parallel then there exists a point I such that I is a joint-point of the two lines. dec Not_All_Ex_PLin : !(a : Finite_Line, b : Finite_Line) [@(Not, @(Parallel_FLine, a, b)) -> let l1 = @(GET_FLN_LN, a), l2 = @(GET_FLN_LN, b) in ?(I : Point) @(JP_Line, I, l1, l2)];

We then will be able to give the proof of Lin Par Thm1. def Lin_Par_Thm1 = \(a : Finite_Line, b : Finite_Line, c : Finite_Line, E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in \(p1 : @(JP_FLine, E, a, c), p2 : @(JP_FLine, F, b, c)) let AEG = @(ANGLE_SEG, E, A, G), BEG = @(ANGLE_SEG, E, B, G), FEA = @(ANGLE_SEG, E, F, A), BEF = @(ANGLE_SEG, E, B, F), CFE = @(ANGLE_SEG, F, C, E), EFD = @(ANGLE_SEG, F, E, D), CFH = @(ANGLE_SEG, F, C, H),

Theorems Proven Without Postulate 5

DFH = @(ANGLE_SEG, F, D, H) in \(q : @(Eq_Angle, FEA, EFD)) let l1 = @(GET_FLN_LN, a), l2 = @(GET_FLN_LN, b) @(WHEN, @(Parallel_FLine, a, b), @(Not, @(Parallel_FLine, a, b)), @(Parallel_FLine, a, b), @(Excl_Par_Line, a, b), \(u : @(Parallel_FLine, a, b)) u, \(v : @(Not, @(Parallel_FLine, a, b))) let r = @(Not_All_Ex_PLin, a, b, v) in let I = @(FST, r), s = @(SND, r) in @(WHEN, @(In_Between, E, I, A), @(In_Between, F, I, D), @(Parallel_FLine, a, b), @(Excl_Line_Side, a, b, c, E, F, I, p1, \(x : @(In_Between, E, I, A)) let EFI = @(ANGLE_SEG, F, E, I), FIE = @(ANGLE_SEG, I, F, E) in let t = @(Tri_Ext_Thm2, F, I, E, A, x) let T1 = @(Gs_Angle, FEA, EFI), T2 = @(Gs_Angle, FEA, FIE) in let t1 = @(PRO1, T1, T2, t), t2 = @(PRO2, T1, T2, t) in let w = @(Ang_Lin_Lem1, I, D, F, E, a, @(w, q, @(Parallel_FLine, a, b)), \(y : @(In_Between, F, I, D)) let FEI = @(ANGLE_SEG, E, F, I), EIF = @(ANGLE_SEG, I, E, F) in let t = @(Tri_Ext_Thm2, E, I, F, D, y) let T1 = @(Gs_Angle, EFD, FEI), T2 = @(Gs_Angle, EFD, EIF) in let t1 = @(PRO1, T1, T2, t), t2 = @(PRO2, T1, T2, t) in let w = @(Ang_Lin_Lem2, I, D, F, E, a, @(w, q, @(Parallel_FLine, a, b))));

7.26

226

in

p2, s),

in

b, s, t1) in

in

b, s, t1) in

Theorem 31

Theorem 29 and 30 are in the next section because they depend on Postulate 5. Theorem 31 is the only Theorem remaining in Book I that can be proven without Postulate 5; in it, having just raised the issue of parallel straight lines, Euclid verifies that such things actually exist.

Theorem 31 Theorem 7.25 Through a given point not on a given straight line, and not on that straight line produced, it is possible to draw a straight line parallel to the given straight line.

Theorems Proven Without Postulate 5

227

Proof 1. Let A be the given point not on the given straight line BC, and not on BC produced. (Hypothesis) 2. Choose D at random on BC. (Postulate 10 (2)) 3. Draw AD. (Postulate 1) 4. Draw EA making

̸

EAD =

̸

ADC. (Theorem 23)

5. Produce EA to F. (Postulate 2) 6. EAF is parallel to BC. (4, Theorem 27/28)

Theorem 31 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Par_Thm4 : !(A : Point, a : Finite_Line) [@(Not, @(On_FLine, A, a)) -> let l = @(GET_FLN_LN, a) in @(Not, @(On_Line, A, l)) -> ?(b : Finite_Line) @(And, @(On_FLine, A, b), @(Parallel_FLine, b, a))]; Alternatively, the theorem can be expressed in terms of Point. dec Lin_Par_Thm41 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in ?(D : Point) let CD = @(FLINE_SEG, C, D) in @(Parallel_FLine, AB, CD); dec Lin_Par_Thm42 : !(A : Point, B : Point, C : Point) let AB = @(FLINE_SEG, A, B) in ?(D : Point) let DC = @(FLINE_SEG, D, C) in @(Parallel_FLine, AB, DC);

Proof in PowerEpsilon To prove Lin Par Thm4, we need three main lemmas, namely, Lin Par Lem41, Lin Par Lem42 and Lin Par Lem43.

Theorems Proven Without Postulate 5

dec Lin_Par_Lem41 : !(A : Point, a : Finite_Line) [@(Not, @(On_FLine, A, a)) -> let B = @(GET_FLN_A, a), C = @(GET_FLN_B, a) in let l = @(GET_FLN_LN, a) in [@(Not, @(On_Line, A, l)) -> let r = @(IAxm41, a) in let D = @(FST, r), s = @(SND, r) in let AD = @(FLINE_SEG, A, D), ad = @(FLine_Seg_Lem, A, D) in let R1 = @(On_FLine, A, AD), R2 = @(On_FLine, D, AD) in let r1 = @(PRO1, R1, R2, ad), r2 = @(PRO2, R1, R2, ad) in let ADC = @(ANGLE_SEG, D, A, C) in let u = @(Lin_AA_Thm2, A, D, A, ADC, r1) in let E = @(FST, u), e = @(SND, u) in let v = @(IIAxm2, E, A) in let F = @(FST, v), f = @(SND, v) in let EF = @(FLINE_SEG, E, F) in @(JP_FLine, A, EF, AD)]]; dec Lin_Par_Lem42 : !(A : Point, a : Finite_Line) [@(Not, @(On_FLine, A, a)) -> let B = @(GET_FLN_A, a), C = @(GET_FLN_B, a) in let l = @(GET_FLN_LN, a) in [@(Not, @(On_Line, A, l)) -> let r = @(IAxm41, a) in let D = @(FST, r), s = @(SND, r) in let AD = @(FLINE_SEG, A, D), ad = @(FLine_Seg_Lem, A, D) in @(JP_FLine, D, a, AD)]]; dec Lin_Par_Lem43 : !(A : Point, a : Finite_Line) [@(Not, @(On_FLine, A, a)) -> let B = @(GET_FLN_A, a), C = @(GET_FLN_B, a) in let l = @(GET_FLN_LN, a) in [@(Not, @(On_Line, A, l)) -> let r = @(IAxm41, a) in let D = @(FST, r), s = @(SND, r) in let AD = @(FLINE_SEG, A, D), ad = @(FLine_Seg_Lem, A, D) in let R1 = @(On_FLine, A, AD), R2 = @(On_FLine, D, AD) in let r1 = @(PRO1, R1, R2, ad),

228

Theorems Proven Without Postulate 5

r2 = @(PRO2, R1, R2, ad) in let ADC = @(ANGLE_SEG, D, A, C) in let u = @(Lin_AA_Thm2, A, D, A, ADC, r1) in let E = @(FST, u), e = @(SND, u) in let v = @(IIAxm2, E, A) in let F = @(FST, v), f = @(SND, v) in let EF = @(FLINE_SEG, E, F) in @(On_FLine, A, EF)]];

We then will be able to give the proof of Lin Par Thm4. def Lin_Par_Lem4 = \(A : Point, a : Finite_Line) \(p : @(Not, @(On_FLine, A, a))) let B = @(GET_FLN_A, a), C = @(GET_FLN_B, a) in let l = @(GET_FLN_LN, a) in \(q : @(Not, @(On_Line, A, l))) let r = @(IAxm41, a) in let D = @(FST, r), s = @(SND, r) in let AD = @(FLINE_SEG, A, D), ad = @(FLine_Seg_Lem, A, D) in let R1 = @(On_FLine, A, AD), R2 = @(On_FLine, D, AD) in let r1 = @(PRO1, R1, R2, ad), r2 = @(PRO2, R1, R2, ad) in let ADC = @(ANGLE_SEG, D, A, C) in let u = @(Lin_AA_Thm2, A, D, A, ADC, r1) in let E = @(FST, u), e = @(SND, u), v = @(IIAxm2, E, A) in let F = @(FST, v), f = @(SND, v) in let EF = @(FLINE_SEG, E, F) in let w1 = @(Lin_Par_Lem41, A, a, p, q), w2 = @(Lin_Par_Lem42, A, a, p, q) in let V1 = @(On_FLine, A, EF), V2 = @(Parallel_FLine, EF, a), v1 = @(Lin_Par_Lem43, A, a, p, q), v2 = @(Lin_Par_Thm11, E, F, a, AD, A, D, w1, w2, e) in @(PRODUCT, V1, V2, v1, v2); def Lin_Par_Thm4 = \(A : Point, a : Finite_Line) \(p : @(Not, @(On_FLine, A, a))) let B = @(GET_FLN_A, a), C = @(GET_FLN_B, a) in let l = @(GET_FLN_LN, a) in \(q : @(Not, @(On_Line, A, l))) let r = @(IAxm41, a) in let D = @(FST, r), s = @(SND, r) in

229

Theorems Proven Without Postulate 5

let AD = @(FLINE_SEG, A, D), ad = @(FLine_Seg_Lem, A, D) in let R1 = @(On_FLine, A, AD), R2 = @(On_FLine, D, AD) in let r1 = @(PRO1, R1, R2, ad), r2 = @(PRO2, R1, R2, ad) in let ADC = @(ANGLE_SEG, D, A, C) in let u = @(Lin_AA_Thm2, A, D, A, ADC, r1) in let E = @(FST, u), e = @(SND, u) in let v = @(IIAxm2, E, A) in let F = @(FST, v), f = @(SND, v) in let EF = @(FLINE_SEG, E, F) in ;

230

Chapter 8

Theorems Proven With Postulate 5 The remaining theorems of Book I (29, 30, 32-48) depend on Postulate 5. Of these we have selected nine (culminating in the famous Theorem of Pythagoras) that we think will contrast nicely with non-Euclidean geometry. Since theorems that are proven without Postulate 5 remain true in that other geometry, and those requiring Postulate 5 become false, it is this point that the two geometries diverge. What we have done so far belongs to both; but from now on, as we follow Euclid’s path, the 19th-century revolutionaries are no longer with us.

8.1

Theorem 29

Theorem 29 Theorem 8.1 A straight line falling on parallel straight lines makes the alternate angles equal to one another, the exterior angle equal to the interior and opposite angle, and the interior angles on the same side equal to two right angles. In other words, if the two straight lines on which the transversal falls are parallel, it causes all eight of angle relationships to occur. This is the converse of Theorem 27/28. Though it is easy to confuse a theorem and its converse.

Proof 1. Let AB and CD be the parallel straight lines and EF the straight line intersecting them at E and F respectively. (Hypothesis) 2. Pretend

̸

AEF ̸= ̸

EFD, say

̸

AEF >

231

̸

EFD. (RAA Hypothesis)

Theorems Proven With Postulate 5

3.

̸

AEF +

̸

BEF >

̸

4.

̸

AEF +

̸

BEF = 180◦ . (Theorem 13)

5.

̸

EFD +

̸

BEF < 180◦ . (3, 4, Algebraic Properties)

EFD +

̸

232

BEF (2, Algebraic Properties)

6. AB and CD meet on the side of EF containing B and D. 7. Contradiction. (1 (AB ∥ CD) and 6) 8. Therefore

̸

AEF =

̸

EFD. (2-7, Logic)

9. Therefore the other alternate angles are equal to one another, each exterior angle is equal to the interior and opposite angle, and both pairs of interior angles on the same side are equal to two right angle.

Theorem 29 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Par_Thm2 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(Parallel_FLine, a, b) -> @(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let AEF = @(ANGLE_SEG, E, A, F), EFD = @(ANGLE_SEG, F, E, D) in @(Eq_Angle, AEF, EFD)];

Proof in PowerEpsilon To prove Lin Par Thm2, we need the following lemmas: dec JP_FLine_Lem21 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let FE = @(FLINE_SEG, F, E) in @(JP_FLine, E, FE, a)];

Theorems Proven With Postulate 5

233

dec JP_FLine_Lem22 : !(a : Finite_Line, b : Finite_Line, c : Finite_Line) !(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in [@(JP_FLine, E, a, c) -> @(JP_FLine, F, b, c) -> let EF = @(FLINE_SEG, E, F) in @(JP_FLine, F, EF, b)];

The following are two logical formulas deployed in proof of Lin Par Thm2. The first one, Excl Angle, is a special form of the Excluded-Middle Rule for Angle. dec Excl_Angle : !(a : Angle, b : Angle) @(Or, @(Eq_Angle, a, b), @(Not, @(Eq_Angle, a, b)));

The second formula says that for any two angles a and b, if a is not equal to b, then either a is greater than b, or b is greater than a. dec Angle_Eq_Case : !(a : Angle, b : Angle) [@(Not, @(Eq_Angle, a, b)) -> let aa = @(GET_ANGLE, a), bb = @(GET_ANGLE, b) in @(Or, @(RRGs, aa, bb), @(RRGs, bb, aa))];

We will then be able to give the proof of Lin Par Thm2: def Lin_Par_Thm2 = \(a : Finite_Line, b : Finite_Line, c : Finite_Line) \(E : Point, F : Point) let A = @(GET_FLN_A, a), B = @(GET_FLN_B, a), C = @(GET_FLN_A, b), D = @(GET_FLN_B, b), G = @(GET_FLN_A, c), H = @(GET_FLN_B, c) in \(p1 : @(Parallel_FLine, a, b), p2 : @(JP_FLine, E, a, c), p3 : @(JP_FLine, F, b, c)) let AEF = @(ANGLE_SEG, E, A, F), BEF = @(ANGLE_SEG, E, B, F), EFC = @(ANGLE_SEG, F, E, C), EFD = @(ANGLE_SEG, F, E, D) in let aef = @(GET_ANGLE, AEF), bef = @(GET_ANGLE, BEF), efc = @(GET_ANGLE, EFC), efd = @(GET_ANGLE, EFD) in

Theorems Proven With Postulate 5

@(WHEN, @(Eq_Angle, AEF, EFD), @(Not, @(Eq_Angle, AEF, EFD)), @(Eq_Angle, AEF, EFD), @(Excl_Angle, AEF, EFD), \(x : @(Eq_Angle, AEF, EFD)) x, \(y : @(Not, @(Eq_Angle, AEF, EFD))) @(WHEN, @(RRGs, aef, efd), @(RRGs, efd, aef), @(Eq_Angle, AEF, EFD), @(Angle_Eq_Case, AEF, EFD, y), \(q : @(RRGs, aef, efd)) let r = @(RRAdd_Lem1, aef, bef, efd, q) in let u = @(JP_FLine_Lem21, a, b, c, E, F, p2, p3), v = @(Ang_Sum_Thm3, F, E, a, u) in let w = @(RRAdd_Lem2, aef, bef, efd, r, v) in let z = @(IVAxm22, a, b, c, E, F, p2, p3, w) in let I = @(FST, z), i = @(SND, z) in @(p1, I, i, @(Eq_Angle, AEF, EFD)), \(q : @(RRGs, efd, aef)) let r = @(RRAdd_Lem1, efd, efc, aef, q) in let u = @(JP_FLine_Lem22, a, b, c, E, F, p2, p3), v = @(Ang_Sum_Thm4, E, F, b, u) in let w = @(RRAdd_Lem2, efd, efc, aef, r, v) in let z = @(IVAxm21, a, b, c, E, F, p2, p3, w) in let I = @(FST, z), i = @(SND, z) in @(p1, I, i, @(Eq_Angle, AEF, EFD))));

Two alternative versions of Lin Par Thm2 are given as follows: dec Lin_Par_Thm20 : !(A : Point, B : Point, C : Point, D : Point, G : Point, H : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), GH = @(FLINE_SEG, G, H) in [@(Parallel_FLine, AB, CD) -> @(JP_FLine, E, AB, GH) -> @(JP_FLine, F, CD, GH) -> let AEF = @(ANGLE_SEG, E, A, F), EFD = @(ANGLE_SEG, F, E, D) in @(Eq_Angle, AEF, EFD)]; dec Lin_Par_Thm21 : !(A : Point, B : Point, C : Point, D : Point, G : Point, H : Point, E : Point, F : Point)

234

Theorems Proven With Postulate 5

235

let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), GH = @(FLINE_SEG, G, H) in [@(Parallel_FLine, AB, CD) -> @(JP_FLine, E, AB, GH) -> @(JP_FLine, F, CD, GH) -> let AEF = @(ANGLE_SEG, E, A, F), CFH = @(ANGLE_SEG, F, C, H) in @(Eq_Angle, AEF, CFH)];

8.2

Theorem 30

Theorem 30 Theorem 8.2 Straight lines parallel to the same straight line are also parallel to one another.

Proof of the First Case In proving this there are two cases to consider, depending on whether the straight lines are on the same or opposite sides of the straight line to which they are parallel. 1. Let AB and CD be the straight lines parallel to the same straight line EF and lying on the same side of EF. (Hypothesis) 2. On the straight line further from EF, say it is AB, choose a point G at random and on EF choose H at random. (Postulate 10 (2)) 3. Draw GH. (Postulate 1) 4. GH intersects CD (produced if necessary) in a point I. (Postulate 2, Postulate 7 (2)) 5.

̸

BGI =

̸

EHI. (1 (AB ∥ EF), Theorem 29)

6.

̸

DIH =

̸

EHI. (1 (CD ∥ EF), Theorem 29)

7.

̸

BGI =

̸

DIH. (5, 6, Algebraic Properties)

8.

̸

CIG =

̸

DIH. (Theorem 15)

9.

̸

BGI =

̸

CIG. (7, 8, Algebraic Properties)

10. AB is parallel to CD. (9, Theorem 27/28) The dependence of this half of the proof on Postulate 5 is in step 5 and 6, for Postulate 5 was used to prove Theorem 29.

Theorems Proven With Postulate 5

236

Theorem 30 in PowerEpsilon In terms of PowerEpsilon, we have dec Lin_Par_Thm3 : !(a : Finite_Line, b : [@(Parallel_FLine, a, @(Parallel_FLine, b, @(Parallel_FLine, a,

Finite_Line, c : Finite_Line) c) -> c) -> b)];

Alternatively, the theorem can be expressed in terms of Point. dec Lin_Par_Thm4 : !(A : Point, B : Point, C let AB = @(FLINE_SEG, A, CD = @(FLINE_SEG, C, EF = @(FLINE_SEG, E, [@(Parallel_FLine, AB, @(Parallel_FLine, CD, @(Parallel_FLine, AB,

: Point, D : Point, E : Point, F : Point) B), D), F) in EF) -> EF) -> CD)];

Proof in PowerEpsilon To prove Lin Par Thm4, we need to prove three lemmas Lin Par Lem41, LinPar Lem42, and Lin Par Lem43. Beside of that, four auxiliary lemmas are also required. dec Angle_Eq_Lem : !(A : Point, C : Point, F : Point, G : Point, H : Point, I : Point) let AGI = @(ANGLE_SEG, G, A, I), AGH = @(ANGLE_SEG, G, A, H), GHF = @(ANGLE_SEG, H, G, F), CIH = @(ANGLE_SEG, I, C, H), IHF = @(ANGLE_SEG, H, I, F) in let GH = @(FLINE_SEG, G, H) in [@(On_FLine, I, GH) -> @(Eq_Angle, AGH, GHF) -> @(Eq_Angle, CIH, IHF) -> @(Eq_Angle, AGI, CIH)]; dec Sub_JP_FL_Lem1 : !(A : Point, B : Point, G let AB = @(FLINE_SEG, A, GH = @(FLINE_SEG, G, GI = @(FLINE_SEG, G, [@(On_FLine, I, GH) ->

: Point, H : Point, I : Point) B), H), I) in

Theorems Proven With Postulate 5

237

@(JP_FLine, G, AB, GH) -> @(JP_FLine, G, AB, GI)]; dec Sub_JP_FL_Lem2 : !(A : Point, B : Point, G : Point, H : Point, I : Point) let AB = @(FLINE_SEG, A, B), GH = @(FLINE_SEG, G, H), GI = @(FLINE_SEG, G, I) in [@(On_FLine, I, GH) -> @(JP_FLine, I, AB, GH) -> @(JP_FLine, I, AB, GI)]; dec Ext_Lin_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point, I : Point, H : Point) let GH = @(FLINE_SEG, G, H) in let AGI = @(ANGLE_SEG, G, A, I), DHI = @(ANGLE_SEG, H, D, I), AGH = @(ANGLE_SEG, G, A, H), DHG = @(ANGLE_SEG, H, D, G) in [@(On_FLine, I, GH) -> @(Eq_Angle, AGI, DHI) -> @(Eq_Angle, AGH, DHG)];

The proofs of lemmas Lin Par Lem41, Lin Par Lem42, and Lin Par Lem43 are given as follows: def Lin_Par_Lem41 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), EF = @(FLINE_SEG, E, F) in \(p1 : @(Parallel_FLine, AB, EF), p2 : @(Parallel_FLine, CD, EF)) \(q : @(In_Between_FLine, AB, CD, EF)) let G = @(FST, q), H = @(FST, @(SND, q)), I = @(FST, @(SND, @(SND, q))) in let r = @(SND, @(SND, @(SND, q))) in let GH = @(FLINE_SEG, G, H) in let U1 = @(On_FLine, I, GH), U2 = @(JP_FLine, G, AB, GH), U3 = @(JP_FLine, I, CD, GH), U4 = @(JP_FLine, H, EF, GH), u1 = @(PRO1, U1, @(And, U2, @(And, U3, U4)), r), u2 = @(PRO1,

Theorems Proven With Postulate 5

238

U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r)), u3 = @(PRO1, U3, U4, @(PRO2, U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r))), u4 = @(PRO2, U3, U4, @(PRO2, U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r))) in let s1 = @(Lin_Par_Thm20, A, B, E, F, G, H, G, H, p1, u2, u4), s2 = @(Lin_Par_Thm20, C, D, E, F, G, H, I, H, p2, u3, u4), t1 = @(Angle_Eq_Lem, A, C, F, G, H, I, u1, s1, s2), t2 = @(Lin_Ang_Thm2, C, D, G, H, I, u3) in let AGI = @(ANGLE_SEG, G, A, I), CIH = @(ANGLE_SEG, I, C, H), DIG = @(ANGLE_SEG, I, D, G), CIG = @(ANGLE_SEG, I, C, G), DIH = @(ANGLE_SEG, I, D, H) in let V1 = @(Eq_Angle, CIH, DIG), V2 = @(Eq_Angle, CIG, DIH), v1 = @(PRO1, V1, V2, t2), v2 = @(PRO2, V1, V2, t2) in let w = @(Eq_Angle_Tran, AGI, CIH, DIG, t1, v1) in @(Lin_Par_Thm12, A, B, C, D, G, I, G, I, @(Sub_JP_FL_Lem1, A, B, G, H, I, u1, u2), @(Sub_JP_FL_Lem2, C, D, G, H, I, u1, u3), w); def Lin_Par_Lem42 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B),

Theorems Proven With Postulate 5

239

CD = @(FLINE_SEG, C, D), EF = @(FLINE_SEG, E, F) in \(p1 : @(Parallel_FLine, AB, EF), p2 : @(Parallel_FLine, CD, EF)) \(q : @(In_Between_FLine, CD, AB, EF)) let r = @(Lin_Par_Lem41, C, D, A, B, E, F, p2, p1, q) in @(Par_FL_Symm, CD, AB, r); def Lin_Par_Lem43 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), EF = @(FLINE_SEG, E, F) in \(p1 : @(Parallel_FLine, AB, EF), p2 : @(Parallel_FLine, CD, EF)) \(q : @(In_Between_FLine, AB, EF, CD)) let G = @(FST, q), H = @(FST, @(SND, q)), I = @(FST, @(SND, @(SND, q))) in let r = @(SND, @(SND, @(SND, q))) in let GH = @(FLINE_SEG, G, H) in let U1 = @(On_FLine, I, GH), U2 = @(JP_FLine, G, AB, GH), U3 = @(JP_FLine, I, EF, GH), U4 = @(JP_FLine, H, CD, GH), u1 = @(PRO1, U1, @(And, U2, @(And, U3, U4)), r), u2 = @(PRO1, U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r)), u3 = @(PRO1, U3, U4, @(PRO2, U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r))), u4 = @(PRO2, U3, U4, @(PRO2, U2, @(And, U3, U4), @(PRO2, U1, @(And, U2, @(And, U3, U4)), r))) in let s1 = @(Lin_Par_Thm20, A, B, E, F, G, H, G, I, p1, u2, u3), s2 = @(Lin_Par_Thm20, E,

Theorems Proven With Postulate 5

240

F, C, D, G, H, I, H, @(Par_FL_Symm, CD, EF, p2), u3, u4) in let t = @(Lin_Ang_Thm2, E, F, G, H, I, u3) in let AGI = @(ANGLE_SEG, G, A, I), EIH = @(ANGLE_SEG, I, E, H), FIG = @(ANGLE_SEG, I, F, G), GIF = @(ANGLE_SEG, I, G, F), EIG = @(ANGLE_SEG, I, E, G), FIH = @(ANGLE_SEG, I, F, H), IHD = @(ANGLE_SEG, H, I, D), DHI = @(ANGLE_SEG, H, D, I) in let V1 = @(Eq_Angle, EIH, FIG), V2 = @(Eq_Angle, EIG, FIH), v1 = @(PRO1, V1, V2, t), v2 = @(PRO2, V1, V2, t), w1 = @(Angle_Symm, F, I, G), w2 = @(Eq_Angle_Tran, EIH, FIG, GIF, v1, w1), w3 = @(Eq_Angle_Sym, EIH, GIF, w2), w4 = @(Eq_Angle_Tran, AGI, GIF, EIH, s1, w3), w5 = @(Angle_Symm, I, H, D), w6 = @(Eq_Angle_Tran, EIH, IHD, DHI, s2, w5), w7 = @(Eq_Angle_Tran, AGI, EIH, DHI, w4, w6), w8 = @(Ext_Lin_Lem, A, B, C, D, E, F, G, I, H, u1, w7) in @(Lin_Par_Thm12, A, B, C, D, G, H, G, H, u2, u4, w8);

To prove the theorem Lin Par Thm4, we need a special form of ExcludedMiddle Rule for finite straight lines a, b and c. dec Excl_Bet_FLine : !(a : Finite_Line, b : @(Or32, @(In_Between_FLine, @(In_Between_FLine, @(In_Between_FLine,

Finite_Line, c : Finite_Line) a, b, c), b, a, c), a, c, b));

We then will be able prove the theorem Lin Par Thm4. def Lin_Par_Thm4 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point)

Theorems Proven With Postulate 5

241

let AB = @(FLINE_SEG, A, B), CD = @(FLINE_SEG, C, D), EF = @(FLINE_SEG, E, F) in \(p1 : @(Parallel_FLine, AB, EF), p2 : @(Parallel_FLine, CD, EF)) @(WHEN32, @(In_Between_FLine, AB, CD, EF), @(In_Between_FLine, CD, AB, EF), @(In_Between_FLine, AB, EF, CD), @(Parallel_FLine, AB, CD), @(Excl_Bet_FLine, AB, CD, EF), \(u : @(In_Between_FLine, AB, CD, EF)) @(Lin_Par_Lem41, A, B, C, D, E, F, p1, p2, u), \(u : @(In_Between_FLine, CD, AB, EF)) @(Lin_Par_Lem42, A, B, C, D, E, F, p1, p2, u), \(u : @(In_Between_FLine, AB, EF, CD)) @(Lin_Par_Lem43, A, B, C, D, E, F, p1, p2, u));

8.3

Theorem 32

Theorem 32 Theorem 8.3 In any triangle, if one of the sides be produced, 1. the exterior angle is equal to the two interior and opposite angles, and 2. the three interior angles of the triangle are equal to two right angles. This is a surprising theorem. Triangles don’t all have the same angles, or sides, or permiters, or areas, so why should they have the angle-sum?

Proof 1. Let ABC be a triangle with, say, BC produced to D. (Hypothesis) 2. Through C draw CE parallel to AB. (Theorem 31) 3.

̸

BAC =

̸

ACE. (Theorem 29 (AC on AB ∥ CE))

4.

̸

ABC =

̸

ECD. (Theorem 29 (BD on AB ∥ CE))

5.

̸

BAC +

̸

ABC =

̸

ACE +

6.

̸

ACD =

̸

ACE +

̸

ECD. (Algebraic Properties)

7.

̸

ACD =

̸

BAC +

̸

ABC. (5, 6, Algebraic Properties)

8.

̸

ACB =

̸

ACB. (Algebraic Properties)

9.

̸

ACB +

̸

ACD =

̸

ACB +

̸

̸

ECD. (3, 4, Algebraic Properties)

BAC +

̸

ABC (7, 8, Algebraic Properties)

Theorems Proven With Postulate 5

10.

̸

ACB +

ACD = 180o . (Theorem 13) ̸

11. Therefore

242

̸

ACB +

̸

BAC +

̸

ABC = 180o . (9, 10, Algebraic Properties)

The dependence of Postulate 5 is in step 3 and 4.

Theorem 32 in PowerEpsilon In terms of PowerEpsilon, we have dec Tri_Par_Thm : !(t : Triangle, D : Point) let A = @(GET_TRI_A, t), B = @(GET_TRI_B, t), C = @(GET_TRI_C, t) in let ABC = @(GET_TRI_ABC, t), BCA = @(GET_TRI_BCA, t), CAB = @(GET_TRI_CAB, t) in [@(In_Between, C, B, D) -> let ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in let acd = @(GET_ANGLE, ACD) in @(And, @(RREq, acd, @(RRADD, cab, abc)), @(RREq, @(RRADD, abc, @(RRADD, bca, cab)), RRPI))];

Alternatively, the theorem can be expressed in terms of Point. dec Tri_Par_Thm1 : !(A : Point, B : Point, C : Point, D : Point) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B) in [@(In_Between, C, B, D) -> let ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB) in let acd = @(GET_ANGLE, ACD) in @(And, @(RREq, acd, @(RRADD, cab, abc)), @(RREq, @(RRADD, abc, @(RRADD, bca, cab)), RRPI))]; dec Tri_Par_Thm3 : !(A : Point, B : Point, C : Point, D : Point)

Theorems Proven With Postulate 5

243

[@(In_Between, C, B, D) -> let ABC = @(ANGLE_SEG, B, A, C), ACB = @(ANGLE_SEG, C, A, B), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), acb = @(GET_ANGLE, ACB), cab = @(GET_ANGLE, CAB), acd = @(GET_ANGLE, ACD) in @(And, @(RREq, acd, @(RRADD, cab, abc)), @(RREq, @(RRADD, acb, @(RRADD, cab, abc)), RRPI))];

Proof in PowerEpsilon The following lemmas say that if a point A is the extremities of two finite straight lines, then A is also the joint-point of these two lines. dec JP_FLine_LemC4 : !(C : Point, E : Point, B : Point, D : Point) [@(In_Between, C, B, D) -> let EC = @(FLINE_SEG, E, C), BD = @(FLINE_SEG, B, D) in @(JP_FLine, C, EC, BD)]; dec JP_FLine_LemC5 : !(A : Point, B : Point, C : Point, D : Point) [@(In_Between, C, B, D) -> let AC = @(FLINE_SEG, A, C), BD = @(FLINE_SEG, B, D) in @(JP_FLine, C, AC, BD)];

The following lemma represents the commutativity of two parallel finite straight lines. dec Par_FLine_Comm : !(A : Point, B : Point, C let AB = @(FLINE_SEG, A, CD = @(FLINE_SEG, C, BA = @(FLINE_SEG, B, DC = @(FLINE_SEG, D, [@(Parallel_FLine, AB,

: Point, D : Point) B), D), A), C) in CD) -> @(Parallel_FLine, BA, DC)];

Three auxiliary lemmas are presented below. dec Tri_Par_Lem1 :

Theorems Proven With Postulate 5

!(A : Point, B : Point, C : Point, D : Point, E : Point) let BAC = @(ANGLE_SEG, A, B, C), ABC = @(ANGLE_SEG, B, A, C), ACE = @(ANGLE_SEG, C, A, E), ECD = @(ANGLE_SEG, C, E, D) in let bac = @(GET_ANGLE, BAC), abc = @(GET_ANGLE, ABC), ace = @(GET_ANGLE, ACE), ecd = @(GET_ANGLE, ECD) in [@(Eq_Angle, BAC, ACE) -> @(Eq_Angle, ABC, ECD) -> @(RREq, @(RRADD, bac, abc), @(RRADD, ace, ecd))]; dec Tri_Par_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) [@(In_Between, C, B, D) -> let AB = @(FLINE_SEG, A, B), EC = @(FLINE_SEG, E, C) in @(Parallel_FLine, AB, EC) -> let ACE = @(ANGLE_SEG, C, A, E), ECD = @(ANGLE_SEG, C, E, D), ACD = @(ANGLE_SEG, C, A, D) in let ace = @(GET_ANGLE, ACE), ecd = @(GET_ANGLE, ECD), acd = @(GET_ANGLE, ACD) in @(RREq, acd, @(RRADD, ace, ecd))]; dec Tri_Par_Lem3 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BAC = @(ANGLE_SEG, A, B, C), CAB = @(ANGLE_SEG, A, C, B), ABC = @(ANGLE_SEG, B, A, C) in let bac = @(GET_ANGLE, BAC), cab = @(GET_ANGLE, CAB), abc = @(GET_ANGLE, ABC) in @(RREq, @(RRADD, bac, abc), @(RRADD, cab, abc));

Two lemmas which constitute the major parts of the proof are proven. def Tri_Par_Lem21 = \(A : Point, B : Point, C : Point, D : Point) \(p : @(In_Between, C, B, D)) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA),

244

Theorems Proven With Postulate 5

245

cab = @(GET_ANGLE, CAB), acd = @(GET_ANGLE, ACD) in let q = @(Lin_Par_Thm42, A, B, C) in let E = @(FST, q), e = @(SND, q) in let q1 = @(JP_FLine_Lem5, A, B, C), q2 = @(JP_FLine_Lem4, C, E, A), q3 = @(JP_FLine_Lem1, A, B, D), q4 = @(JP_FLine_LemC4, C, E, B, D, p) in let r1 = @(Lin_Par_Thm20, B, A, C, E, A, C, A, C, @(Par_FLine_Comm, A, B, E, C, e), q1, q2), r2 = @(Lin_Par_Thm21, A, B, E, C, B, D, B, C, e, q3, q4) in let BAC = @(ANGLE_SEG, A, B, C), ABC = @(ANGLE_SEG, B, A, C), ACE = @(ANGLE_SEG, C, A, E), ECD = @(ANGLE_SEG, C, E, D) in let bac = @(GET_ANGLE, BAC), abc = @(GET_ANGLE, ABC), ace = @(GET_ANGLE, ACE), ecd = @(GET_ANGLE, ECD) in let u1 = @(Tri_Par_Lem1, A, B, C, D, E, r1, r2), u2 = @(Tri_Par_Lem2, A, B, C, D, E, p, e), u3 = @(RRSymm, @(RRADD, bac, abc), @(RRADD, ace, ecd), u1), u4 = @(RRTran, acd, @(RRADD, ace, ecd), @(RRADD, bac, abc), u2, u3), u5 = @(Tri_Par_Lem3, A, B, C, D, E) in @(RRTran, acd, @(RRADD, bac, abc), @(RRADD, cab, abc), u4, u5); def Tri_Par_Lem22 = \(A : Point, B : Point, C : Point, D : Point) \(p : @(In_Between, C, B, D)) let ABC = @(ANGLE_SEG, B, A, C), BCA = @(ANGLE_SEG, C, B, A), CAB = @(ANGLE_SEG, A, C, B), ACB = @(ANGLE_SEG, C, A, B), ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), bca = @(GET_ANGLE, BCA), cab = @(GET_ANGLE, CAB), acb = @(GET_ANGLE, ACB), acd = @(GET_ANGLE, ACD) in let q1 = @(Ang_Sum_Thm2, A, C,

Theorems Proven With Postulate 5

246

B, D, @(JP_FLine_LemC5, A, B, C, D, p)), q2 = @(Tri_Par_Lem21, A, B, C, D, p), q3 = @(RRRefl, acb), q4 = @(RREq_Add, acb, acb, acd, @(RRADD, cab, abc), q3, q2), q5 = @(RRSymm, @(RRADD, acb, acd), @(RRADD, acb, @(RRADD, cab, abc)), q4) in @(RRTran, @(RRADD, acb, @(RRADD, cab, abc)), @(RRADD, acb, acd), RRPI, q5, q1);

We then will be able to give the proof of Tri Par Thm3. def Tri_Par_Thm3 = \(A : Point, B : Point, C : Point, D : Point) \(p : @(In_Between, C, B, D)) let ABC = @(ANGLE_SEG, B, A, C), ACB = @(ANGLE_SEG, C, A, B), CAB = @(ANGLE_SEG, A, C, B), ACD = @(ANGLE_SEG, C, A, D) in let abc = @(GET_ANGLE, ABC), acb = @(GET_ANGLE, ACB), cab = @(GET_ANGLE, CAB), acd = @(GET_ANGLE, ACD) in let U1 = @(RREq, acd, @(RRADD, cab, abc)), U2 = @(RREq, @(RRADD, acb, @(RRADD, cab, abc)), RRPI) in let u1 = @(Tri_Par_Lem21, A, B, C, D, p), u2 = @(Tri_Par_Lem22, A, B, C, D, p) in @(PRODUCT, U1, U2, u1, u2);

8.4

Theorem 34

In Theorem 34 Euclid starts talking about parallelograms without ever having said what “parallelograms” are, but the notion is clear from his subsequent use of the term.

Theorems Proven With Postulate 5

247

Theorem 34 Theorem 8.4 In any parallelogram the opposite sides and angles are equal to one another, and the diagonal bisects the area.

Proof 1. Let ABCD be a parallelogram with AB ∥ DC, AD ∥ BC in which, say, BD is the diagonal that has been drawn. We will show that AB = DC, AD = BC, ̸ A = ̸ C, ̸ ADC = ̸ ABC, and area of △ ADB = area △ BDC. The informal proof is left to reader as an exercise.

Theorem 34 in PowerEpsilon In terms of PowerEpsilon, we have dec Quad_Par_Thm : !(q : Quad) [@(Parallelogram, q) -> let A = @(GET_QUAD_A, q), B = @(GET_QUAD_B, q), C = @(GET_QUAD_C, q), D = @(GET_QUAD_D, q) in let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CD = @(DISTANCE, C, D), DA = @(DISTANCE, D, A) in let ABC = @(ANGLE_SEG, B, A, C), BCD = @(ANGLE_SEG, C, B, D), CDA = @(ANGLE_SEG, D, C, A), DAB = @(ANGLE_SEG, A, D, B) in let TADB = @(TRIANGLE_SEG, A, D, B), TBDC = @(TRIANGLE_SEG, B, D, C) in let tadb = @(TRI_AREA, TADB), tbdc = @(TRI_AREA, TBDC) in @(And, @(And, @(RREq, AB, CD), @(RREq, BC, DA)), @(And, @(And, @(Eq_Angle, ABC, CDA), @(Eq_Angle, BCD, DAB)), @(RREq, tadb, tbdc)))];

Alternatively, the theorem can be expressed in terms of Point. dec Quad_Par_Thm1 : !(A : Point, B : Point, C : Point, D : Point) [@(Parallelogram2, A, B, C, D) ->

Theorems Proven With Postulate 5

let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CD = @(DISTANCE, C, D), DA = @(DISTANCE, D, A) in let ABC = @(ANGLE_SEG, B, A, C), BCD = @(ANGLE_SEG, C, B, D), CDA = @(ANGLE_SEG, D, C, A), DAB = @(ANGLE_SEG, A, D, B) in let TADB = @(TRIANGLE_SEG, A, D, B), TBDC = @(TRIANGLE_SEG, B, D, C) in let tadb = @(TRI_AREA, TADB), tbdc = @(TRI_AREA, TBDC) in @(And, @(And, @(RREq, AB, CD), @(RREq, BC, DA)), @(And, @(And, @(Eq_Angle, ABC, CDA), @(Eq_Angle, BCD, DAB)), @(RREq, tadb, tbdc)))]; dec Quad_Par_Thm10 : !(A : Point, B : Point, C : Point, D : Point) [@(Parallelogram2, A, B, C, D) -> let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CD = @(DISTANCE, C, D), DA = @(DISTANCE, D, A) in @(And, @(RREq, AB, CD), @(RREq, BC, DA))]; dec Quad_Par_Thm11 : !(A : Point, B : Point, C : Point, D : Point) [@(Parallelogram2, A, B, C, D) -> let TADB = @(TRIANGLE_SEG, A, D, B), TBDC = @(TRIANGLE_SEG, B, D, C) in let tadb = @(TRI_AREA, TADB), tbdc = @(TRI_AREA, TBDC) in @(RREq, tadb, tbdc)]; dec Quad_Par_Thm12 : !(A : Point, B : Point, C : Point, D : Point) [@(Parallelogram2, A, B, C, D) -> let TADC = @(TRIANGLE_SEG, A, D, C), TABC = @(TRIANGLE_SEG, A, B, C) in let tadc = @(TRI_AREA, TADC), tabc = @(TRI_AREA, TABC) in let tabcd = @(QUAD_AREA, @(QUAD_SEG, A, B, C, D)) in @(RREq, tadc, @(RRDIV, tabcd, RRTWO))]; dec Quad_Par_Thm13 : !(A : Point, B : Point, C : Point, D : Point) [@(Parallelogram2, A, B, C, D) ->

248

Theorems Proven With Postulate 5

249

let TADB = @(TRIANGLE_SEG, A, D, B), TBDC = @(TRIANGLE_SEG, B, D, C) in let tadb = @(TRI_AREA, TADB), tbdc = @(TRI_AREA, TBDC) in let tabcd = @(QUAD_AREA, @(QUAD_SEG, A, B, C, D)) in @(RREq, tbdc, @(RRDIV, tabcd, RRTWO))];

Proof in PowerEpsilon To prove Quad Par Thm10, we need to prove three trivial lemmas described as follows. dec FLine_Eq_Symm1 : !(A : Point, B : Point, C : Point, D : Point) let ab = @(DISTANCE, A, B), cd = @(DISTANCE, C, D), ba = @(DISTANCE, B, A), dc = @(DISTANCE, D, C) in [@(RREq, ba, dc) -> @(RREq, ab, cd)]; dec FLine_Eq_Symm2 : !(A : Point, B : Point, C : Point, D : Point) let bc = @(DISTANCE, B, C), da = @(DISTANCE, D, A), ad = @(DISTANCE, A, D), cb = @(DISTANCE, C, B) in [@(RREq, ad, cb) -> @(RREq, bc, da)]; dec FLine_Ref_Lem : !(B : Point, D : Point) let BD = @(DISTANCE, B, D), DB = @(DISTANCE, D, B) in @(RREq, DB, BD);

With these lemmas in hands, we will be able to give the proof of Quad ParThm10. def Quad_Par_Thm10 = \(A : Point, B : Point, C : Point, D : Point) \(p : @(Parallelogram2, A, B, C, D)) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), CD = @(FLINE_SEG, C, D), DA = @(FLINE_SEG, D, A) in let ab = @(DISTANCE, A, B), bc = @(DISTANCE, B, C), cd = @(DISTANCE, C, D), da = @(DISTANCE, D, A) in let ABC = @(ANGLE_SEG, B, A, C), BCD = @(ANGLE_SEG, C, B, D),

Theorems Proven With Postulate 5

250

CDA = @(ANGLE_SEG, D, C, A), DAB = @(ANGLE_SEG, A, D, B) in let TADB = @(TRIANGLE_SEG, A, D, B), TBDC = @(TRIANGLE_SEG, B, D, C), tadb = @(TRI_AREA, TADB), tbdc = @(TRI_AREA, TBDC) in let P1 = @(Parallel_FLine, AB, CD), P2 = @(Parallel_FLine, BC, DA), p1 = @(PRO1, P1, P2, p), p2 = @(PRO2, P1, P2, p), q1 = @(Par_Lin_Symm1, A, B, C, D, p1), q2 = @(JP_FLine_Lem1, A, B, D), q3 = @(JP_FLine_Lem2, B, C, D), q4 = @(Par_Lin_Symm2, A, B, C, D, p2), q5 = @(JP_FLine_Lem3, A, B, D), q6 = @(JP_FLine_Lem4, B, C, D), q7 = @(Lin_Par_Thm20, A, B, D, C, B, D, B, D, q1, q2, q3), q8 = @(Lin_Par_Thm20, A, D, B, C, D, B, D, B, q4, q5, q6) in let r1 = @(Angle_Eq_Symm1, A, B, C, D, q8), r2 = @(Angle_Eq_Symm2, A, B, C, D, q7), r3 = @(FLine_Ref_Lem, B, D) in let s = @(ASA_Thm2, A, D, B, C, B, D, r1, r2, r3) in let s1 = @(TC_Cond1, A, D, B, C, B, D, s), s2 = @(TC_Cond2, A, D, B, C, B, D, s), s3 = @(TC_Cond3, A, D, B, C, B, D, s), s4 = @(TC_Cond4, A, D, B, C, B, D, s), s5 = @(TC_Cond5, A, D, B, C, B, D, s), s6 = @(TC_Cond6, A, D, B, C, B, D, s) in let T1 = @(RREq, ab, cd), T2 = @(RREq, bc, da), t1 = @(FLine_Eq_Symm1, A, B, C, D, s3), t2 = @(FLine_Eq_Symm2, A, B, C, D, s1) in @(PRODUCT, T1, T2, t1, t2);

8.5

Theorem 35

Theorem 35 through 41 are the closest Euclid ever comes to stating the familiar formulas of modern textbooks, “the area of a parallelogram is the product of its base and altitude” and “the area of a triangle is half the product of its base and altitude”. Of these theorems we will consider only 35, 37, and 41.

Theorem 35 Theorem 8.5 Parallelogram which are on the same base and in the same parallels are equal to one another.

Theorems Proven With Postulate 5

251

Let ABCD and EFCD be the parallelograms “on the same base” DC and “in the same parallels” AF and DC. For each case the theorem concludes that ABCD and EFCD “are equal to one another”, i.e., that their areas are equal. The cases differ in the relative positions of B and E on AF.

Proof of the First Case 1. Let ABCD and EFCD be parallelograms on the same base DC and in the same parallels AF and DC, with B between A and E. (Hypothesis) 2. DE intersects BC in a point G. (Postulate 7 (2)) 3. AB = DC. (Theorem 34) 4. EF = DC. (Theorem 34) 5. AB = EF. (3, 4, Algebraic Properties) 6. BE = BE. (Algebraic Properties) 7. AE = BF. (5, 6, Algebraic Properties) 8. AD is parallel to BC. (Definition of “Parallelogram”) 9.

̸

BAD =

̸

FBC. (Theorem 29 (AF on AD ∥ BC))

10. AD = BC. (Theorem 34) 11. Triangles ADE and BCF are congruent. (7, 9, 10, SAS) 12. The area of △ ADE = area △ BCF. (Postulate 9) 13. The area of △ BGE = area △ BGE. (Algebraic Property) 14. The area of ABGD = area EFCG. (12, 13, Algebraic Properties) 15. The area of △ GDC = area △ GDC. (Algebraic Property) 16. Therefore, area of ABCD = area of EFCD. (14, 15, Algebraic Properties)

Theorem 35 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Quad Par Thm2 need to be proven. dec Quad_Par_Thm2 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in [@(On_FLine, B, AF) ->

Theorems Proven With Postulate 5

252

@(On_FLine, E, AF) -> @(Parallel_FLine, AF, CD) -> @(Parallelogram2, A, B, C, D) -> @(Parallelogram2, E, F, C, D) -> let q1 = @(QUAD_SEG, A, B, C, D), q2 = @(QUAD_SEG, E, F, C, D) in @(RREq, @(QUAD_AREA, q1), @(QUAD_AREA, q2))];

Proof in PowerEpsilon The following is a rather complicated lemma which confirms that the points B and C are in the different side of finite straight line DE if certain conditions are met. dec Diff_FSide_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(Parallel_FLine, AF, CD) -> @(Parallelogram2, A, B, C, D) -> @(Parallelogram2, E, F, C, D) -> @(In_Between, B, A, E) -> let DE = @(FLINE_SEG, D, E) in @(In_Diff_FSide, B, C, DE)];

The following lemma is rather simple and easy which says that if point B is on AF then B is a joint-point of BC and FA. dec JP_FLine_LemO : !(B : Point, C : Point, F let AF = @(FLINE_SEG, A, FA = @(FLINE_SEG, F, BC = @(FLINE_SEG, B, [@(On_FLine, B, AF) ->

: Point, A : Point) F), A), C) in @(JP_FLine, B, BC, FA)];

Lemma FLine Ext Lem says that if the points B and E are on AF, and B is in between A and E, and AB is equal to EF, then EA is equal to FB. dec FLine_Ext_Lem : !(A : Point, B : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F) in let EA = @(DISTANCE, E, A), FB = @(DISTANCE, F, B), AB = @(DISTANCE, A, B),

Theorems Proven With Postulate 5

253

̸

EF = @(DISTANCE, E, F) in [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(In_Between, B, A, E) -> @(RREq, AB, EF) -> @(RREq, EA, FB)];

Lemma Ang Ext Lem says that if the point B is in between A and E, and angle FBC is equal to ̸ BAD, then ̸ EAD is equal to ̸ FBC. dec Ang_Ext_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let FBC = @(ANGLE_SEG, B, F, C), BAD = @(ANGLE_SEG, A, B, D), EAD = @(ANGLE_SEG, A, E, D) in [@(In_Between, B, A, E) -> @(Eq_Angle, FBC, BAD) -> @(Eq_Angle, EAD, FBC)];

The following lemma is actually a tautology. dec Ang_Symm_Lem : !(A : Point, B : Point, C : Point, D : Point) let DA = @(FLINE_SEG, D, A), AD = @(FLINE_SEG, A, D), BC = @(FLINE_SEG, B, C) in [@(Eq_FLine, BC, DA) -> @(RREq, @(DISTANCE, A, D), @(DISTANCE, B, C))];

The following is the main lemma we need to prove the final result. dec Quad_Par_Lem21 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point) let ADE = @(TRIANGLE_SEG, A, D, E), BCF = @(TRIANGLE_SEG, B, C, F) in let tade = @(TRI_AREA, ADE), tbcf = @(TRI_AREA, BCF) in let BC = @(FLINE_SEG, B, C), DE = @(FLINE_SEG, D, E) in let ABCD = @(QUAD_SEG, A, B, C, D), EFCD = @(QUAD_SEG, E, F, C, D) in let tabcd = @(QUAD_AREA, ABCD), tefcd = @(QUAD_AREA, EFCD) in [@(RREq, tade, tbcf) -> @(And, @(On_FLine, G, BC), @(On_FLine, G, DE)) ->

Theorems Proven With Postulate 5

254

@(RREq, tabcd, tefcd)];

The following is a specialized Excluded-Middle Rule which states that for two points B and E on a finite straight line AF, we will have, either B is equal to E, or B is in between A and E, or E is in between A and B. dec Excl_Pnt_Lin : !(A : Point, B : Point, E let AF = @(FLINE_SEG, A, [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(Or32, @(In_Between, B, A, @(Eq_Point, B, E), @(In_Between, E, A,

: Point, F : Point) F) in

E), B))];

To prove Quad Par Thm2, we first need to introduce three lemmas Quad ParThm21, Quad Par Thm22 and Quad Par Thm23 for three different cases. dec Quad_Par_Thm21 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(Parallel_FLine, AF, CD) -> @(Parallelogram2, A, B, C, D) -> @(Parallelogram2, E, F, C, D) -> @(In_Between, B, A, E) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, B, C, D)), @(QUAD_AREA, @(QUAD_SEG, E, F, C, D)))]; dec Quad_Par_Thm22 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(Parallel_FLine, AF, CD) -> @(Parallelogram2, A, B, C, D) -> @(Parallelogram2, E, F, C, D) -> @(Eq_Point, B, E) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, B, C, D)), @(QUAD_AREA, @(QUAD_SEG, E, F, C, D)))]; dec Quad_Par_Thm23 : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F),

Theorems Proven With Postulate 5

CD = @(FLINE_SEG, C, D) in [@(On_FLine, B, AF) -> @(On_FLine, E, AF) -> @(Parallel_FLine, AF, CD) -> @(Parallelogram2, A, B, C, D) @(Parallelogram2, E, F, C, D) @(In_Between, E, A, B) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, @(QUAD_AREA, @(QUAD_SEG, E,

255

-> ->

B, C, D)), F, C, D)))];

def Quad_Par_Thm21 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in \(p1 : @(On_FLine, B, AF), p2 : @(On_FLine, E, AF), p3 : @(Parallel_FLine, AF, CD), p4 : @(Parallelogram2, A, B, C, D), p5 : @(Parallelogram2, E, F, C, D)) let q1 = @(QUAD_SEG, A, B, C, D), q2 = @(QUAD_SEG, E, F, C, D) in \(q : @(In_Between, B, A, E)) let DE = @(FLINE_SEG, D, E) in let r1 = @(Diff_FSide_Lem, A, B, C, D, E, F, p1, p2, p3, p4, p5, q), r2 = @(LineAxm21, B, C, DE, r1), r3 = @(Quad_Par_Thm10, A, B, C, D, p4), r4 = @(Quad_Par_Thm10, E, F, C, D, p5) in let AB = @(FLINE_SEG, A, B), EF = @(FLINE_SEG, E, F), CD = @(FLINE_SEG, C, D), BC = @(FLINE_SEG, B, C), FC = @(FLINE_SEG, F, C), DA = @(FLINE_SEG, D, A), ab = @(DISTANCE, A, B), ef = @(DISTANCE, E, F), cd = @(DISTANCE, C, D), bc = @(DISTANCE, B, C), fc = @(DISTANCE, F, C), de = @(DISTANCE, D, E), da = @(DISTANCE, D, A) in let S1 = @(RREq, ab, cd), S2 = @(RREq, ef, cd), S3 = @(RREq, bc, da), S4 = @(RREq, fc, de), s1 = @(PRO1, S1, S3, r3), s3 = @(PRO2, S1, S3, r3), s2 = @(PRO1, S2, S4, r4), s4 = @(PRO2, S2, S4, r4) in let t = @(RRTran, ab, cd, ef, s1, @(RRSymm, ef, cd, s2)) in let U1 = @(Parallel_FLine, AB, CD), U2 = @(Parallel_FLine, BC, DA),

Theorems Proven With Postulate 5

u1 u2 let v1 v2

= = = =

@(PRO1, U1, U2, p4), @(PRO2, U1, U2, p4) in @(FLine_Ext_Lem, A, B, E, F, p1, p2, q, t), @(Lin_Par_Thm22, B, C, A, D, F, A, B, A, @(Par_Lin_Symm3, A, B, C, D, u2), @(JP_FLine_LemO, B, C, F, A, p1), @(JP_FLine_Lem4, A, D, F)), v3 = @(Ang_Ext_Lem, A, B, C, D, E, F, q, v2), v4 = @(SAS_Thm3, A, D, E, B, C, F, @(Ang_Symm_Lem, A, B, C, D, s3), v1, v3), v5 = @(Tri_Cong_Axm2, A, D, E, B, C, F, v4) in let G = @(FST, r2), g = @(SND, r2) in @(Quad_Par_Lem21, A, B, C, D, E, F, G, v5, g);

We then will be able to prove the theorem Quad Par Thm2. def Quad_Par_Thm2 = \(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point) let AF = @(FLINE_SEG, A, F), CD = @(FLINE_SEG, C, D) in \(p1 : @(On_FLine, B, AF), p2 : @(On_FLine, E, AF), p3 : @(Parallel_FLine, AF, CD), p4 : @(Parallelogram2, A, B, C, D), p5 : @(Parallelogram2, E, F, C, D)) let q1 = @(QUAD_SEG, A, B, C, D), q2 = @(QUAD_SEG, E, F, C, D), r1 = @(QUAD_AREA, q1), r2 = @(QUAD_AREA, q2) in @(WHEN32, @(In_Between, B, A, E), @(Eq_Point, B, E), @(In_Between, E, A, B), @(RREq, r1, r2), @(Excl_Pnt_Lin, A, B, E, F, p1, p2),

256

Theorems Proven With Postulate 5

257

\(u : @(In_Between, B, A, E)) @(Quad_Par_Thm21, A, B, C, D, E, F, p1, p2, p3, p4, p5, u), \(u : @(Eq_Point, B, E)) @(Quad_Par_Thm22, A, B, C, D, E, F, p1, p2, p3, p4, p5, u), \(u : @(In_Between, E, A, B)) @(Quad_Par_Thm23, A, B, C, D, E, F, p1, p2, p3, p4, p5, u));

8.6

Theorem 37

Theorem 37 Theorem 8.6 Triangles which are on the same base and in the same parallels are equal to one another.

Proof 1. Let ABC and DBC be triangles on the same base BC and in the same parallels AD and BC. 2. Through B draw BE parallel to AC; though C draw CF parallel to BD. (Theorem 31) 3. Present that BE and DA, no matter how much they are produced, will never intersect. (RAA Hypothesis) 4. Then BE ∥ DA. (Definition of “Parallel”) 5. But BC ∥ DA. (1) 6. Therefore BE ∥ BC. (4, 5, Theorem 30) 7. But BE and BC intersect at point B. (2) 8. Contradiction. (6, 7) 9. Therefore BE and DA, if produced sufficiently, will intersect at a point we can call G. (3-8, Logic; Postulate 2) 10. Similarly, CF and AD, if produced sufficiently, will intersect as a point we can call H. (Imitate Steps 3-9) 11. GACB and DHCB are parallelograms. (1 (AD ∥ BC), 2, 9, 10, Definition “Paralellogram”) 12. The area of GACB = area of DGCB. (Theorem 35) 13.

1 2

(area of GACB) =

1 2

(area of DHCB). (12, Algebraic Properties)

Theorems Proven With Postulate 5

258

14. area of triangle ABC =

1 2

(area of GACB). (Theorem 34)

15. area of triangle ABC =

1 2

(area of DHCB). (13, 14, Algebraic Properties)

16. area of triangle DBC =

1 2

(area of DHCB). (Theorem 34)

17. Therefore, area of triangle ABC = (area of triangle DBC). (15, 16, Algebraic Properties)

Theorem 37 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Tri Par Thm2 need to be proven. dec Tri_Par_Thm2 : !(A : Point, B : Point, C : Point, D : Point) let AD = @(FLINE_SEG, A, D), BC = @(FLINE_SEG, B, C) in [@(Parallel_FLine, AD, BC) -> let t1 = @(TRIANGLE_SEG, A, C, B), t2 = @(TRIANGLE_SEG, D, B, C) in @(RREq, @(TRI_AREA, t1), @(TRI_AREA, t2))]; dec Tri_Par_Thm20 : !(A : Point, B : Point, C : Point, D : Point) let AD = @(FLINE_SEG, A, D), BC = @(FLINE_SEG, B, C) in [@(Parallel_FLine, AD, BC) -> let t1 = @(TRIANGLE_SEG, A, B, C), t2 = @(TRIANGLE_SEG, D, B, C) in @(RREq, @(TRI_AREA, t1), @(TRI_AREA, t2))];

Proof in PowerEpsilon dec Tri_Par_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BA = @(FLINE_SEG, B, A), CD = @(FLINE_SEG, C, D) in [@(Parallel_FLine, BA, CD) -> ?(G : Point, I : Point, J : Point) let AI = @(FLINE_SEG, A, I), CJ = @(FLINE_SEG, C, J) in @(And, @(JP_FLine, G, AI, CJ),

Theorems Proven With Postulate 5

@(And, @(In_Between, A, G, E), @(And, @(In_Between, G, I, A), @(In_Between, D, G, C))))]; dec Tri_Par_Cond1 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BA = @(FLINE_SEG, B, A), CD = @(FLINE_SEG, C, D) in !(p : @(Parallel_FLine, BA, CD)) let q = @(Tri_Par_Lem, A, B, C, D, E, p) in let G = @(FST, q), I = @(FST, @(SND, q)), J = @(FST, @(SND, @(SND, q))), g = @(SND, @(SND, @(SND, q))) in let AI = @(FLINE_SEG, D, I), CJ = @(FLINE_SEG, C, J) in @(JP_FLine, G, AI, CJ); dec Tri_Par_Cond2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BA = @(FLINE_SEG, B, A), CD = @(FLINE_SEG, C, D) in !(p : @(Parallel_FLine, BA, CD)) let q = @(Tri_Par_Lem, A, B, C, D, E, p) in let G = @(FST, q) in @(In_Between, A, G, E); dec Tri_Par_Cond3 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BA = @(FLINE_SEG, B, A), CD = @(FLINE_SEG, C, D) in !(p : @(Parallel_FLine, BA, CD)) let q = @(Tri_Par_Lem, A, B, C, D, E, p) in let G = @(FST, q), I = @(FST, @(SND, q)) in @(In_Between, G, I, A); dec Tri_Par_Cond4 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let BA = @(FLINE_SEG, B, A), CD = @(FLINE_SEG, C, D) in !(p : @(Parallel_FLine, BA, CD)) let q = @(Tri_Par_Lem, A, B, C, D, E, p) in let G = @(FST, q) in @(In_Between, D, G, C);

259

Theorems Proven With Postulate 5

260

dec Par_Ext_Lem1 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in [@(Parallel_FLine, DE, AB) -> @(In_Between, B, C, A) -> @(Parallel_FLine, DE, AC)]; dec Par_Ext_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), AC = @(FLINE_SEG, A, C), DE = @(FLINE_SEG, D, E) in [@(Parallel_FLine, AB, DE) -> @(In_Between, A, C, B) -> @(Parallel_FLine, AC, DE)]; dec Par_Ext_Lem3 : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AB = @(FLINE_SEG, A, B), BC = @(FLINE_SEG, B, C), DE = @(FLINE_SEG, D, E), ED = @(FLINE_SEG, E, D) in [@(Parallel_FLine, AB, DE) -> @(In_Between, B, C, A) -> @(Parallel_FLine, BC, ED)]; dec Par_Ext_Lem41 : !(A : Point, D : Point, G : Point, H : Point) let GH = @(FLINE_SEG, G, H) in [@(In_Between, A, G, D) -> @(In_Between, D, H, A) -> @(On_FLine, A, GH)]; dec Par_Ext_Lem42 : !(A : Point, D : Point, G : Point, H : Point) let GH = @(FLINE_SEG, G, H) in [@(In_Between, A, G, D) -> @(In_Between, D, H, A) -> @(On_FLine, D, GH)]; dec Par_Ext_Lem43 : !(A : Point, D : Point, G let GH = @(FLINE_SEG, G, AD = @(FLINE_SEG, A, BC = @(FLINE_SEG, B,

: Point, H : Point, B : Point, C : Point) H), D), C),

Theorems Proven With Postulate 5

CB = @(FLINE_SEG, C, B) in [@(In_Between, A, G, D) -> @(In_Between, D, H, A) -> @(Parallel_FLine, AD, BC) -> @(Parallel_FLine, GH, CB)];

We then will be able to prove the theorem Tri Par Thm20. def Tri_Par_Thm20 = \(A : Point, B : Point, C : Point, D : Point) let AD = @(FLINE_SEG, A, D), BC = @(FLINE_SEG, B, C) in \(p : @(Parallel_FLine, AD, BC)) let ABC = @(TRIANGLE_SEG, A, B, C), DBC = @(TRIANGLE_SEG, D, B, C) in let p1 = @(Lin_Par_Thm41, C, A, B), p2 = @(Lin_Par_Thm41, B, D, C) in let E = @(FST, p1), e = @(SND, p1), F = @(FST, p2), f = @(SND, p2) in let q1 = @(Tri_Par_Lem, A, C, B, E, D, e), q2 = @(Tri_Par_Lem, D, B, C, F, A, f) in let G = @(FST, q1), H = @(FST, q2) in let g2 = @(Tri_Par_Cond2, A, C, B, E, D, e), h2 = @(Tri_Par_Cond2, D, B, C, F, A, f), g4 = @(Tri_Par_Cond4, A, C, B, E, D, e), h4 = @(Tri_Par_Cond4, D, B, C, F, A, f), r1 = @(Par_Ext_Lem1, B, E, G, C, A, e, g4), r2 = @(Par_Ext_Lem1, C, F, H, B, D, f, h4) in let GA = @(FLINE_SEG, G, A), CB = @(FLINE_SEG, C, B), AC = @(FLINE_SEG, A, C), BG = @(FLINE_SEG, B, G), DH = @(FLINE_SEG, D, H), HC = @(FLINE_SEG, H, C), BD = @(FLINE_SEG, B, D) in let s1 = @(PRODUCT, @(Parallel_FLine, GA, CB), @(Parallel_FLine, AC, BG), @(Par_Lin_Symm4, G, A, C, B, @(Par_Ext_Lem2, A, D, G, B, C, p, g2)), @(Par_Lin_Symm5, G, A, C, B, r1)), s2 = @(PRODUCT, @(Parallel_FLine, DH, CB), @(Parallel_FLine, HC, BD), @(Par_Ext_Lem3, A, D, H, B, C, p, h2), @(Par_Lin_Symm6, D, H, C, B, r2)), t1 = @(Par_Ext_Lem41, A, D, G, H, g2, h2),

261

Theorems Proven With Postulate 5

262

t2 = @(Par_Ext_Lem42, A, D, G, H, g2, h2), t3 = @(Par_Ext_Lem43, A, D, G, H, B, C, g2, h2, p) in let u = @(Quad_Par_Thm2, G, A, C, B, D, H, t1, t2, t3, s1, s2) in let gacb = @(QUAD_AREA, @(QUAD_SEG, G, A, C, B)), dhcb = @(QUAD_AREA, @(QUAD_SEG, D, H, C, B)) in let gacb2 = @(RRDIV, gacb, RRTWO), dhcb2 = @(RRDIV, dhcb, RRTWO) in let abc = @(TRI_AREA, ABC), dbc = @(TRI_AREA, DBC) in let v1 = @(RRDiv_Lem, gacb, dhcb, u), v2 = @(Quad_Par_Thm13, G, A, C, B, s1), v3 = @(Quad_Par_Thm12, D, H, C, B, s2) in @(RRTran, abc, gacb2, dbc, v2, @(RRTran, gacb2, dhcb2, dbc, v1, @(RRSymm, dbc, dhcb2, v3)));

8.7

Theorem 41

Theorem 41 Theorem 8.7 If a parallelogram have the same base with a triangle and be in the same parallels, the parallelogram is double of the triangle. Euclid’s conclusion is that the area of the parallelogram is double the area of the triangle.

Proof 1. Let ABCD be the parallelogram having the same base DC with the triangle EDC, and being in the same parallels AE and DC. (Hypothesis) 2. Draw AC. (Postulate 1) 3. The proof is easy to complete using Theorem 34 and 37.

Theorem 41 in PowerEpsilon In terms of PowerEpsilon, we have dec QT_Par_Thm : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AE = @(FLINE_SEG, A, E), DC = @(FLINE_SEG, D, C) in let q = @(QUAD_SEG, B, A, D, C) in

Theorems Proven With Postulate 5

263

[@(Parallelogram2, B, A, D, C) -> @(Parallel_FLine, AE, DC) -> let t = @(TRIANGLE_SEG, E, D, C) in @(RREq, @(QUAD_AREA, q), @(RRADD, @(TRI_AREA, t), @(TRI_AREA, t)))];

Proof in PowerEpsilon The proof of QT Par Thm is very straightforward and is listed below. We first need a lemma called QT Par Lem. dec QT_Par_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point) let AE = @(FLINE_SEG, A, E), DC = @(FLINE_SEG, D, C) in let q = @(QUAD_SEG, B, A, D, C) in [@(Parallelogram2, B, A, D, C) -> @(Parallel_FLine, AE, DC) -> let TBCA = @(TRIANGLE_SEG, B, C, A), TACD = @(TRIANGLE_SEG, A, C, D), TEDC = @(TRIANGLE_SEG, E, D, C) in let tbca = @(TRI_AREA, TBCA), tacd = @(TRI_AREA, TACD), tedc = @(TRI_AREA, TEDC) in [@(RREq, tbca, tacd) -> @(RREq, tacd, tedc) -> @(RREq, @(QUAD_AREA, q), @(RRADD, tedc, tedc))]]; def QT_Par_Thm = \(A : Point, B : Point, C : Point, D : Point, E : Point) let AE = @(FLINE_SEG, A, E), BA = @(FLINE_SEG, B, A), AD = @(FLINE_SEG, A, D), DC = @(FLINE_SEG, D, C), CB = @(FLINE_SEG, C, B) in let ae = @(DISTANCE, A, E), ba = @(DISTANCE, B, A), ad = @(DISTANCE, A, D), dc = @(DISTANCE, D, C), cb = @(DISTANCE, C, B) in let q = @(QUAD_SEG, B, A, D, C) in \(u : @(Parallelogram2, B, A, D, C), v : @(Parallel_FLine, AE, DC)) let t = @(TRIANGLE_SEG, E, C, D) in let s = @(Quad_Par_Thm1, B, A, D, C, u),

Theorems Proven With Postulate 5

264

r = @(Tri_Par_Thm2, A, D, C, E, v) in let BAD = @(ANGLE_SEG, A, B, D), ADC = @(ANGLE_SEG, D, A, C), DCB = @(ANGLE_SEG, C, D, B), CBA = @(ANGLE_SEG, B, C, A) in let TBCA = @(TRIANGLE_SEG, B, C, A), TACD = @(TRIANGLE_SEG, A, C, D) in let tbca = @(TRI_AREA, TBCA), tacd = @(TRI_AREA, TACD) in let S1 = @(And, @(RREq, ba, dc), @(RREq, ad, cb)), S2 = @(And, @(Eq_Angle, BAD, DCB), @(Eq_Angle, ADC, CBA)), S3 = @(RREq, tbca, tacd) in let s1 = @(PRO1, S1, @(And, S2, S3), s), s2 = @(PRO1, S2, S3, @(PRO2, S1, @(And, S2, S3), s)), s3 = @(PRO2, S2, S3, @(PRO2, S1, @(And, S2, S3), s)) in @(QT_Par_Lem, A, B, C, D, E, u, v, s3, r);

8.8

Theorem 46

Theorem 46 Theorem 8.8 On a given straight line it is possible to describe a square.

Proof 1. Let AB be the given straight line. (Hypothesis) 2. Through A draw a straight line perpendicular to AB, and produce it to C so that AC > AB. (Theorem 11, Postulate 2) 3. From AC cut off AD = AB. (Theorem 3) 4. Through D draw a straight line DE parallel to AB. (Theorem 31) 5. Through B draw a straight line BF parallel to AD. (Theorem 31) 6. Pretend that DE and BF, no matter how much they are produced, will never intersect. (RAA Hypothesis) 7. Then DE ∥ BF. (Definition “Parallel”) 8. But AD ∥ BF. (5) 9. Therefore DE ∥ AD. (7, 8, Theorem 30) 10. But DE and AD intersect at D. (4) 11. Contradiction. (9 and 10)

Theorems Proven With Postulate 5

265

12. Therefore DE and BF, if produced sufficiently, will intersect at a point we can call G. (6-11, Logic; Postulate 2) 13. DGBA is a parallelogram. (4, 5, 12, Definition “Parallelogram”) 14. Therefore DG = AB and DA = GB. (Theorem 34) 15. But DA = AB. (3) 16. Therefore the four sides of DGBA equal. (14, 15, Algebraic Properties) 17.

̸

A = 90o . (2)

18.

̸

A+

19.

̸

D = 90o . (17, 18, Algebraic Properties)

20.

̸

A=

D = 180o . (Theorem 29 (CA falling on DG ∥ AB))

̸

̸

G,

̸

D=

̸

B. (13, Theorem 34)

21. Therefore the four angles of DGBA are right. (17, 19, 20, Algebraic Properties) 22. Therefore DGBA is a square. (16, 21, Definition “Square”) The dependence on Postulate 5 is in step 9, 14, 18 and 20. This theorem guarantees that squares exist and consequently that the statement of the next theorem will make sense.

Theorem 46 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Lin Sqr Thm need to be proven. dec Lin_Sqr_Thm : !(a : Finite_Line) ?(q : Quad) @(Square, q);

Alternatively, the theorem can be expressed in terms of Point. dec Lin_Sqr_Thm2 : !(A : Point, B : Point) ?(D : Point, G : Point) @(Square2, A, B, D, G);

Theorems Proven With Postulate 5

Proof in PowerEpsilon To prove Lin Sqr Thm2, we need the following lemmas: dec Lin_Sqr_Lem21 : !(A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in let p = @(FLine_Seg_Lem, A, B) in let P1 = @(On_FLine, A, AB), P2 = @(On_FLine, B, AB) in let p1 = @(PRO1, P1, P2, p), p2 = @(PRO2, P1, P2, p) in let q = @(Right_Ang_Thm2, A, B, A, p1) in let H = @(FST, q), h = @(SND, q) in let s = @(IIAxm21, A, H, A, B) in let C = @(FST, s), c = @(SND, s) in let ab = @(DISTANCE, A, B), ac = @(DISTANCE, A, C) in let C1 = @(RRGs, ac, ab), C2 = @(In_Between, H, A, C) in let c1 = @(PRO1, C1, C2, c), c2 = @(PRO2, C1, C2, c) in let t = @(Lin_Lin_Thm3, A, C, A, B, c1) in let D = @(FST, t), d = @(SND, t) in let u1 = @(Lin_Par_Thm41, A, B, D), u2 = @(Lin_Par_Thm41, A, D, B) in let E = @(FST, u1), e = @(SND, u1), F = @(FST, u2), f = @(SND, u2) in ?(E1 : Point, F1 : Point, G : Point) let DE1 = @(FLINE_SEG, D, E1), BF1 = @(FLINE_SEG, B, F1) in @(And, @(JP_FLine, G, DE1, BF1), @(And, @(On_FLine, E, DE1), @(On_FLine, F, BF1))); dec Lin_Sqr_Lem2 : !(A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in let p = @(FLine_Seg_Lem, A, B) in let P1 = @(On_FLine, A, AB), P2 = @(On_FLine, B, AB) in let p1 = @(PRO1, P1, P2, p), p2 = @(PRO2, P1, P2, p) in let q = @(Right_Ang_Thm2, A, B, A, p1) in let H = @(FST, q), h = @(SND, q) in let s = @(IIAxm21, A, H, A, B) in

266

Theorems Proven With Postulate 5

let C = @(FST, s), c = @(SND, s) in let ab = @(DISTANCE, A, B), ac = @(DISTANCE, A, C) in let C1 = @(RRGs, ac, ab), C2 = @(In_Between, H, A, C) in let c1 = @(PRO1, C1, C2, c), c2 = @(PRO2, C1, C2, c) in let t = @(Lin_Lin_Thm3, A, C, A, B, c1) in let D = @(FST, t), d = @(SND, t) in let u = @(Lin_Sqr_Lem21, A, B) in let G = @(FST, @(SND, @(SND, u))), g = @(SND, @(SND, @(SND, u))) in @(Square2, A, B, D, G);

We will then be able to give the proof of Lin Sqr Thm2: def Lin_Sqr_Thm2 = \(A : Point, B : Point) let AB = @(FLINE_SEG, A, B) in let p = @(FLine_Seg_Lem, A, B) in let P1 = @(On_FLine, A, AB), P2 = @(On_FLine, B, AB) in let p1 = @(PRO1, P1, P2, p), p2 = @(PRO2, P1, P2, p) in let q = @(Right_Ang_Thm2, A, B, A, p1) in let H = @(FST, q), h = @(SND, q) in let s = @(IIAxm21, A, H, A, B) in let C = @(FST, s), c = @(SND, s) in let ab = @(DISTANCE, A, B), ac = @(DISTANCE, A, C) in let C1 = @(RRGs, ac, ab), C2 = @(In_Between, H, A, C) in let c1 = @(PRO1, C1, C2, c), c2 = @(PRO2, C1, C2, c) in let t = @(Lin_Lin_Thm3, A, C, A, B, c1) in let D = @(FST, t), d = @(SND, t) in let u = @(Lin_Sqr_Lem21, A, B) in let G = @(FST, @(SND, @(SND, u))), g = @(SND, @(SND, @(SND, u))) in ;

267

Theorems Proven With Postulate 5

8.9

268

Theorem 47

Theorem 47 Theorem 8.9 In right-angled triangles the square on the side subtending the right angle is equal to the squares on the sides containing the right angle. That is, the area of the first square is the sum of the areas of the other two. A complete proof would involves so many steps that the main argument would be obscured, so here is an outline instead.

Proof 1. Let ABC be a right-angled triangle with, say, pothesis)

̸

BAC the rigt angle. (Hy-

2. On BC, AB and AC respectively construct squares BCDE, ABFG, and ACHI. (Theorem 46) 3. Through A draw AJ parallel to BE. (Theorem 31) 4. AJ, if produced sufficiently, will intersect BC in a point K. 5. AK, if produced sufficiently, will intersect ED in a point L. 6. Draw AE and FC. (Postulate 1) 7. Triangles FBC and ABE are congruent. 8. area of △ FBC = area of △ ABE. (Postulate 9) 9. 2 (area of △ FBC) = 2 (area of △ ABE). (Algebraic Properties) 10. ABFG is a parallelogram. 11. area of ABFG = 2 (area of △ FBC). (Theorem 41) 12. area of ABFG = 2 (area of △ ABE). (9, 11, Algebraic Properties) 13. BKLE is a parallelogram. 14. area of BKLE = 2 (area of △ ABE). (Theorem 41) 15. area of ABFG = area of BKLE. (12, 14, Algebraic Properties) 16. Similarly by drawing AD and BH it follows that area of ACHI = area of CDLK. 17. area of BCDE = area of BKLE + area of CDLK. (Algebraic Properties)

Theorems Proven With Postulate 5

269

18. Therefore, area of BCDE = area of ABFG + area of ACHI. (17, 18, Algebraic Properties) The Theorem Pythagoras can be stated algebraically: “If the side of a rightangled triangle have length a, b, c, with c subtending the right angle, then c2 = a2 + b2 .” You are probably more familiar with it in this form.

Theorem 47 in PowerEpsilon In terms of PowerEpsilon, we have the following declaration for theorem Pythagoras Thm need to be proven. dec Pythagoras_Thm : !(t : Triangle) [@(RAng_Triangle, t) -> let AB = @(GET_TRI_AB, t), BC = @(GET_TRI_BC, t), CA = @(GET_TRI_CA, t) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in @(RREq, @(RRADD, ab2, ca2), bc2)]; Alternatively, the theorem can be expressed in terms of Point. dec Pythagoras_Thm2 : !(A : Point, B : Point, C : Point) [@(RAng_Triangle2, A, B, C) -> let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in @(RREq, @(RRADD, ab2, ca2), bc2)];

Proof in PowerEpsilon The following lemma is corresponding to the Step 4 in the informal proof given above. dec Pythagoras_Lem21 : !(A : Point, B : Point, C : Point) [@(RAng_Triangle2, A, B, C) ->

Theorems Proven With Postulate 5

270

let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)), F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in let r = @(Lin_Par_Thm41, B, E, A) in let J = @(FST, r), j = @(SND, r) in ?(K : Point, X : Point) let ax = @(FLINE_SEG, A, X), bc = @(FLINE_SEG, B, C) in @(And, @(JP_FLine, K, ax, bc), @(On_FLine, J, ax))];

The following lemma is corresponding to the Step 5 in the informal proof given above. dec Pythagoras_Lem22 : !(A : Point, B : Point, C : Point) !(p : @(RAng_Triangle2, A, B, C)) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)), F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3),

Theorems Proven With Postulate 5

271

I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in let s = @(Pythagoras_Lem21, A, B, C, p) in let K = @(FST, s), k = @(SND, s) in ?(L : Point, Y : Point) let ay = @(FLINE_SEG, A, Y), ed = @(FLINE_SEG, E, D) in @(And, @(JP_FLine, L, ay, ed), @(On_FLine, K, ay));

The following lemma is corresponding to the Step 7 in the informal proof given above which says that the triangle △ FBC and △ ABE are congruent. dec Pythagoras_Lem23 : !(A : Point, B : Point, C : Point) [@(RAng_Triangle2, A, B, C) -> let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)), F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in @(Triang_Cong2, F, B, C, A, B, E)];

If a quadrilateral is a square, then it is a parallelogram. dec Sqr_Par_Lem : !(A : Point, B : Point, F : Point, G : Point) [@(Square2, A, B, F, G) -> @(Parallelogram2, A, B, F, G)];

If a quadrilateral ABFG is a parallelogram, then AGFB is a parallelogram too. dec Par_Eq_Lem : !(A : Point, B : Point, F : Point, G : Point)

Theorems Proven With Postulate 5

272

[@(Parallelogram2, A, B, F, G) -> @(Parallelogram2, A, G, F, B)];

The following lemma establish the relationship between right-angled triangle ABC, square ABFG, and parallel finite straight lines GC and FB. dec RAng_Par_Lem1 : !(A : Point, B : Point, C : Point, F : Point, G : Point) let GC = @(FLINE_SEG, G, C), FB = @(FLINE_SEG, F, B) in [@(RAng_Triangle2, A, B, C) -> @(Square2, A, B, F, G) -> @(Parallel_FLine, GC, FB)];

If ABC is right-angled triangle and there exists a point Y such that L is a jointpoint of AY and ED, and F is on AY, then LA and EB are parallel finite straight lines. dec RAng_Par_Lem2 : !(A : Point, B : Point, C : Point, D : Point, E : Point, K : Point, L : Point) let LA = @(FLINE_SEG, L, A), EB = @(FLINE_SEG, E, B) in [@(RAng_Triangle2, A, B, C) -> ?(Y : Point) let ay = @(FLINE_SEG, A, Y), ed = @(FLINE_SEG, E, D) in @(And, @(JP_FLine, L, ay, ed), @(On_FLine, K, ay)) -> @(Parallel_FLine, LA, EB)];

To prove Pythagoras Thm21, we need two lemmas Pythagoras Lem24 and Pythagoras Lem25. dec Pythagoras_Lem24 : !(A : Point, B : Point, C : Point) !(p : @(RAng_Triangle2, A, B, C)) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)),

Theorems Proven With Postulate 5

F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in let s = @(Pythagoras_Lem21, A, B, C, p) in let K = @(FST, s), k = @(SND, s) in let t = @(Pythagoras_Lem22, A, B, C, p) in let L = @(FST, t), l = @(SND, t) in @(Parallelogram2, K, L, E, B); dec Pythagoras_Lem25 : !(A : Point, B : Point, C : Point, E : Point, F : Point, G : Point, K : Point, L : Point) let CFB = @(TRIANGLE_SEG, C, F, B), AEB = @(TRIANGLE_SEG, A, E, B), FBC = @(TRIANGLE_SEG, F, B, C), ABE = @(TRIANGLE_SEG, A, B, E) in [@(RREq, @(TRI_AREA, FBC), @(TRI_AREA, ABE)) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, G, F, B)), @(RRADD, @(TRI_AREA, CFB), @(TRI_AREA, CFB))) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, K, L, E, B)), @(RRADD, @(TRI_AREA, AEB), @(TRI_AREA, AEB))) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, G, F, B)), @(QUAD_AREA, @(QUAD_SEG, K, L, E, B)))];

The proof of Pythagoras Thm21 is then represented as follows: def Pythagoras_Thm21 = \(A : Point, B : Point, C : Point) \(p : @(RAng_Triangle2, A, B, C)) let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)),

273

Theorems Proven With Postulate 5

274

F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)), s = @(Pythagoras_Lem21, A, B, C, p), K = @(FST, s), k = @(SND, s), t = @(Pythagoras_Lem22, A, B, C, p), L = @(FST, t), l = @(SND, t) in let FBC = @(TRIANGLE_SEG, F, B, C), ABE = @(TRIANGLE_SEG, A, B, E) in let TFBC = @(TRI_AREA, FBC), TABE = @(TRI_AREA, ABE) in let t1 = @(Pythagoras_Lem23, A, B, C, p), t2 = @(Tri_Cong_Axm2, F, B, C, A, B, E, t1), t3 = @(RREq_Times2_Lem, TFBC, TABE, t2), t4 = @(Sqr_Par_Lem, A, B, F, G, f), t5 = @(Par_Eq_Lem, A, B, F, G, t4), t6 = @(RAng_Par_Lem1, A, B, C, F, G, p, f), t7 = @(QT_Par_Thm, G, A, B, F, C, t5, t6), t8 = @(Pythagoras_Lem24, A, B, C, p), t9 = @(RAng_Par_Lem2, A, B, C, D, E, K, L, p, l), ta = @(QT_Par_Thm, L, K, B, E, A, t8, t9) in @(Pythagoras_Lem25, A, B, C, E, F, G, K, L, t2, t7, ta);

Beside of Pythagoras Thm21, we also need the theorem Pythagoras Thm22. dec Pythagoras_Thm22 : !(A : Point, B : Point, C : Point) !(p : @(RAng_Triangle2, A, B, C)) let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)), F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in let s = @(Pythagoras_Lem21, A, B, C, p) in let K = @(FST, s), k = @(SND, s) in let t = @(Pythagoras_Lem22, A, B, C, p) in

Theorems Proven With Postulate 5

275

let L = @(FST, t), l = @(SND, t) in @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, I, H, C)), @(QUAD_AREA, @(QUAD_SEG, K, L, D, C)));

And two lemmas described as follows: dec Quad_Sum_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point, H : Point, I : Point, J : Point, K : Point, L : Point) let bc = @(FLINE_SEG, B, C), ed = @(FLINE_SEG, E, D) in [@(On_FLine, K, bc) -> @(On_FLine, L, ed) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, G, F, B)), @(QUAD_AREA, @(QUAD_SEG, K, L, E, B))) -> @(RREq, @(QUAD_AREA, @(QUAD_SEG, A, I, H, C)), @(QUAD_AREA, @(QUAD_SEG, K, L, D, C))) -> @(RREq, @(RRADD, @(QUAD_AREA, @(QUAD_SEG, A, G, F, B)), @(QUAD_AREA, @(QUAD_SEG, A, I, H, C))), @(QUAD_AREA, @(QUAD_SEG, B, C, D, E)))]; dec Quad_Sqr_Lem : !(A : Point, B : Point, C : Point, D : Point, E : Point, F : Point, G : Point, H : Point, I : Point) [@(Square2, B, C, D, E) -> @(Square2, A, B, F, G) -> @(Square2, C, A, H, I) -> @(RREq, @(RRADD, @(QUAD_AREA, @(QUAD_SEG, A, G, F, B)), @(QUAD_AREA, @(QUAD_SEG, A, I, H, C))), @(QUAD_AREA, @(QUAD_SEG, B, C, D, E))) -> let AB = @(DISTANCE, A, B), BC = @(DISTANCE, B, C), CA = @(DISTANCE, C, A) in let ab2 = @(RRTIMES, AB, AB), bc2 = @(RRTIMES, BC, BC), ca2 = @(RRTIMES, CA, CA) in @(RREq, @(RRADD, ab2, ca2), bc2)];

We then will be able to prove the theorem Pythagoras Thm2.

Theorems Proven With Postulate 5

def Pythagoras_Thm2 = \(A : Point, B : Point, C : Point) \(p : @(RAng_Triangle2, A, B, C)) let q1 = @(Lin_Sqr_Thm2, B, C), q2 = @(Lin_Sqr_Thm2, A, B), q3 = @(Lin_Sqr_Thm2, C, A) in let D = @(FST, q1), E = @(FST, @(SND, q1)), d = @(SND, @(SND, q1)), F = @(FST, q2), G = @(FST, @(SND, q2)), f = @(SND, @(SND, q2)), H = @(FST, q3), I = @(FST, @(SND, q3)), h = @(SND, @(SND, q3)) in let r = @(Lin_Par_Thm41, B, E, A) in let J = @(FST, r), j = @(SND, r) in let s = @(Pythagoras_Lem21, A, B, C, p), t = @(Pythagoras_Lem22, A, B, C, p) in let K = @(FST, s), X = @(FST, @(SND, s)), k = @(SND, @(SND, s)), L = @(FST, t), Y = @(FST, @(SND, t)), l = @(SND, @(SND, t)) in let ax = @(FLINE_SEG, A, X), bc = @(FLINE_SEG, B, C), ay = @(FLINE_SEG, A, Y), ed = @(FLINE_SEG, E, D) in let U1 = @(JP_FLine, K, ax, bc), U2 = @(On_FLine, J, ax), V1 = @(JP_FLine, L, ay, ed), V2 = @(On_FLine, K, ay) in let u1 = @(PRO1, U1, U2, k), u2 = @(PRO2, U1, U2, k), v1 = @(PRO1, V1, V2, l), v2 = @(PRO2, V1, V2, l) in let S1 = @(On_FLine, K, ax), S2 = @(On_FLine, K, bc), T1 = @(On_FLine, L, ay), T2 = @(On_FLine, L, ed) in let s1 = @(PRO1, S1, S2, u1), s2 = @(PRO2, S1, S2, u1), t1 = @(PRO1, T1, T2, v1), t2 = @(PRO2, T1, T2, v1) in let w1 = @(Pythagoras_Thm21, A, B, C, p),

276

Theorems Proven With Postulate 5

277

w2 = @(Pythagoras_Thm22, A, B, C, p), w3 = @(Quad_Sum_Lem, A, B, C, D, E, F, G, H, I, J, K, L, s2, t2, w1, w2) in @(Quad_Sqr_Lem, A, B, C, D, E, F, G, H, I, d, f, h, w3);

Chapter 9

Conclusions In this book, we have tried to use a computer programming language PowerEpsilon to formulate a mathematical theory.

9.1

Mathematical Theorem Proving as Computer Programming

People use computers to do all sorts of things, from the mundane to the miraculous. Among the enduring uncommon uses are game playing, notably chess, and theorem proving. Clearly chess is interesting, but why has theorem proving remained active? We can make an argument that theorem proving is a significant activity, and if computers can help when it really counts, society will be better off. Some people are interested in it for exactly reasons. They apply automated theorem proving in such areas as program verification and hardware verification. There are companies whose employees make a living from this activity. We might call these people logic engineers. This experimental work will provide support to our view that: 1. Mathematical theories can be developed in the same way as in computer programming. Like to develop a large software system, a Mathematical theories can be analyzed, designed and implemented in a very systematic manner. 2. PowerEpsilon can be used for developing real mathematical theories. Many techniques for program development can be applied to mathematical proof development such as stepwise program and data refinement, program transformation, modularization and paramerization. Inventing a new proving technique is like to find a new computer algorithm.

278

Conclusions

279

More than a decade after Haken and Appel’s proof of the four-color theorem, computers are still scarce among mathematicians and seldom used for serious mathematical research. Many mathematicians have the feeling that using a computer is akin to cheating and say that computation is merely an excuse for not thinking harder. Still, computers are beginning to creep into mathematics. By providing vivid images that suggest new questions, they are helping to mend a rift that had developed between pure and applied mathematics. They are linking mathematical questions in computer science with computational questions in mathematics. These changes are enriching a subject that many outsiders have regarded as an abstract, even useless pursuit. • Students may become more stimulating when they are working with computer for mathematical theorem proving. The theorem proving activities can be viewed as to work out a proof rather than to write a proof. Computer-aided instruction has a number of advantages. When well programmed, a computer can relieve teachers of giving and correcting drill exercises, even of teaching many manipulative techniques. Students who react negatively to a teacher can turn to the computer; it instructs without emotional involvement and gives instant, impartial feedback. It shows no impatience no matter how often a student repeats a mistake. The computer’s greatest asset is that it forces the student to become an active participant. • The future mathematical theorem proving may become more and more complicated, far beyond the ability of any individual. A mechanical proof development system can be used to organize mathematicians to work together much like a software development tool help software engineers to do a team work. • As the spelling checker for word processing, we also need proof checker for mathematical theorem proving. We make mistakes everyday for everything we do. The clever one is the person who can let the mistake made as less as possible. All the characteristics of computer programming apply to mathematical theorem proving such as modularity and reusability. A proof is more efficient if it can run faster than others. More technical terminology will be used in mathematical theorem proving such as debugging a mathematical theorem proof or running a mathematical theorem proof. A proof can be executed distributively and concurrently.

Conclusions

9.1.1

Programming via Reasoning Methodologies

9.1.1.1

Finding Good Presentation of Problems

280

Choosing a good presentation is a key step towards a successful solution of the problem in computer programming. It will be the same in mathematics. A good presentation of a mathematical structure means that the problem is half-solved. For example, a real number can be represented as a Dedekind cut or a Cauchy sequence. Both have their advantages and disadvantages. The Dedekind cut construction of real numbers has an initial advantage of simplicity, in that it provides a simple definition of real numbers and its ordering. But multiplication of Dedekind cuts is awkward, and verification of the properties of multiplication is a tedious business. The Cauchy sequence construction of real numbers also has the advantage of generality, since it can be used with an arbitrary metric space in place of rational numbers. Therefore, the two definitions are often used for different purposes. 9.1.1.2

Information Hiding Principle

In computer programming practice, we often try to separate program from its implementations. This will be able to isolate the implementation details from the input/output behaviours of the programs. On the other hand, with its abstract nature, a mathematical theorem (specification) and its proof (implementation) are always separated from each other. Therefore, a good computer program always captured some elegant mathematical properties. 9.1.1.3

Stepwise Refinement

Breaks the problem’s solutions down into progressively more detailed levels (decomposition). In computer programming we often break a problem being solved down into several small subproblems so that the solutions to the subproblems can be composed into the solution to the original problem. It is similar in mathematical theorem proving practices, mathematicians often break a proof of a theorem to be proved into several small lemmas, the theorem will be proved once these lemmas being proved.

9.1.2

Abstract Programming versus Reasoning

We use the phrase “abstract reasoning” here in the sense of Paulson [12], where he points out its desirability and the fact that the theory mechanism of Cambridge LCF, which is based on ideas of Sannella and Burstall [14], does not support it. The idea of abstract reasoning is that, instead of re-proving a theorem for many concrete theories, we can prove an abstract theorem in an abstract theory, then simply instantiate the abstract proofs as concrete ones for free. The notion of abstract theories for computer-assisted reasoning is analogous to the

Conclusions

281

notion of “parameterized modules” for modular programming. It becomes more useful as the task of proof development becomes large.

9.1.3

Structured Programming versus Reasoning

‘Structured programming’ is the formulation of programs as hierarchical, nested structures of statements and objects of computation. Structured programming is considered by many programmers as synonym for modular or top-down programming. Structured programming can be visualized as the application of basic problem decomposition methods to establish a manageable, hierarchical problem structure. These problem decomposition methods are common to all engineering disciplines as well as the physical, chemical, and biological sciences. In larger proof development activities, one hopes to conquer a big and complex task by dividing it into smaller and simpler ones and then putting the results together in a structural way. This principle can be applied to mathematical theorem proof development too.

9.1.4

Algorithm and Proof Complexity

Algorithms can be evaluated by a variety of criteria. Most often we shall be interested in the rate of growth of the time or space required to solve larger and larger instances of a problem. We usually associate with a problem an integer, called the size of the problem, which is a measure of the quantity of input data. For example, the size of a matrix multiplication problem might be the largest dimension of the matrices to be multiplied. The size of a graph problem might be the number of edges. The time needed by an algorithm expressed as a function of the size of a problem is called the time complexity of the algorithm. The limiting behaviour of the complexity as size increase is called the asymptotic time complexity. Analogous definitions can be made for space complexity and asymptotic space complexity.

9.1.5

Subproofs and Subroutines

A proof can be included within a proof, much like the way a procedure can be included within a program. The relationship between proofs and subproofs in logic is similar to the relationship between procedures and subprocedures (modules and submodules) in programs. A theorem and its proof can be used in two ways: first use the theorem to prove something else; secondly, study the proof of the theorem. A procedure and its specification can be used in two ways: first, understand the specification so that calls of the procedure can be written; secondly, study the procedure body to understand how the procedure works. The similarity should make the idea of subproofs easy to understand.

Conclusions

9.1.6

282

Software versus Mathematical Engineering

The aim of software engineering is to construct software of high quality. By software we usually mean large program. Most of design and programming techniques directed towards the development of small programs cannot simply be generalized to be applicable to large scale software development. Qualities, sometimes called software engineering criteria, are divided into two categories: external and internal qualities. The external qualities dealt with in particular correctness, robustness, extendbility, reusability and efficiency. The internal qualities dealt with modularity and continuity. • Correctness or reliability is the ability of a software system to perform its services as defined by its requirements definition and specification. • Robustness is the ability of a software system to continue to behave reasonably even in abnormal situations. • Extendibility is the ability of software system can be adapted to changes of its requirements definition and specification. • Reusability is the ability of software modules to be reused as components to construct new software for other applications. • Efficiency is the ability of software to make good use of hardware resources and operating system services. • Modularity is the property of software to be divided into more or less autonomous components connected with a coerent and simple interface. Modularity is not only important at the implementation (program) level but also at the design (specification) level. At the implementation level, examples of modules are procedures, data types, iterators and processes. An important aspect of modularity is information hiding principle. • Continuity is a quality that yields software systems that won’t need drastic modifications because of small changes in the requirements definition. This means that small changes in the requirements should affect only one or a few modules but not the structure of whole. So continuity is heavily related to modularity. Since any software system is likely to evolve, especially during the maintenance phase of the software life cycle (after the system has been released), continuity is an internal quality that plays a crucial role in software development. Similarly, the aim of mathematical engineering is also to construct mathematical theorem proofs of high quality, especially for large scale proof development. • Correctness is always critical for mathematical theorem proving. An incorrect proof is completely nonsense and cannot be called a proof.

Conclusions

283

• A proof should also be extendable if its corresponding theorem is changed. • The criteria of reusability is also applicable to the process of mathematical theorem proving so that a theorem and its proof can be reused as components to construct new mathematical theories. • No mathematicians concern about efficiency of mathematical theorem proofs as traditionally no proofs can be viewed as a computer programs. However, since a proof represented in PowerEpsilon is also a functional program, the efficiency will also be one of our major concerns. • Most of the ideas of modularity came from mathematics where a theorem proof is often divided into a number of proofs of lemmas. A well-structured proof is very easy to read and understand. The biggest difference between software development and mathematical theorem proof development is the result. The result of software development is the software products. For mathematics, however, there is no commercial driven force directly. 9.1.6.1

Software versus Mathematics Development Teams

A large software system usually consists of several million lines of codes and developed by a team with several hundred programmers. It has been the same in mathematical theory development. 9.1.6.2

Measurement of Programs and Proofs

Productivity, quality and software measurement are inextricably bound together. Looking back, one of the major leaps in productivity and quality came with the introduction of structured programming. Structured programming caused a significant improvement in design quality that was then reflected in the quality of the code and resulting system. The quality improvements, made possible by structured programming, also increased productivity. Quality improvements reduced the number of errors passed from the design process into the coding and testing process. • Correcting an error in code costs four times as much as the same error corrected in design. • Correcting the same error in test costs 15 times more than it would have in design. • Correcting the same error once the program is in production costs 30 times as much.

Conclusions

284

Structured, GOTO-less programming also reduced the errors passed from coding into testing and production. Each of these quality improvements depended heavily on methodology borrowed from manufacturing: design and production inspections, both of which are forms of measurement. High-quality programs are easier to enhance and maintain. They incur fewer costs for reruns. They rarely leave the user waiting for an on-line response or batch report. Quality measurement tools give the programmers, analysts, and managers immediately feedback about the quality of existing or emerging code. Measurement is the foundation of code quality. And code quality helps reduce future maintenance and operational costs. The only way to ensure high quality and productivity is to measure products as they are produced. To measure quality and productivity effectively, the measurement process should be mechanized wherever possible. In the case of software metrics, the measurements should provide information about software quality and productivity. Software quality should be broken down even further into maintainability, reliability, and the other quality attributes. These measurements are all conceptual. They must be converted to physical properties before they can be measured. Few, if any, are directly measurable, but quality measurements can be inferred from combining a number of other separate measurements. Software metrics have to be broken down into simple steps that extract the needed data and combine it to produce the required measure. From these steps, a measuring instrument can be designed and built. The major metrics are listed as follows: • Correctness. The degree to which a program satisfies the user’s specification. (Does it do what you want?) • Efficiency. The amount of computing resources required to perform a user-defined function. (Does it run on your hardware as well as it can?) • Flexibility. How much effot does it take to enhance the program? (Can you change it?) • Integrity. How well are the software and data protect from the security breeches. (Is it controlled and secure?) • Interoperability. How much effort is required to couple this program or system with another. (Will it interface with other systems?) • Maintainability. How much effort will be required to locate and repair errors in the program? (Can you fix it?) • Portability. What kind of effort will it take to transfer a program from one machine to another? (Will it run on your micros, minis, and mainframes?) • Reliability. To what degree can the system be expected to perform its function without failure? (Does it work accurately without failure?)

Conclusions

285

• Reusability. To what extent can the module or program be used in other applications? (Can it be partially or totally reused in other applications to reduce costs?) • Testability. How much effort will be required to test the structure and correctness of the code? (Can you test it?) • Usability. How much effort will the user expend to learn and use the system input and output? (Can the computer center run it? Can the user operate it easily?) As a proof in terms PowerEpsilon being also a computer program, the software metrics listed above are also applicable to it. 9.1.6.3

CASE Tools versus CAME Tools

A CASE (Computer Aided Software Engineering) tool that support standard software development methodologies allow software designers to turn the design activities into practical engineering. It allows the developers to automate the development and maintenance process to a larg extent – giving systems of a higher quality at a lower cost. The development of PowerEpsilon will make it possible for us to development a set of CAME (Computer Aided Mathematical Engineering) tools to support standard mathematical theorem proof development process. 9.1.6.4

Version Control and Configuration Management

As a programming language environment, PowerEpsilon can be enhanced by a version control mechanism so that many different versions of a proof can be easily managed. In addition, a proof may be very big containing several hundred pages of PowerEpsilon program. Therefore, a theorem proving team may be organized to achieve a proving task. This will make many mathematicians working together on a networking environment with different computers and operating systems. In this case, a configuration management system is needed. 9.1.6.5

Sales of Software and Mathematics

We have seen a lot of business enterprices working on developing and marketing software products over the world. However, how do we sell mathematics? • We may sell mathematical software packages for numerical computing. • We may sell mathematical software tools for education purposes.

Conclusions

9.1.7

286

Programming versus Proving Techniques

Programming techniques are methods being useful in the development of computer programs. The form that programming techniques take is very widely. The most fundamental type of technique is a specialized implementation of an algorithm. Algorithms should be, by definition, implementation-dependent (i.e., not dependent on the device on which they are used). This is obvious in that the concept of an algorithm predates computers.

9.2

Integrating with Other Tools

Euclidean geometry is usually studied in a mixed way. Combining Euclidean geometry, real number theory, and Descartes analytic geometry. Therefore, the best way of using PowerEpsilon is to couple it with many other geometric theorem proving techniques. A possible combination is as follows: 1. Using Wu’s system [16] as a verification system to check the validity of a conjuncture. 2. Using PowerEpsilon to find out a real proof. 3. Using Mathematica for algebraic computation and analysis.

9.3

The Rules of Writing Proofs in PowerEpsilon

1. Using subproofs to make each proof shorter. A longer proof means a longer time pattern matching in PowerEpsilon system. 2. In applying PowerEpsilon to mathematical theorem proving, we know that we often need to translate English sentences into formulas of the higher-order logic. The translation of English into the language of logic is by no means trivial. It is conceivable that the usage of “good” predicates may allow us to represent a problem simply and thus permit us to solve it easily. 3. Making definitions and axioms as simple as possible. 4. Following some simple rules, indentation of a proof provides a two dimensional representation that shows its structure in simple manner. As a habit, I always indent subexpression of an expression two spaces from the column where the expression begins.

Conclusions

9.4 9.4.1

287

Future Works Some Disadvantages

• We have to explicitly specify the straight line AB equal to straight line BA, the angle ̸ ABC equal to angle ̸ CBA, the triangle △ ABC equal to triangle △ BCA and △ CAB. • The algebraic computation capability of PowerEpsilon is relatively weak. • There is no drawing capability for helping us to make a proof easily.

9.4.2

Overloading of Predicates and Functions

In some modern programming languages such as Ada and C++, the operators can be overloaded. For the simplicity we did not include this feature into the current version of PowerEpsilon. However, to make PowerEpsilon more practical, the overloading mechanism may be needed. For example, if a : A and b : B, we may have @(PRODUCT, a, b) of type @(Product, A, B), instead of @(PRODUCT, A, B, a, b).

9.4.3

Separation of Theories and Theory Bodies

Normally, a theory contains only the axioms, definitions, lemmas, theorems and corollaries and the theory body contains the proofs and the local definitions, lemmas, theorems and corollaries. This is much similar to the programming language where the program specification and its definition (body) is completely separated from each other.

9.4.4

Cross-Reference Generator

A cross-reference generator can be constructed which will be used to collect all the important information contained in a formal theory. • The cross-reference generated can be used to indicate that which axiom, lemma, theorem or corollary is never referred in the theory. • The cross-reference generated can be used to indicate that which lemma, theorem or corollary is presented but not proved.

Bibliography [1] Alonzo Church. A formulation of the simple theory of types. Journal of Symbolic Logic, 5, 1940. [2] R. L. Constable and et al. Implementing Mathematics with the Nuprl Proof Development System. Prentice-Hall Inc., Englewood Cliffs, New Jersey, 1986. [3] T. Coquand and G. Huet. The calculus of constructions. Information and Computation, 76(2/3), 1988. [4] Thierry Coquand. Metamathematical investigation of a Calculus of Constructions. In P. Odifreddi, editor, Logic and Computer Science. Academic Press, 1990. [5] M. Gordon, R. Milner, and C. Wadsworth. Edinburgh LCF. LNCS 78. Springer-Verlag, 1979. [6] Sir Thomas L. Heath. The Thirteen Books of Euclgd’s Elements. Dover, 1950. [7] David Hilbert. Foundation of Geometry. Open Court, 10th edition, 1971. [8] W. A. Howard. The formulae-as-types notion of construction. In J. Hindley and J. Seldin, editors, To H. B. Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism. Academic Press, New York, 1980. [9] Per Martin-L¨of. An intuitionistic theory of types: Predicative part. In H. E. Rose and J. C. Shepherdson, editors, Logic Colloquium’73, Amsterdam, 1973. North-Holland. [10] Per Martin-L¨of. Constructive mathematics and computer programming. In Proceedings of Six International Congress for Logic, Methodology, and Philosophy of Science, Amsterdam, 1982. North-Holland. [11] Per Martin-L¨of. Intuitionistic Type Theory. Studies in Proof Theory, Vol. 1. Bibliopolis, Naples, 1984. 288

BIBLIOGRAPHY

289

[12] L. C. Paulson. Theorem Proving in Cambridge LCF. Cambridge University Press, Cambridge, 1987. [13] J. Barkley Rosser. Logic for Mathematicians. McGraw-Hill, 1953. [14] D. Sannella and R. Burstall. Structured theories in LCF. In 8th Colloquium on Trees in Algebra and Programming, 1983. [15] P. Wegner. Classification in object-oriented systems. ACM SIGPLAN Notices, 21(10), 1986. [16] Wen-Jun Wu. On the decision problem and the mechanization of theorem proving in elementary geometry. Scientia Sinica, 21, 1978. [17] M.-Y. Zhu. AUTOSTAR – a software development system. ACM SIGPLAN Notices, 24(3), March 1989. [18] M.-Y. Zhu. Mechanical synthesis of a unification algorithm in PowerEpsilon. In Proceedings of COMPSAC’95, Dallas, August 1995. [19] M.-Y. Zhu. Program transformation in constructive type theory. ACM SIGPLAN Notices, 30(1), January 1995. [20] M.-Y. Zhu and C.-W. Wang. A higher-order lambda calculus: PowerEpsilon. Technical report, Beijing Institute of Systems Engineering, Beijing, 1991. [21] M.-Y. Zhu and C.-W. Wang. Program derivation in PowerEpsilon. In Proceedings of COMPSAC’92, Chicago, September 1992. [22] M.-Y. Zhu and C.-W. Wang. Decision making as theorem proving. Chinese Journal of Systems Engineering and Electronics, 4(1), 1993. [23] M.-Y. Zhu and C.-W. Wang. Mechanical synthesis of a matching algorithm in PowerEpsilon. Chinese Journal of Electronics, 2(1), 1993.

Index λ-abstraction, 24, 28 λ-calculus, 20, 21, 23, 41 λ-expression, 26 λ-expressions, 25, 26 λµ-calculus, 41 λSym -calculus, 41 π/2, 66 π, 66 AUTOSTAR, 3, 23 Ada, 293 C++, 293 Cambridge LCF, 286 LCF, 23 Mathematica, 44, 292 Nuprl, 23 PowerEpsilon, 3, 5, 13, 19, 23–28, 33, 35–38, 64, 70–72, 74, 78, 82, 83, 91, 94, 96, 98, 102, 104, 110, 113, 118, 121, 127, 128, 132, 136, 144, 146, 154, 157, 161, 165, 170, 175, 180, 187, 190, 194, 199, 210, 217, 222, 224, 228, 234, 237, 245, 250, 255, 262, 268, 271, 274, 284, 289, 291– 293 Curry-Howard interpretation, 33 Elements, 7, 8, 12, 64, 71, 73, 84, 101, 103, 105, 125, 127, 131, 145, 154 algebra, 3 axioms, 7, 8 defined terms, 8

postulates, 7 primitive terms, 8 proof, 4 abstract proofs, 286 reasoning, 286 theorem, 286 theories, 286 theory, 286 abstract syntax, 27 Acute Angle definition, 72 Acute-Angled Triangle definition, 83 Adelard, 43 adjancent angles, 70 supplementary angle, 68 algebra, 3, 7, 21 Algebras, 21 algebras, 21 analytic geometry, 44 analytical interpretation, 55–57 Angle definition, 64 angle, 233, 257 angle-sum, 244 angles, 234, 235, 244, 250, 271 Appel, 285 Axiom, 11 axiom, 11, 12 of the system, 11 axiomatic

290

INDEX

thinking, 12 axiomatic set theory, 4 axiomatic-deductive method, 7 axiomatization, 16 axioms, 7, 11–13 axiomtics, 8

congruent, 198, 201, 202, 210, 216 triangles, 4 Congruent Triangle definition, 78 Conjecture, 5 conjecture, 5 conjectures, 5 Beijing Institute of Systems Engineer- Constable, 17 ing, 3 Constructive bisection of angles, 73 mathematics, 17 bisects, 62 constructive, 12 Bishop, 17 logic, 35, 36 Brouwer, 12, 17 mathematics, 17, 19, 23 Burstall, 286 proofs, 36 by double contradiction, 190 type theory, 33 constructive mathematics, 19 calculus, 20, 21, 33 contradiction, 12 Calculus of Constructions, 19 contradictory, 10 CAME, 291 Coquand, 19 Campanus, 43 cross-reference, 293 CASE, 291 generator, 293 Cauchy cubes, 4 sequence, 286 Curry-Howard Center of Circle isomorphism, 33, 41 definition, 84 Circle debugging, 285 definition, 84 Dedekind circle, 84–86 cut, 286 circles, 4, 85–87 deduction as computation, 17 classical deduction system, 18, 20 analysis, 17 deductions as computations, 17 logic, 18, 41 deductive proof, 9 mathematics, 17, 34 defined term, 11, 51 proofs, 41 defined terms, 8, 13, 50, 51 set theory, 17 Degree classical logic, 44 definition, 66 Common Notion, 101 Common Notions, 94, 99, 101 Elements, 43, 44, 46, 47, 50–52 compass postulate, 94 equilateral computation as deduction, 17 triangle, 113, 116, 146, 153 Computer Aided triangles, 113, 145 Mathematical Engineering, 291 Equilateral Triangle Software Engineering, 291 definition, 82 Congruent, 198, 216

291

INDEX

Euclid, 7, 9, 11–13, 46, 47, 50–52, 64, 65, 71, 72, 84, 94, 97, 99–101, 103, 105, 106, 113, 125–127, 132, 145, 154, 160, 190, 193, 216, 228, 250, 254 Euclid’s 10 axioms, 13 axiomatic system, 7 geometry, 13 Euclidean geometry, 4, 13 Euclidean geometry, 44, 47, 101 Excluded-Middle Rule, 141, 168, 173, 192, 200, 209, 226, 235, 243, 257 existential, 12 quantifier, 24, 28 exterior angle, 233, 234, 244 extremities, 50, 57, 58 of surface, 52 Extremities of Line definition, 50 Felleisen, 41 finite straight line, 256, 257 straight lines, 243, 246 first-order logic, 18 formal axiomatics, 12, 13 language, 23, 35 languages, 16 logic frameworks, 21 program derivation, 36 proof, 35 system, 19, 20 theory, 28 tool, 38 user-controlled systems, 23

292

formal proof, 13 four-color theorem, 285 Fraenkel, 16 free variable, 38 Frege, 16 G¨odel’s theory, 17 genetic, 12 Gentzen, 19, 20 Gentzen’s natural deduction system, 19 geometries, 4 geometry, 3, 4, 6, 7, 9, 13 guesses, 5 Haken, 285 Hardy, G. H., 11 Heath, Sir Thomas L., 44, 193 Heiberg, Joan L., 44 Heyting’s explanation, 33 Higher-order predicate logic, 33 higher-order, 19 intuitionistic predicate logic, 33 language, 25 logic, 18, 23 typed λ-calculus, 13 Hilbert, David, 12, 13, 101, 105, 106, 126 Huet, 19 hypotheses, 5 hypothesis, 10–12 implementation, 286 indirect proof, 11 inference rule, 31 inference rules, 20, 28 interior angles, 233, 234, 244 intuition, 7, 10 intuitionism, 17 Intuitionistic logic, 18

INDEX

293

intuitionistic arithmetic, 33 interpretation, 18 logic, 33, 41 point of view, 18 intuitions, 10 intuitive, 7, 12 Isosceles Triangle definition, 82

theories, 284, 289 theory, 284 development, 289 mathematics, 3–7, 9, 12 metamathematics, 4 model theory, 4 modularity, 285

Martin-L¨of, 19 Martin-L¨of’s type theory, 19, 23 material axiomatic system, 8, 9 material axiomatic systems, 8 Mathematical theories, 284 mathematical behavior, 5 continent, 4 engineering, 288 entities, 3 logic, 4, 16, 41 logician, 10 proof, 5 development, 284 properties, 286 structure, 286 technique, 11 theorem, 286 proof, 285, 289 proofs, 289 proving, 285, 286, 288, 289, 292 theorem proof development, 287 theorem proof development process, 291 system, 3 theorems, 3, 5

object-oriented language, 15 Obtuse Angle definition, 71 Obtuse-Angled Triangle definition, 83 opposite angle, 233, 234 opposite angles, 244 OPS5, 17

natural deduction, 38 natural deduction system, 20 Kleene’s realizability interpretation, 33 Newton, Issac, 4 non-Euclidean, 73 Leibniz, Gottfried, 4 non-Euclidean geometry, 106, 216, 233 Line nonconstructive mathematics, 16 definition, 50 number theory, 7

parallel, 233, 237, 244, 255, 261, 270, 273 finite straight lines, 246, 277 lines, 4 straight lines, 233 Parallel Straight Line definition, 55 Parallelogram definition, 91 parallelogram, 250, 254, 268, 270, 274, 277 Parallelograms, 254 parallelograms, 250, 254, 255, 262 parallels, 254, 255, 261, 268 parameterized modules, 287 Parigot, M., 41 Pasch, 13 Paulson, 286

INDEX

Peroendicular Line definition, 55 Perpendicular definition, 70 perpendicular, 70, 71, 270 plane rectilinear angle, 64 plane rectilinear angles, 64 Point definition, 46 polymorphic λ-calculus, 33 functional programming language, 19, 23 Polymorphism, 16 polymorphism, 21 postulates, 12 power domains, 21 predicate calculus, 20 predicate logic, 16, 19 primitive term, 8, 11, 51 primitive terms, 8, 11–13, 50–52 program specification, 293 Proof by contradiction, 11, 12 proof, 4, 5, 7, 18, 11 by contradiction, 11 by reductio ad absurdum [reduction to absurdity], 11 proof by contradiction, 11 proof theory, 4 proofs, 12 Pythagoras, 6, 7, 233, 274 Pythagorean, 6 ideas, 0 Pythagoreans, 6, 7 Quadrilateral definition, 87 quadrilateral, 87, 93, 277 quadrilaterals, 85 VAA hypothesis, 11, 12

294

RAA [for reductio ad absurdum] hypothesis, 11 Real Analysis, 44, 47 real number, 45, 46 system, 44, 43, 52 rectilinear, 66, 197 rectilinear angle, 185, 107 rectilinears, 73 Rectlinear definition, 64 recursion theory, 7 reusability, 281 right angle, 66, 69–77, 273, 274 right angles, 60, 91, 233, 234, 244 right-angled triangle, 873, 274, 277 triangles, 273 Right-Angled Triangle definition, 83 Rosser, 10 rule of inference, 18, 20 rules of inference, 20 of inferences, 20 rules of deduction, 17 Sannella, 986 Scalene Triangle definition, 82 Schopenhauer, Arthur, 125 second-order λ-calculus, 21 semantics, 13, 21 of programming languages, 38 specification, 286–288 specifications, 286, 290 spheres, 4 Square definition, 91 square, 91, 270, 271, 273, 277 squares, 4, 271, 273 Straight Line definition, 50

INDEX

straight line, 233, 237, 270 Straight lines, 237 straight lines, 233, 237 straightedge postulates, 94 Superposition, 125 superposition, 101, 103, 125, 126, 144 superposition-free Proof, 197 Syntax, 24 syntax, 13 Thales, 6, 7, 125, 127, 169 Theon, 43 Theorem, 11 Triangle definition, 74 triangle, 49, 193, 210, 216, 244, 254, 268, 276 Triangle Inequality, 193 Triangles, 198, 201, 216, 244, 255, 261, 274 triangles, 49, 201, 202, 210, 216, 261 type inference mechanism, 35 rules, 28 system, 25, 27 system, 15, 16, 19, 21, 38 theories, 13 type theories, 19 type theory, 15, 19, 20 universal quantifier, 24, 28 valid, 20 valid well-formed formulas, 20 valid wff, 20 valid wffs, 20 vertical angle, 69 Wegner, Peter, 15, 20 wff, 20 wffs, 20 Zermelo, 16

295

ZF, 16