解方程考虑伊莎贝尔像这样的目标(而不用担心ccProd
和ccFromList
):有关联的,并且可交换操作
ccProd {x} (set xs) ⊔ (ccProd {x} (set ys) ⊔ (ccFromList xs ⊔ (ccFromList ys ⊔ ccProd (set xs) (set ys)))) =
ccProd {x} (set xs) ⊔ (ccFromList xs ⊔ (ccFromList ys ⊔ (ccProd {x} (set ys) ⊔ ccProd (set xs) (set ys))))
这是真的,因为⊔
是联想和交换。我通常的做法是使用
apply (metis join_assoc join_comm)
它可以工作,但已经花了很长时间才能完成。
同样,我有这样
ccProd {x} (set xs) ⊔ (ccProd {x} (set ys) ⊔ (ccFromList xs ⊔ (ccFromList ys ⊔ ccProd (set xs) (set ys)))) =
ccFromList xs ⊔ (ccProd {x} (set ys) ⊔ (ccFromList ys ⊔ (ccProd (set xs) {x} ⊔ ccProd (set xs) (set ys))))
,我还需要办理的ccProd
可交换的一个实例的目标。再次
apply (metis join_assoc join_comm ccProd_comm)
做的工作,但需要更长的时间。
有更好的方法来解决涉及交换和关联算子的方程吗?
也许战术也不simpproc,鉴于定理join_assoc join_comm
,就解决了第一个目标,降低第二目标
ccProd {x} (set xs) = ccProd (set xs) {x}
嗯。考虑到交换性规则等问题,我一直认为简化器会循环。所以将'join_comm'标记为'[simp]'实际上是安全的?看起来好像很棒! – 2014-12-03 14:02:41
将'join_comm'添加到simpset是安全的,因为它本身不会导致循环。就个人而言,我更喜欢在simpset中不使用AC规则。这样,简化器就不会混合这些术语,这使得在子目标未解决时更易于理解。 – 2014-12-03 15:20:05
另外一个好点;在添加它们之后,我现在要修复一些证据...... – 2014-12-03 15:53:36