 ;;              (lambda [z (==> A B C)]
 ;;                z x y)))))
 
-(proof land-intro
+(proof and-intro
        :script
        (assume [x A
                 y B

       (assume [f absurd]
         (qed (f A))))

(defterm neg
  "Logical negation."
  [[A :type]]
  (==> A absurd))

(example
 (type-of neg) => '(Π [A ✳] ✳))

(defthm absurd-intro
  "Introduction rule for absurdity."
  [[A :type]]
  (==> A (neg A)
       absurd))

;; (proof absurd-intro

         (have concl (land A B) :discharge [C step3])
         (qed concl)))

(defthm and-elim-left
  "Elimination rule for logical conjunction.
   This one only keeps the left-side of the conjunction"
  [[A :type] [B :type]]
  (==> (and A B)
       A))

;; (proof and-elim-left
;;        :script
;;        (assume [H1 (and A B)
;;                 x A
;;                 y B]
;;          (have <a> (==> (==> A B A) A) :by (H1 A))
;;          (have <b> (==> A (==> B A))
         
;;          (assume [H2 (==> A B A)]
;;            (have <b> A :by ((<a>) H2))
;;            (qed <b>))))



