[Agda] Data.Rational
Andreas Abel
andreas.abel at ifi.lmu.de
Tue Mar 11 14:28:42 CET 2014
Such a development would also be welcome for the standard library...
On 11.03.2014 11:43, Li Nuo wrote:
> Hi,
>
> I think you can use an alternative approach to make the definition
> simpler. You could define the setoid version (namely fractions which
> doesn't have to be reduced) and use what we call "definable quotient
> structure" to relate the setoid definition with the normal form
> definition (which you can find here
> http://www.cs.nott.ac.uk/~txa/publ/defquotients.pdf). Generally
> speaking, it contains a set of operations and properties like
> normalisation functions (in this case, the fraction-reducing functions)
> and representative selection functions.
>
> The advantage of it is to lift functions in a more systematic way,
> benefiting from "quotients" without "quotient types". Here in this case,
> it reduces the complexity of checking coprime property all through which
> is unnecessary when doing operations on fractions(It is only needed if
> we want to check whether they are normal form fractions i.e. reduced
> fractions).
>
> I hope it helps you.
>
> Cheers,
> Nuo
>
>
> 2014-03-11 4:38 GMT+00:00 Amr Sabry <sabry at soic.indiana.edu
> <mailto:sabry at soic.indiana.edu>>:
>
> Hi,
>
> I need some decent Rational library and since the current Data.Rational
> looks like it needs quite a bit of extension, I started writing a few
> small functions. I am getting stuck very quickly though. Here is a small
> example that should work:
>
> -- unary negation
> ℚ- : ℚ → ℚ
> ℚ- p with ℚ.numerator p | ℚ.denominator-1 p | toWitness (ℚ.isCoprime p)
> ... | -[1+ n ] | d | c = (+ ℕ.suc n ÷ ℕ.suc d) {fromWitness {!!}}
> ... | + 0 | d | _ = p
> ... | + ℕ.suc n | d | c = (-[1+ n ] ÷ ℕ.suc d) {fromWitness {!!}}
>
> In the first line, c has type:
>
> c : {i : ℕ} → Σ (i ∣ ℕ.suc n) (λ x → i ∣ ℕ.suc d) → i ≡ 1
>
> The goal is:
>
> ?0 : Coprime (ℕ.suc n) (ℕ.suc d)
>
> where Coprime is defined in Data.Nat.Coprimality as:
>
> Coprime m n = ∀ {i} → (i ∣ m) × (i ∣ n) → (i ≡ 1)
>
> As far as I can see, the type of the goal expands directly to the type
> of c and in fact, "giving" c to the hole works but then the file doesn't
> reload after that?
>
> Any suggestions? --Amr
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se <mailto:Agda at lists.chalmers.se>
> https://lists.chalmers.se/mailman/listinfo/agda
>
>
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>
--
Andreas Abel <>< Du bist der geliebte Mensch.
Depeartment of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden
andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Agda
mailing list