Hierarchy Classes of Linear Objects #
Recall we have the following linear objects:
Vecin Basic.VectorVecNDin Basic.VectorDirin Basic.VectorProjin Basic.VectorSegin Linear.RaySegNDin Linear.Ray DirFigRayin Linear.Ray DirFigDirLinein Linear.Line DirFigLinein Linear.Line Fig In this file, we assign linear objects into different abstract classes so that properties holds for the whole classes can be proved in a single theorem.
Main Definitions #
LinFig: The class of linear figures, i.e. every three points in the carrier is collinear.DirObj: The class of objects with direction, i.e. equipped with atoDirmethod. It does not have to be a plane figure, e.g.VecNDandDiritself.DirFig: The class of linear figures with direction. Each figure is equipped with atoDirLinemethod.ProjObj: The class of objects with projective direction, i.e. equipped with atoProjmethod. It does not have to be a plane figure, e.g.VecNDandProjitself.ProjFig: The class of linear figures with projective direction. Each figure is equipped with atoLinemethod.
Usage of Classes #
LinFig: A basic class.DirObj: Every two objects has a angle between them. This angle should be saved as Dir and has 3 representations,AngValue(mod 2π),(-π, π],[0, 2π).DirFig:toDirLinemethod, can defineodist,odist_sign,Left,Right,OnLine,OffLine.ProjObj: parallel and perpendicular.ProjFig:toLinemethod, compatibility of carrier to Line.
Only theorems about ProjFig will be dealt in this file.
Further Work #
class
EuclidGeom.LinFig
(α : Type u_1)
(P : outParam (Type u_2))
[outParam (EuclidGeom.EuclideanPlane P)]
extends
EuclidGeom.Fig
:
Type (max u_1 u_2)
- carrier : α → Set P
- collinear' : ∀ {A B C : P} {F : α}, EuclidGeom.lies_on A F → EuclidGeom.lies_on B F → EuclidGeom.lies_on C F → EuclidGeom.Collinear A B C
Instances
class
EuclidGeom.ProjFig
(α : Type u_1)
(P : outParam (Type u_2))
[outParam (EuclidGeom.EuclideanPlane P)]
extends
EuclidGeom.LinFig
,
EuclidGeom.ProjObj
:
Type (max u_1 u_2)
- carrier : α → Set P
- collinear' : ∀ {A B C : P} {F : α}, EuclidGeom.lies_on A F → EuclidGeom.lies_on B F → EuclidGeom.lies_on C F → EuclidGeom.Collinear A B C
- toProj : α → EuclidGeom.Proj
- toLine : α → EuclidGeom.Line P
- carrier_subset_toLine : ∀ {F : α}, EuclidGeom.Fig.carrier F ⊆ EuclidGeom.Line.carrier (EuclidGeom.toLine F)
- toLine_toProj_eq_toProj : ∀ {F : α}, (EuclidGeom.toLine F).toProj = EuclidGeom.toProj F
Instances
- toProj : β → EuclidGeom.Proj
- toDir : β → EuclidGeom.Dir
- toDir_toProj_eq_toProj : ∀ {G : β}, (EuclidGeom.toDir G).toProj = EuclidGeom.toProj G
Instances
class
EuclidGeom.DirFig
(α : Type u_1)
(P : outParam (Type u_2))
[outParam (EuclidGeom.EuclideanPlane P)]
extends
EuclidGeom.ProjFig
:
Type (max u_1 u_2)
- carrier : α → Set P
- collinear' : ∀ {A B C : P} {F : α}, EuclidGeom.lies_on A F → EuclidGeom.lies_on B F → EuclidGeom.lies_on C F → EuclidGeom.Collinear A B C
- toProj : α → EuclidGeom.Proj
- toLine : α → EuclidGeom.Line P
- carrier_subset_toLine : ∀ {F : α}, EuclidGeom.Fig.carrier F ⊆ EuclidGeom.Line.carrier (EuclidGeom.toLine F)
- toLine_toProj_eq_toProj : ∀ {F : α}, (EuclidGeom.toLine F).toProj = EuclidGeom.toProj F
- toDir : α → EuclidGeom.Dir
- toDir_toProj_eq_toProj : ∀ {G : α}, (EuclidGeom.DirFig.toDir G).toProj = EuclidGeom.toProj G
- toDirLine : α → EuclidGeom.DirLine P
- toDirLine_toDir_eq_toDir : ∀ {F : α}, (EuclidGeom.toDirLine F).toDir = EuclidGeom.DirFig.toDir F
- toDirLine_toLine_eq_toLine : ∀ {F : α}, (EuclidGeom.toDirLine F).toLine = EuclidGeom.toLine F
- reverse : α → α
- rev_rev : ∀ {F : α}, EuclidGeom.DirFig.reverse (EuclidGeom.DirFig.reverse F) = F
- toDirLine_rev_eq_to_rev_toDirLine : ∀ {F : α}, (EuclidGeom.toDirLine F).reverse = EuclidGeom.toDirLine (EuclidGeom.DirFig.reverse F)
Instances
Equations
- EuclidGeom.instProjObjProj = { toProj := id }
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
theorem
EuclidGeom.carrier_toProj_eq_toProj
{P : Type u_1}
[EuclidGeom.EuclideanPlane P]
{α : Type u_2}
{A : P}
{B : P}
[EuclidGeom.ProjFig α P]
{F : α}
[_h : EuclidGeom.PtNe B A]
(ha : EuclidGeom.lies_on A F)
(hb : EuclidGeom.lies_on B F)
:
(SEG_nd A B).toProj = EuclidGeom.toProj F
theorem
EuclidGeom.line_of_pt_toProj_eq_to_line
{P : Type u_1}
[EuclidGeom.EuclideanPlane P]
{α : Type u_2}
{A : P}
[EuclidGeom.ProjFig α P]
{F : α}
(h : EuclidGeom.lies_on A F)
:
theorem
EuclidGeom.DirFig.rev_toDir_eq_neg_toDir
{P : Type u_1}
[EuclidGeom.EuclideanPlane P]
{α : Type u_2}
[EuclidGeom.DirFig α P]
(l : α)
:
theorem
EuclidGeom.DirFig.rev_toProj_eq_toProj
{P : Type u_1}
[EuclidGeom.EuclideanPlane P]
{α : Type u_2}
[EuclidGeom.DirFig α P]
(l : α)
: