2013-03-21 51 views

Trả lời

5

Bạn có thể thử sử dụng rule_trace như sau:

lemma "a ∧ b" 
    using [[rule_trace]] 
    apply rule 

đó sẽ hiển thị trong kết quả:

rules: 
    ?P ⟹ ?Q ⟹ ?P ∧ ?Q 
    ?P ⟹ ?Q ⟹ ?P ∧ ?Q 
proof (prove): step 2 

goal (2 subgoals): 
1. a 
2. b 

Nếu tên của các quy tắc là cần thiết, sau đó bạn có thể thử sử dụng find_theorems; Tôi không chắc liệu họ có thể được xác định trực tiếp hay không.

3

Tất cả những gì được khai báo là Pure.intro/intro/iff (hoặc một trong ? hoặc ! biến thể của nó) được coi là quy tắc giới thiệu mặc định (ví dụ, nếu không có sự kiện hiện tại đang bị xích trong). Tương tự, mọi thứ được khai báo là Pure.elim/elim/iff được coi là quy tắc loại trừ mặc định (nghĩa là nếu các sự kiện hiện tại bị xích vào). Thông thường các tuyên bố sau này được ưu tiên hơn các khai báo trước đó (ít nhất là nếu sử dụng cùng một loại khai báo ... trộn, ví dụ: Pure.intro? với intro, v.v., có thể sẽ khác đi).

Tuy nhiên, điều này chỉ trả lời những nguyên tắc nào được xem xét về nguyên tắc. Tôi không biết cách nào để trực tiếp tìm ra quy tắc nào được áp dụng. Nhưng nó là tương đối thẳng về phía trước để tìm các quy tắc chính xác bởi find_theorems intro trực tiếp trên dòng bạn đã tự hỏi về. Ví dụ:

lemma "A & B" 
find_theorems intro 
proof 

sẽ cho bạn thấy tất cả các quy tắc có thể được áp dụng làm quy tắc giới thiệu cho mục tiêu A & B. Một trong số đó là quy tắc mặc định được áp dụng bởi proof (bạn sẽ nhận ra nó bằng các bản phụ bạn thu được).

Đối với quy tắc loại trừ bạn có thể sử dụng, ví dụ,

lemma assumes "A | B" shows "P" 
using assms 
find_theorems elim 
proof 
3

Các câu trả lời khác đã cho bạn biết cách xác định các bổ sung được áp dụng bởi rule. Lưu ý rằng proof không gọi số rule, nhưng phương thức default. Hầu hết thời gian, default cũng giống như rule, nhưng ví dụ: để chứng minh vị từ địa phương, nó gọi là unfold_locales.

Tôi không biết phương pháp nào để xem điều gì thực sự xảy ra ở đó.

Các vấn đề liên quan