我想在python中写一个带有逻辑含义的语句.就像是:
if x => y:
do_sth()
Run Code Online (Sandbox Code Playgroud)
当然,我知道我可以使用:
if (x and y) or not x:
do_sth()
Run Code Online (Sandbox Code Playgroud)
但是在python中有这个逻辑运算符吗?
如何在PROLOG中编写以下规则:如果P则不是Q.
我明白你可以很容易地写,如果P然后Q谓词喜欢q(X) :- p(X),但你怎么能否定q/1谓词?我不想用其他语义来定义新的谓词non_q/1.
如何读取P意味着经典逻辑中的Q?
例如:
Distributivity:
Ka(X->Y) -> (KaX -> KaY)
Run Code Online (Sandbox Code Playgroud)
这是使用经典逻辑规则的模态逻辑.
KaX:知道X是真的.
我很好奇如何阅读英文含义?如果那么呢?
编辑:在模态逻辑中,Ka变为Box,它是盒装形状标志,象征着必要性规则,规则N,意味着,盒子P,如果你在世界三角洲有P,那么所有难以接受的世界也应该有P.
这也是钻石P,这意味着存在一个世界,其中有一个世界可以从钻石P所拥有的世界进入.
logic computer-science boolean-logic implication modal-logic
以下定理在Coq中可证明吗?如果没有,有没有办法证明它不可证明?
Theorem not_for_all_is_exists:
forall (X : Set) (P : X -> Prop), ~(forall x : X, ~ P x) -> (exists x: X, P x).
Run Code Online (Sandbox Code Playgroud)
我知道这种相关关系是真的:
Theorem forall_is_not_exists : (forall (X : Set) (P : X -> Prop), (forall x, ~(P x)) -> ~(exists x, P x)).
Proof.
(* This could probably be shortened, but I'm just starting out. *)
intros X P.
intros forall_x_not_Px.
unfold not.
intros exists_x_Px.
destruct exists_x_Px as [ witness proof_of_Pwitness].
pose (not_Pwitness := forall_x_not_Px witness). …Run Code Online (Sandbox Code Playgroud) 正如另一个我似乎无法找到的StackOverflow答案所述,这种模式在实际的Prolog代码中经常出现:
pred(X) :-
guard(X),
...
pred(X) :-
\+ guard(X),
...
Run Code Online (Sandbox Code Playgroud)
许多人试图将其浓缩
pred(X) :-
(guard(X) ->
...
;
...).
Run Code Online (Sandbox Code Playgroud)
但是众所周知,箭头结构会破坏选择点并且不符合逻辑.
在Ulrich Neumerkel和Stefan Kral的Indexing dif/2中,if_/3提出了一个单调且合乎逻辑的谓词,然而在论文中他们提到了另一个引起我注意的结构:*->.
该*->构造的功能与上面的unsugared guard子句完全相同,因此它似乎非常适合我的用途,因为我不希望有一个必需的具体条件,if_/3而且我不太关心额外的选择点.如果我没有弄错(编辑:我),它提供了相同的语义,if_/3但没有要求在条件谓词中添加"具体化".
然而,在它的SWI文档中,它声称"这种构造很少使用",这对我来说似乎很奇怪.*->在我看来,它比->你在尝试进行纯逻辑编程时更好.有没有理由避免这种结构,或者是否有更好的替代整个保护条款/否定保护条款模式?
if-statement prolog control-structure implication logical-purity
最近出现了一个问题,通常的隐含运算符(|->)和impliesSystemVerilog中的运算符之间有什么区别。不幸的是我找不到一个明确的答案。但是,我收集了以下信息:
第16.12.7节隐含和iff属性:
property_expr1 implies property_expr2
仅当property_expr1的值为false或property_expr2的值为true时,此形式的属性的值为true。
§F.3.4.3.2 派生布尔运算符:
p1 implies p2 ≡ (not p1 or p2)
§F.3.4.3.4 派生的条件运算符:
(if(b) P) ≡ (b |-> P)
但是,LRM并未真正指出实际的区别是什么。我假设在错误的先行情况下(成功与空前成功),它们的评估有所不同,但是我无法找到此假设的任何来源或证据。此外,我知道implies操作员与OneSpin等正式验证工具结合使用非常普遍。
有人可以帮我吗?
PS:似乎在下一本书中对此问题有一个答案:SystemVerilog断言手册,第三版。但是155美元对我来说太过分了,只是为了得到这个问题的答案:)
我试图证明->Coq命题的可传递性:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
Run Code Online (Sandbox Code Playgroud)
我想破坏所有主张,并以反思性来处理所有8种可能性。显然不是那么简单。这是我尝试过的:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
intros P Q R H1 H2.
destruct P. (** Hmmm ... this doesn't work *)
Admitted.
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
1 subgoal
P, Q, R : Prop
H1 : P -> Q
H2 : Q …Run Code Online (Sandbox Code Playgroud) implication ×7
coq ×2
logic ×2
prolog ×2
if-statement ×1
math ×1
modal-logic ×1
negate ×1
python ×1