Thanks again, everyone, and I realized how wrong I was last night and performed 
Michael's exercise:

   What if you quote H1, H2 and all of the theorems that you
   ultimately quoted in the final proof as arguments to "by"? Does
   miz3 "by" then get it in one step?  That's the true test.

Below I reproved my first 23 theorems with 1-line proofs of this sort.   
Arguably they're all pretty obvious results, although one of them earned  a 
MESON solved at number of 849,716.   The computer keeps rebooting on my 24th 
theorem (I've gotten a partial MESON number of 18million), so I'll report on 
that later.  

I see how I've been so wrong about miz3 & MESON.  In my Hilbert axiomatic 
geometry code,  I only asked miz3 to verify logical deductions that I thought 
were obvious.   I never asked miz3 to prove the theorems for me.  What I didn't 
ask for, I didn't get!  I draw 2 conclusions:

1) Michael is right: miz3 (using MESON) could conceivably justify any miz3 
statement 

  x by th1, th2, ...

as long as the implication

th1 /\ th2 /\ th3 ... ==> x 

is actually provable in FOL or maybe HOL.   If this implication is provable and 
miz3 gives a #2 timeouts error, that's only because miz3 is preventing itself 
from trying hard enough to prove this implication.  That's the answer to the 
theoretical question I needed for my paper:   x by th1, th2, ... will be 
verified if it's true and if miz3 thinks it's "easy enough".

2) Thus even non-tactics miz3 can be used to try to prove theorems rather to 
verify proofs.  This doesn't affect my educational scheme of high school 
student coding up their rigorous axiomatic geometry proofs in miz3.  If miz3 
verifies a student's proof, and I think the proof is too short, I can ask the 
student for more details.  Math is always like that. 

Josef, I looked at your code http://bit.ly/KfuypA, and it doesn't look short. 
Let me ask you again: did you code up short Vampire proofs of my Tarski 
results,  something like the 1-line proofs I have below (after the almost 200 
lines of definition and axioms)? 

-- 
Best,
Bill 

horizon := 0;; 
timeout := 1000;;

new_type("point",0);;
new_type_abbrev("point_set",`:point->bool`);;
new_constant("Between",`:point->point->point->bool`);;
new_constant("Line",`:point_set->bool`);;
new_constant("===",`:(point->bool)->(point->bool)->bool`);;

parse_as_infix("cong",(12, "right"));;
parse_as_infix("same_side",(12, "right"));;
parse_as_infix("===",(12, "right"));;
parse_as_infix("<_seg",(12, "right"));;
parse_as_infix("<_ang",(12, "right"));;
parse_as_infix("Suppl",(12, "right"));;
parse_as_infix("NOTIN",(11, "right"));;

let NOTIN = new_definition
  `!a:A l:A->bool. a NOTIN l  <=> ~(a IN l)`;;

let Interval_DEF = new_definition
  `! A B X. open (A,B) X <=> Between A X B`;;

let Collinear_DEF = new_definition
  `Collinear A B C  <=> 
  ? l. Line l /\  A IN l /\ B IN l /\ C IN l`;;

let SameSide_DEF = new_definition
  `A,B same_side l <=> 
  Line l /\  ~(? X. (X IN l) /\  X IN open (A,B))`;;

let Ray_DEF = new_definition
  `! A B X. ray A B X <=> ~(A = B) /\ Collinear A B X /\ A NOTIN open (X,B)`;;

let Ordered_DEF = new_definition
 `ordered A B C D <=>
  B IN open (A,C) /\ B IN open (A,D) /\ C IN open (A,D) /\ C IN open (B,D)`;;

let InteriorAngle_DEF = new_definition
 `! A O B P. 
  int_angle A O B P <=> ~Collinear A O B /\ ? a b. 
  Line a /\ O IN a /\ A IN a /\ Line b /\ O IN b /\ B IN b /\
  P NOTIN a /\ P NOTIN b /\ P,B same_side a /\ P,A same_side b`;;

let InteriorTriangle_DEF = new_definition
 `! A B C P. 
  int_triangle A B C P <=> 
  P IN int_angle A B C  /\ P IN int_angle B C A  /\ P IN int_angle C A B`;;

let Tetralateral_DEF = new_definition
  `Tetralateral A B C D  <=> 
  ~(A = B) /\ ~(A = C) /\ ~(A = D) /\ ~(B = C) /\ ~(B = D) /\ ~(C = D) /\ 
  ~Collinear A B C /\ ~Collinear B C D /\ ~Collinear C D A /\ ~Collinear D A 
B`;;

let Quadrilateral_DEF = new_definition
  `Quadrilateral A B C D  <=> 
  Tetralateral A B C D /\ 
  open (A,B) INTER open (C,D) = {} /\ 
  open (B,C) INTER open (D,A) = {} `;;

let ConvexQuad_DEF = new_definition
  `ConvexQuadrilateral A B C D  <=> 
  Quadrilateral A B C D /\ 
  A IN int_angle B C D /\ B IN int_angle C D A /\ C IN int_angle D A B /\ D IN 
int_angle A B C `;;

let Segment_DEF = new_definition
  `seg A B = {A, B} UNION open (A,B)`;;

let SEGMENT = new_definition
  `Segment s  <=>  ? A B. s = seg A B /\ ~(A = B)`;;

let SegmentOrdering_DEF = new_definition
 `s <_seg t   <=> 
  Segment s /\ 
  ? C D X. t = seg C D /\ X IN open (C,D) /\ s === seg C X`;;

let Angle_DEF = new_definition
 ` angle A O B = ray O A UNION ray O B `;;

let ANGLE = new_definition
 `Angle alpha  <=>  ? A O B. alpha = angle A O B /\ ~Collinear A O B`;;

let AngleOrdering_DEF = new_definition
 `alpha <_ang beta   <=> 
  Angle alpha /\ 
  ? A O B G. ~Collinear A O B  /\  beta = angle A O B /\ 
             G IN int_angle A O B  /\  alpha === angle A O G`;;

let RAY = new_definition
 `Ray r  <=> ? O A. ~(O = A) /\ r = ray O A`;;

let TriangleCong_DEF = new_definition
 `! A B C A' B' C' :point. (A, B, C) cong (A', B', C')  <=> 
  ~Collinear A B C /\ ~Collinear A' B' C' /\ 
  seg A B === seg A' B' /\ seg A C === seg A' C' /\ seg B C === seg B' C' /\ 
  angle A B C === angle A' B' C' /\ 
  angle B C A === angle B' C' A' /\ 
  angle C A B === angle C' A' B'`;;

let SupplementaryAngles_DEF = new_definition
 `! alpha beta. alpha Suppl beta   <=> 
  ? A O B A'. ~Collinear A O B  /\  O IN open (A,A')  /\  alpha = angle A O B  
/\  beta = angle B O A'`;;

let RightAngle_DEF = new_definition
 `! alpha. Right alpha  <=> Angle alpha /\ 
  ? beta. alpha Suppl beta /\ alpha === beta`;;

let PlaneComplement_DEF = new_definition
 `! A:point alpha:point_set. complement alpha P  <=> P NOTIN alpha`;;

let CONVEX = new_definition
 `Convex alpha  <=>  ! A B. A IN alpha /\ B IN alpha  ==> open (A,B) SUBSET 
alpha`;;


(* ----------------------------------------------------------------- *)
(* The axioms.                                                       *)
(* ----------------------------------------------------------------- *)


let I1 = new_axiom
  `! A B.  ~(A = B) ==> ?! l. Line l /\  A IN l /\ B IN l`;;

let I2 = new_axiom
  `! l. ? A B. Line l /\  A IN l /\ B IN l /\ ~(A = B)`;;

let I3 = new_axiom
  `? A B C. ~(A = B) /\ ~(A = C) /\ ~(B = C) /\ 
                             ~Collinear A B C`;;

let B1 = new_axiom
  `! A B C. Between A B C ==> ~(A = B) /\ ~(A = C) /\ ~(B = C) /\ 
            Between C B A /\ Collinear A B C`;;

let B2 = new_axiom
  `! A B. ~(A = B) ==> ? C. Between A B C`;;

let B3 = new_axiom
  `! A B C. ~(A = B) /\ ~(A = C) /\ ~(B = C) /\ Collinear A B C
    ==> (Between A B C \/ Between B C A \/ Between C A B) /\
        ~(Between A B C /\ Between B C A) /\ 
        ~(Between A B C /\ Between C A B) /\ 
        ~(Between B C A /\ Between C A B)`;;

let B4 = new_axiom
  `! l A B C. Line l /\ ~Collinear A B C /\ 
   A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
   (? X. X IN l /\ Between A X C) ==> 
   (? Y. Y IN l /\ Between A Y B) \/ (? Y. Y IN l /\ Between B Y C)`;;

let C1 = new_axiom
  `! s O Z. Segment s /\ ~(O = Z)  ==>  
   ?! P. P IN ray O Z DELETE O  /\  seg O P === s`;;

let C2Reflexive = new_axiom
  `Segment s  ==>  s === s`;;

let C2Symmetric = new_axiom
  `Segment s /\ Segment t /\ s === t  ==>  t === s`;;

let C2Transitive = new_axiom
  `Segment s /\ Segment t /\ Segment u /\ 
   s === t /\ t === u ==>  s === u`;;

let C3 = new_axiom
  `! A B C A' B' C'.  B IN open (A,C) /\ B' IN open (A',C') /\ 
  seg A B === seg A' B' /\ seg B C === seg B' C'  ==> 
  seg A C === seg A' C'`;;

let C4 = new_axiom
 `! alpha O A l Y. Angle alpha /\ ~(O = A) /\ Line l /\ O IN l /\ A IN l /\ 
  Y NOTIN l  ==>  
  ?! r. Ray r /\ ? B. ~(O = B) /\ r = ray O B /\ B NOTIN l /\ B,Y same_side l 
/\ 
  angle A O B === alpha`;;

let C5Reflexive = new_axiom
  `Angle alpha  ==>  alpha === alpha`;;

let C5Symmetric = new_axiom
  `Angle alpha /\ Angle beta /\ alpha === beta  ==>  beta === alpha`;;

let C5Transitive = new_axiom
  `Angle alpha /\ Angle beta /\ Angle gamma /\ 
   alpha === beta /\ beta === gamma ==>  alpha === gamma`;;

let C6 = new_axiom
  `! A B C A' B' C'. ~Collinear A B C /\ ~Collinear A' B' C' /\ 
   seg B A === seg B' A' /\ seg B C === seg B' C' /\ angle A B C === angle A' 
B' C'
   ==> angle B C A === angle B' C' A'`;;


(* ----------------------------------------------------------------- *)
(* Theorems.                                                         *)
(* ----------------------------------------------------------------- *)


let B1' = thm `;
  ! A B C.  B IN open (A,C) ==> ~(A = B) /\ ~(A = C) /\ ~(B = C) /\ 
             B IN open (C,A) /\ Collinear A B C
  by IN, Interval_DEF, B1`;;


let B2' = thm `;
  ! A B. ~(A = B) ==> ? C.  B IN open (A,C)
  by IN, Interval_DEF, B2`;;


let B3' = thm `;
  ! A B C. ~(A = B) /\ ~(A = C) /\ ~(B = C) /\ Collinear A B C
    ==> (B IN open (A,C) \/ C IN open (B,A) \/ A IN open (C,B)) /\
        ~(B IN open (A,C) /\ C IN open (B,A)) /\ 
        ~(B IN open (A,C) /\ A IN open (C,B)) /\ 
        ~(C IN open (B,A) /\ A IN open (C,B))
  by IN, Interval_DEF, B3`;;


let B4' = thm `;
  ! l A B C. Line l /\ ~Collinear A B C /\ 
   A NOTIN l /\ B NOTIN l /\ C NOTIN l /\ 
   (? X. X IN l /\  X IN open (A,C)) ==>
   (? Y. Y IN l /\  Y IN open (A,B)) \/ (? Y. Y IN l /\  Y IN open (B,C)) 
   by B4, IN, Interval_DEF`;;


let B4'' = thm `;
  let l be point_set;
  let A B C be point;
  assume Line l     [H0];
  assume ~Collinear A B C /\ A NOTIN l /\ B NOTIN l /\ C NOTIN l     [H1];
  assume A,B same_side l /\ B,C same_side l     [H2];
  thus A,C same_side l

  by H0, H1, H2, B4', IN, SameSide_DEF`;;


let BiggerThanSingleton_THM = thm `;
  let p be A->bool;
  let x be A;
  assume x IN p     [H1];
  assume ~(p = {x})     [H2];
  thus ? a . a IN p /\ ~(a = x)

  by H1, H2, SING_SUBSET, SUBSET_ANTISYM, SUBSET, NOTIN, IN_SING`;;


let DisjointOneNotOther_THM = thm `;
  let x be A;
  let l m be A->bool;
  assume l INTER m = {}     [H1];
  assume x IN m     [H2];
  thus x NOTIN l

  proof
  qed     by H1, H2, NOTIN, IN_INTER, NOT_IN_EMPTY`;;


let IntersectionSingletonOneNotOther_THM = thm `;
  let e x be A;
  let l m be A->bool;
  assume l INTER m = {x}     [H1];
  assume e IN l     [H2];
  assume ~(e = x)     [H3];
  thus e NOTIN m

  by H1, H2, H3, NOTIN, IN_INTER, IN_SING`;;


let EquivIntersectionHelp_THM = thm `;
  let e x be A;
  let l m be A->bool;
  assume l INTER m = {x}     [H1];
  assume e IN m DELETE x     [H2];
  thus e NOTIN l 

  by H1, H2, NOTIN, IN_DELETE, IntersectionSingletonOneNotOther_THM`;;


let SubsetTensor_THM = thm `;
  let a b s be A->bool;
  assume a SUBSET b     [H1];
  thus a INTER s SUBSET b INTER s /\ s INTER a SUBSET s INTER b

  by H1, INTER_SUBSET, SUBSET_TRANS, SUBSET_INTER`;;


let NonemptySubsetSing_THM = thm `;
  let a be A;
  let l be A->bool;
  assume ~(l = {})     [H1];
  assume l SUBSET {a}     [H2];
  thus a IN l

  by H1, H2, MEMBER_NOT_EMPTY, SUBSET, IN_SING`;;


let CollinearSymmetry_THM = thm `;
  let A B C be point;
  assume Collinear A B C     [H1];
  thus Collinear A C B /\ Collinear B A C /\ Collinear B C A /\ 
       Collinear C A B /\ Collinear C B A 

  by H1, Collinear_DEF`;;


let OnePointImpliesAnother_THM = thm `;
  let P be point; 
  thus ? Q:point. ~(Q = P)

  by I3`;;


let ExistsPointOffLine_THM = thm `;
  let l be point_set; 
  assume Line l     [H1];
  thus ? Q:point. Q NOTIN l

  by H1, I3, NOTIN, Collinear_DEF`;;


let BetweenLinear_THM = thm `;  ::solved at 849,716
  let A B C be point;
  let m be point_set;
  assume Line m /\ A IN m /\ C IN m     [H1];
  assume B IN open (A,C) \/ C IN open (B,A)  \/ A IN open (C,B)     [H2];
  thus B IN m

  by H1, H2, B1', Collinear_DEF, I1`;;

 
let CollinearLinear_THM = thm `;
  let A B C be point;
  let m be point_set;
  assume Line m /\ A IN m /\ C IN m     [H1];
  assume Collinear A B C \/ Collinear B C A \/ Collinear C A B     [H2];
  assume ~(A = C)     [H3];
  thus B IN m

  by H1, H2, H3, Collinear_DEF, I1`;;


let SameSideDisjointIntersection_THM = thm `;
  ! l A B. Line l  ==> 
    (A,B same_side l  <=>  open (A,B) INTER l = {})
  by IN_INTER, SameSide_DEF, MEMBER_NOT_EMPTY`;;


let NonCollinearImpliesDistinct_THM = thm `;  ::solved at 1,050,293  
  let A B C be point;
  assume ~Collinear A B C     [H1];
  thus ~(A = B) /\ ~(A = C) /\ ~(B = C)

  by H1, OnePointImpliesAnother_THM, I1, Collinear_DEF`;;


let OpenIntervalSubsetLine_THM = thm `;
  let A B be point;
  let l be point_set;
  assume Line l /\ A IN l /\ B IN l     [H1];
  thus open (A,B) SUBSET l

  by H1, BetweenLinear_THM, SUBSET`;;


let SameSideDisjointLines_THM = thm `;  
  let l m be point_set;
  let A B be point;
  assume Line m /\ A IN m /\ B IN m         [m_line];
  assume Line l                                 [l_line];
  assume m INTER l = {}                              [Disjoint];
  thus A NOTIN l  /\  B NOTIN l  /\  A,B same_side l
 
  by m_line, l_line, Disjoint, IN_INTER, MEMBER_NOT_EMPTY, NOTIN, 
OpenIntervalSubsetLine_THM, SubsetTensor_THM, SUBSET_EMPTY, 
SameSideDisjointIntersection_THM`;;


let Reverse4Order_THM = thm `;
  let A B C D be point;
  assume ordered A B C D     [H1];
  thus ordered D C B A

  by H1, Ordered_DEF, B1'`;;


let OriginInRay_THM = thm `; 
  let O Q be point;
  assume ~(Q = O)     [H1];
  thus O IN ray O Q

  by H1, B1', NOTIN, I1, Collinear_DEF, IN, Ray_DEF`;;


let EndpointInRay_THM = thm `;
  let O Q be point;
  assume ~(Q = O)     [H1];
  thus Q IN ray O Q

  by H1, B1', NOTIN, I1, Collinear_DEF, IN, Ray_DEF`;;


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to