proof - Idris interactive prover won't perform rewrite on an assumption -


(i know interactive prover deprecated in favour of elaborator reflection, i've not got around updating yet. soon!)

i have following assumptions available in prover (among others):

x : nat c : nat m : nat lte : lte c m pma : x + (m - c) = (x + m) - c p : part (s c) (plus x (minus m c)) 

pma created using function wrote myself which, given natural numbers x, y, z , proof z ≤ y, produces proof x + (y - z) = (x + y) - z.

part n x type of partitions of natural number x n pieces (each piece being natural number), order matters.

what i'd rewrite type of p using pma produce new assumption:

p' : part (s c) (minus (plus x m) c) 

however, tried:

let p' = rewrite pma in p 

and also:

let p' = rewrite (sym pma) in p 

because can never remember way round rewrite works, , in both cases got:

rewrite did not change type letty 

where slipping up? thought might because there's difference between plus , + , between minus , -, i'm pretty sure i've used them interchangeably in proofs before. there other difference between expressions i'm missing?

i'm using idris version 0.9.18-, if helps.

you use pma : x + (m - c) = (x + m) - c rewrite type of typed e1 + (e2 - e3), choice of e1, e2 , e3. however, have

p : part (s c) (plus x (minus m c)) 

which not of form. is of form p (e1 + (e2 - e3)). need lift equality of

e1 + (e2 - e3) ~> (e1 + e2) - e3 

to

p (e1 + (e2 - e3)) ~> p ((e1 + e2) - e3) 

this replace does:

replace : {a:_} -> {x:_} -> {y:_} -> {p : -> type} -> x = y -> p x -> p y replace refl prf = prf 

so in particular case, given

pma : x + (m - c) = (x + m) - c 

then

replace {part (s c)} pma : part (s c) (x + (m - c)) -> part (s c) ((x + m) - c) 

and in particular,

replace {part (s c)} pma p : part (s c) ((x + m) - c) 

Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

How to get the ip address of VM and use it to configure SSH connection dynamically in Ansible -

javascript - Get parameter of GET request -