Hello,
I am trying to prove:
g `WiresRTC((CA (HighSignal str)),s) ==> ((CA (HighSignal str)) IN s) \/
?str1. WiresRTC((CA (HighSignal str1)),s) /\
((CA (SignalLink str str1)) IN s)`;
which is an intermediate result I need to prove WiresRTC (the
reflexive-transitive closure of a set of actions) being reflexive.
As the definition of WiresRTC is:
val (WiresRTC_rules, WiresRTC_ind, WiresRTC_cases) =
Hol_reln
`(!str aSet. (CA (HighSignal str) IN aSet)
==> WiresRTC(CA (HighSignal str), aSet)) /\
(!str str1 aSet. (CA (SignalLink str str1) IN aSet)
==> WiresRTC(CA (SignalLink str str1), aSet)) /\
(!ct aSet. ((CT ct) IN aSet)
==> WiresRTC((CT ct), aSet)) /\
(!str str1 aSet.
WiresRTC(CA (HighSignal str1), aSet) /\
(CA (SignalLink str str1) IN aSet)
==> WiresRTC(CA (HighSignal str),aSet))`;
the proof I am attempting should be quite straightforward (at least, in
principle).
I think the key for the proof to work will be to "expand" the first
occurrence of WiresRTC (probably using "WiresRTC_cases") and try to go
on from there. The problem with this idea is that none of the standard
"rewrite" tactics will expand ONLY the first occurrence (i.e., they will
also expand the second one in this case).
I found that it should be possible to achieve the behaviour I want by
means of something like:
e (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV)[][WiresRTC_cases]);
but I am getting this error:
! Toplevel input:
! e (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) [][WiresRTC_cases]);
! ^
! Type clash: expression of type
! 'a list
! cannot have type
! rewrites
This is the same kind of application I have seen in some other examples
in the web... so I am not sure what is HOL complaining about (I am using
HOL4 Kananaskis 5).There is even a example in the documentation that
states:
GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) [] [ADD_SYM]
(that seems to have the same structure I am using, but calling a
different theorem at the end...). Can you provide me with any hints of
what I am doing wrong here?
I would also like to know if there is any way of defining the
reflexive-transitive closure of a relation in a better way (i.e., so
that HOL knows what it is and there is no need to prove, for example,
that WiresRTC(WiresRTC(a)) = WiresRTC(a)).
Thank you very much,
Juan
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info